Mysql调优
影响处理速度的因素
硬件配置低
网络带宽窄
存储架构不合理
复杂的查询语句
服务运行参数设置不合理
启用慢查询日志
保存耗时较长的日志
vim/etc/my.cnf[mysqld]slow-query-log#启用慢查询long-query-time=0.3#查询超时时间systemctl restart mysqld统计日志信息
ls/var/lib/mysql/主机名-slow.log mysqldumpslow /var/lib/mysql/主机-slow.log>sql.txt设置查询缓存
查询的内容如果在查询缓存中有,则从查询缓存中拿取,没有则从硬盘里查询,保存到查询缓存中,在进行拿取。
mysql>show variables like"%query_cache%";#have_query_cache YES 启用缓存查询#query_cache_type YES 允许查找的内容放入查询缓存里#query_cache_size 缓存大小vim/etc/my.cnf[mysqld]query_cache_size=10485760#10Mquery_cache_type=ON#ON、OFF、DEMAND(按需缓存)systemctl restart mysqld验证内容是否在查询缓存里查找的
mysql>show status like"%qcache%";#Qcache_hits 0 在缓存里找到的数据#Qcache_inserts 0 在硬盘里找到的数据mysql>show status like"%com_select%";#查询访问总量,内存里找的不会变#查询缓存命中率 = (Qcache_hits / Com_select) * 100% 数字越低越好创建索引
创建索引
mysql>create index 名称 on 库.表(表头名);删除索引
mysql>drop index 名称 on 库.表;测试索引
mysql>explainselect查询命令;设置索引缓存
索引缓存:划分物理内存空间,单独存放索引信息:表名.MYI (/var/lib/mysql/库/表.MYI)
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,先打开文件——>查询——>关闭,第二次也是这个动作
缓存表:可以同时打开多表,不用关闭
查看已打开、打开过多少个表
mysql>show global status like"open%tables";#open_tables <= open_table_cache值 并且 Opened_tables值变化不大查看可以缓存的表,可以同时打开多少张表,不用关闭
mysql>show variables like"table_open_cache";设置并发连接数
查看并发连接
mysql>show variables like"max_connections";max_connections#允许的最大并发连接数mysql>show status like"Max_used_connections";Max_used_connections#当前最大连接数Max_used_connections / max_connections *100% ≈85%设置重用线程
可以重复使用的线程数量,不销毁处理完访问连接的线程,让线程继续在内存里运行着,等待客户端连接
查看重用线程
mysql>show variables like"thread_%_size";thread_cache_size9#查看可以重用的线程查看当前线程状态
mysql>show global status like"threads_%";Threads_running1#正在活跃的线程Threads_created4#已创建的线程Threads_connected3#当前正在连接的线程Threads_cached2#缓存的线程Threads_connections<=thread_cache_size#合理