登录 |  注册 |  繁體中文


Mysql状态变量解释及优化方案

分类: 数据库 颜色:橙色 默认  字号: 阅读(1862) | 评论(0)

Mysql状态变量通过”show global status”(自Mysql上次启动以来的统计)获取,重要的参数包括各种SQL执行频率,索引使用情况、锁资源使用情况等。

长时间运行的Mysql服务器,运行flush status;可以重置一些计数器优化性能。
例如DB服务器是416G内存,通过状态变量,可以优化Mysql静态变量和SQL
 
参数
说明
基本情况
 
Connections
连接服务器(不管是否成功)的次数
Uptime
服务器工作时间
Max_used_connections
同时使用的最大连接数量
Open_tables
当前打开的表的数量。
Opened_tables
已经打开的表的数量。调优静态变量表缓存数table_cache:如果open_tables接近table_cache,并且opened_tables不断增长,就需要增加table_cache的值。
table_cache是所有线程打开的表的数目(一个表使用2个文件描述符),表数量多,就要大一些。增大该值可以增加mysqld需要的文件描述符的数量。根据数据库系统中表数量来决定该值,如2048
线程使用情况
 
Threads_cached
线程缓存内的线程数
Threads_connected
当前打开的线程数
Threads_created
创建过的线程数。调优静态变量线程缓存数thread_cache:如果该值增加很快,当前thread_cache_size的值可能太小。缓存访问率是Threads_created/Connections
服务器应缓存多少线程以便重新使用。当客户端断开连接时,如果线程少于thread_cache_size,则客户端的线程被放入缓存,一般配置8
Threads_running
运行(非睡眠)状态的线程数
查询缓存
 
Qcache_free_blocks
缓存中相邻内存块的个数。数目大说明可能有碎片。调优方法FLUSH QUERY CACHE;会对缓存中的碎片进行整理,从而得到一个空闲块,如果flush运行的时间很长,说明缓存太大了,可以适当调小静态变量query_cache_size的值。
Qcache_free_memory
缓存中剩余的内存。调优静态参数query_cache_size:如果剩余内存不足,可以增加该值,如设置query_cache_size=64M
Qcache_hits
查询缓存命中次数,该值越大越好
Qcache_inserts
插入查询缓存的次数。缓存命中率 = 1 – Qcache_hits/ Qcache_inserts80%以上的查询缓存命中率就算合格。
Qcache_lowmem_prunes
查询缓存过低的次数。缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的 free_blocks free_memory 可以告诉您属于哪种情况)。
Qcache_not_cached
不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句。
Qcache_queries_in_cache
当前缓存的查询(和响应)的数量。
Qcache_total_blocks
缓存中块的数量。
SQL执行频率
 
Com_select
执行select操作次数
Com_insert
执行insert操作次数
Com_update
执行update操作次数
Com_delete
执行delete操作次数
Com_commit
事务执行commit操作次数
Comm_rollback
事务执行rollback操作次数。如果回滚频繁,就说明程序存在某些问题。
Slow_queries
慢查询的次数。调优SQL性能:如果该值增加很快,需要分析慢查询日志,针对查询SQL优化。
Innodb_rows_read
执行select返回的行数。以下几个InnoDB的。
Innodb_rows_inserted
执行insert操作的行数。通过这几个参数,可以知道数据库是查询为主还是插入为主。
Innodb_rows_updated
执行update操作的行数
Innodb_rows_deleted
执行delete操作的行数
Sort_merge_passes
排序算法已经执行的合并的数量。调优静态变量sort_buffer_size:如果该值很大,说明排序缓冲区太小,如设置sort_buffer_size = 5M
MySQL 必须要进行排序时,就会在从磁盘上读取数据时分配一个排序缓冲区来存放这些数据行。如果要排序的数据太大,那么数据就必须保存到磁盘上的临时文件中,并再次进行排序。
索引使用情况
 
Handler_read_first
使用全索引扫描的次数。如SELECT col1 FROM foo,假定col1有索引
Handler_read_key
使用索引次数,该值越高越好。
Handler_read_next
按照键顺序读下一行的请求数。使用索引描述时,从数据文件取数据的次数
Handler_read_prev
使用索引描述时,按索引倒序从数据文件取数据的次数。一般是order by/desc查询
Handler_read_rnd
查询直接操作数据文件的次数,有可能未使用索引
Handler_read_rnd_next
在数据文件中读下一行的请求数。若该值非常大,说明使用了大量的表扫描,索引使用率不高或没有使用索引。Handler_read_rnd_next/Com_select是表扫描比率,如果该值超过 4000,就应该调优静态参数read_buffer_size。如read_buffer_size=1M,若超过8M,那么就要优化SQL了。
锁使用情况
 
Innodb_row_lock_current_waits
当前等待行锁的行数
Innodb_row_lock_time
行锁定用的总时间(ms)
Innodb_row_lock_time_avg
行锁定的平均时间(ms)。该值大,说明锁冲突大
Innodb_row_lock_time_max
行锁定的最长时间(ms)
Innodb_row_lock_waits
行锁定必须等待的时间(ms)。该值大,说明锁冲突大
 


上一篇:浅谈HTTP的无状态性   下一篇:mysql锁机制

姓 名: *
邮 箱:
内 容: *
验证码: 点击刷新 *   

回到顶部