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 #合理
相关推荐
‎ദ്ദിᵔ.˛.ᵔ₎38 分钟前
MySQL 表约束
数据库·mysql
linmengmeng_13143 小时前
【总结】MyBatis-Plus批量插入与清表的正确姿势
java·spring boot·mysql·mybatis
古法安卓4 小时前
Android-休眠唤醒后onLocationChanged没有数据问题排查
android·java·android studio
达梦数据5 小时前
DMDRS空间数据类型说明:Oracle、DM8、MySQL空间数据类型映射
数据库·mysql·oracle
lusklusklusk6 小时前
Oracle索引组织表,SQLServer聚集索引,Mysql Innodb表的数据行不是在磁盘上像排队一样严格连续地存放
mysql·postgresql·oracle·sqlserver
Htr_7 小时前
Creem 2.0 使用指南:面向 AI 构建时代的资金平台
android·数据库·人工智能·ui·photoshop
螺蛳粉 螺蛳粉7 小时前
mysql的备份与恢复
linux·运维·数据库·mysql
wardenlzr8 小时前
车机看门狗(Watchdog)为何会让整机硬重启
android·优化·车机
IT毕设实战小研8 小时前
基于大数据的商场商铺数据分析与可视化的设计与实现
android·java·大数据·django·课程设计