mysql性能优化
导致数据库服务器处理速度慢的原因有哪些?
1.服务器硬件配置低
uptime 负载
iostat \ df -h 磁盘状态
free -h 内存状态
2.服务器运行参数配置不合理
查看所有变量:show variables [like "%binlog%"];
查看状态:show global status [like "%innodb%"];
刷新状态信息:flush status;
查看与服务性能相关的参数:
1》max_connections:允许最大的并发连接数
修改:
1.set global max_connections=值;
2.echo max_connections=值 >> /etc/my.cnf
查看:
show variables like “max_connections”;
注意:
曾经并发数/设置的并发连接数=0.85
2》connect_timeout:连接超时时间(默认10秒)
3》wait_timeout:关闭数据库连接的不活动超时时间(默认8小时)
4》key_buffer_size:用于MYISAM引擎的关键索引缓存大小(默认8M)
5》sort_buffer_size:为每个要排序的线程分配此大小的缓存空间
6》read_buffer_size:为顺序读取表记录保留的缓存大小
7》thread_cache_size:允许保存在缓存中被重用的线程数量(默认9)
8》table_open_cache:为所有线程缓存的打开表的数量(默认2000)
SQL查询优化:
查询日志:记录客户端连接和查询操作(root+授权用户)
general_log ------------->重启mysqld服务 -----》默认在/var/lib/mysql/主机名.log
general_log_file=自定义日志路径 //若自定义目录,则目录归属权限为mysql.mysql
慢查询日志:记录耗时较长或不使用索引的查询操作
slow_query_log //启用慢查询日志
slow_query_log_file=自定义慢查询日志的存储路径 默认在/var/lib/mysql
log_query_time=数值 //超多少秒加入日志(默认10秒)
log_queries_not_using_indexes //不使用索引的加入日志
--------------------------------------》重启mysqld服务 ----》生成/var/lib/mysql/主机名-slow.log
统计慢查询日志到文件中:
mysqldumpslow /var/lib/mysql/主机名-slow.log > 文件名
查看缓存的大小:
show variables like "query_cache%";
query_cache_size //查看缓存大小
query_cache_type //查看缓存是否开启
查看当前的查询缓存统计:
show global status like "qcache%";
qcache_hits:在查询缓存里面查找到的数据次数
步骤:
升级服务器硬件
加大网络带宽
调整mysql服务运行参数
调整与查询相关的参数
启用慢查询日志
网络架构不合理