Mysql调优

Mysql调优

影响处理速度的因素

硬件配置低

网络带宽窄

存储架构不合理

复杂的查询语句

服务运行参数设置不合理

启用慢查询日志

保存耗时较长的日志

shell 复制代码
vim /etc/my.cnf
[mysqld]
slow-query-log    #启用慢查询
long-query-time=0.3   #查询超时时间    
systemctl restart mysqld

统计日志信息

shell 复制代码
ls /var/lib/mysql/主机名-slow.log
mysqldumpslow /var/lib/mysql/主机-slow.log > sql.txt

设置查询缓存

查询的内容如果在查询缓存中有,则从查询缓存中拿取,没有则从硬盘里查询,保存到查询缓存中,在进行拿取。

shell 复制代码
mysql> show variables like "%query_cache%";
#have_query_cache YES 启用缓存查询
#query_cache_type YES 允许查找的内容放入查询缓存里
#query_cache_size 缓存大小
shell 复制代码
vim /etc/my.cnf
[mysqld]
query_cache_size=10485760  #10M
query_cache_type=ON  #ON、OFF、DEMAND(按需缓存)
systemctl restart mysqld

验证内容是否在查询缓存里查找的

shell 复制代码
mysql> show status like "%qcache%";
#Qcache_hits 0  在缓存里找到的数据
#Qcache_inserts 0  在硬盘里找到的数据
mysql> show status like "%com_select%"; #查询访问总量,内存里找的不会变
#查询缓存命中率 = (Qcache_hits / Com_select) * 100% 数字越低越好

创建索引

创建索引

shell 复制代码
mysql> create index 名称 on 库.表(表头名);

删除索引

shell 复制代码
mysql> drop index 名称 on 库.表;

测试索引

shell 复制代码
mysql> explain select 查询命令;

设置索引缓存

索引缓存:划分物理内存空间,单独存放索引信息:表名.MYI (/var/lib/mysql/库/表.MYI)

shell 复制代码
mysql> show variables like "key_buffer_size";  #默认给的缓存大小,默认8M,也是.myi的大小,通过/etc/my.cnf更改大小
mysql> show global status like "key_read%"; 
#Key_read_requests 6 索引请求总数
#Key_reads 3 磁盘IO总数
#Key_reads / Key_read_requests 比例越小越好,修改的size越合理

补充:

查询访问多的表,使用myisam存储引擎

desc 表名 来自:表名.frm (结构)

show index 来自:表名.MYI (索引)

select * 来自:表名.MYD (数据)

Innodb存储引擎:.frm + .idb(索引+数据)

设置缓存表

访问表存放在/var/lib/mysql/库/表.MYD 表.ibd,先打开文件------>查询------>关闭,第二次也是这个动作

缓存表:可以同时打开多表,不用关闭

查看已打开、打开过多少个表

shell 复制代码
mysql> show global status like "open%tables";
#open_tables <= open_table_cache值 并且 Opened_tables值变化不大

查看可以缓存的表,可以同时打开多少张表,不用关闭

shell 复制代码
mysql> show variables like "table_open_cache";

设置并发连接数

查看并发连接

shell 复制代码
mysql> show variables like "max_connections";
max_connections #允许的最大并发连接数
mysql> show status like "Max_used_connections";
Max_used_connections #当前最大连接数
shell 复制代码
Max_used_connections / max_connections * 100% ≈ 85%

设置重用线程

可以重复使用的线程数量,不销毁处理完访问连接的线程,让线程继续在内存里运行着,等待客户端连接

查看重用线程

shell 复制代码
mysql> show variables like "thread_%_size";  
thread_cache_size 9  #查看可以重用的线程

查看当前线程状态

shell 复制代码
mysql> show global status like "threads_%";
Threads_running 1 #正在活跃的线程
Threads_created 4 #已创建的线程
Threads_connected 3 #当前正在连接的线程
Threads_cached 2 #缓存的线程

Threads_connections <= thread_cache_size #合理
相关推荐
小王C语言19 分钟前
MySQL 视图:视图是什么,视图和基表之间的关系
数据库·mysql
程序员-Benothing21 分钟前
什么是 MySQL 的主从同步机制?它是如何实现的?
android·数据库·mysql
Android打工人22 分钟前
c++ 、java 融为一体2,c++ 实例化Android虚拟机直接运行java,c,java 一个进程号
android·java·c++
IT毕设实战小研41 分钟前
基于安卓的考研资讯系统设计与实现
android·大数据·vue.js·爬虫·python·考研·课程设计
Mr数据杨9 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
●VON9 小时前
谁小时候不想要一个游戏修改器?我把电脑 Skill 做成了 Android 小助手
android·游戏·电脑
醉颜凉9 小时前
KingbaseES日期格式化:MySQL date_format函数的迁移指南
mysql·date_format·kingbasees·数据库兼容·函数迁移
醉颜凉9 小时前
MySQL 8 忘记 root 密码?这两种方法帮你轻松解决
数据库·mysql·adb
刃神太酷啦10 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb