Innodb_log_waits
因log buffer不足导致等待的次数
相关参数:
Innodb_os_log_pending_fsyncs:redo log的pending fsync()次数
Threads_connected
当前open的线程数
相关参数:
Threads_created:创建的线程数,值过大可增加thread_cache_size
Threads_running:正在运行的线程数
Threads_cached:cached的线程数
Connections:试图登录mysql的连接数,threads_created/connections用以计算cache miss rate
Max_used_connections:自启动以来最大并发连接数
Created_tmp_disk_tables
创建的on-disk临时表数量
即便internal temp table初始建于内存中,当其大于min(tmp_table_size,max_heap_table_size)时,会自动转换为MyiSAM表存入磁盘
可将其与created_tmp_tables比较以确认是否有改进的余地
相关参数:
Created_tmp_files:mysqld创建的临时文件数
Created_tmp_tables:执行语句过程中生成的internal临时表数量
Handler_read_first
读取索引第一个entry的次数,如果该指标很高说明系统进行了大量的full index scan,例如select col1 from foo(col1列有索引)
相关参数:
Handler_read_key:通过key值读取行的次数,说明query很好的利用了索引
Handler_read_last:(5.6新变量)读取索引最后key的次数,order by desc使用
Handler_read_prev:主要用于order by desc
Handler_read_next:依据key顺序读取下一行,index range scan或者non-unique index的col1 = const操作
Handler_read_rnd:依据fixed pos读取行的次数
Handler_read_rnd_next:读取当前下一行,大量全表扫描时此值会比较高
Innodb_buffer_pool_wait_free
说明buffer pool没有空闲内存了,有多种原因,最常见的是Buffer pool太;
Buffer pool采用LRU算法:
所有buffer块位于同一列表,其中后3/8为old,每当新读入一个数据块时,先从队尾移除同等块数然后插入到old子列的头部,如再次访问该块则将其移至new子列的头部
Innodb_buffer_pool_size: buffer pool大小
Innodb_buffer_pool_instances: 子buffer pool数量,buffer pool至少为1G时才能生效
Innodb_old_blocks_pct: 范围5–95, 默认为37即3/8,指定old子列的比重
Innodb_old_blocks_time: 以ms为单位,新插入old子列的buffer块必须等待指定时间后才能移入new列,适用于one-time scan频繁的操作,以避免经常访问的数据块被剔出buffer pool
Key_reads
将MyiSAM索引块从磁盘读入key cache的次数,此系物理读
相关参数:
Key_read_requests:向key cache请求读次数,key_reads/key_read_requests可以计算cache miss rate
Key_write_requests:向key cache写请求次数
Key_writes:从key cache向磁盘写block次数
5.5仅支持一个结构化变量,即key cache,其包含4个部件
Key_buffer_size
Key_cache_block_size:单个块大小,默认1k
Key_cache_division_limit:warm子列的百分比(默认100),key cache buffer列表的分隔点,用于分隔host和warm子列表
Key_cache_age_threshold:页在hot子列中的生命周期,值越小则越快的移至warm列表
默认采用LRU算法,也支持名为中间点插入机制midpoint insertion strategy
索引页刚读入key cache时,被放在warm列的尾部,被访问3次后则移到hot列尾并循环移动,如果在hot列头闲置连续N次都没访问到,则会被移到warm列头,成为被剔出cache的首选;
N= block no* key_cache_age_threshold/100
Open_tables
打开表的数量,如果此值很小而open_table_cache过大,则可适当调小后者
相关参数:
Opened_files:通过my_open()打开过的文件数
Opened_table_definitions:被cached过的.frm文件数量
Opend_tables:被打开过的表数量,如果此值太大有可能table_open_cache过小所致
Open_files:当前open的文件数(不包括socket/pipe)
Open_table_definition:当前cached的.frm数量
5.6.6新加table_open_cache_hits/table_open_cache_misses
Table_definition_cache:存储frm文件,不同于open_table_cache的per-thread,这些文件可被所有线程共享;5.1引入;
与MyISAM不同,InnoDB的open table和open file并无直接联系,即打开frm表时其相应的ibd文件可能处于关闭状态;
故InnoDB只会用到table_definiton_cache,不会使用table_open_cache;
其frm文件保存于table_definition_cache中,而idb则由innodb_open_files决定(前提是开启了innodb_file_per_table);
除此之外,innodb还在内存中维护一个data dictionary,用于记录所有访问过的表,即便表已经关闭了也不释放,show innodb status会显示该部分内存大小;
如果这两个参数设置过大,有可能会消耗较多内存
Select_full_join
执行表扫描的joins数量(没有使用索引)
相关参数:
Select_full_range_join:对referenced表使用range的joins数量
Select_range:第一个表使用ranges的join数量,通常即便很高也不会引起性能问题
Select_range_check:没有使用key的join数量(The number of joins without keys that check for key usage after each row),如果不等于0则需仔细检查表的索引
Select_scan:第一个表使用full scan的join数量
Slow_queries
Slow query的数量(运行时间超过long_query_time)
Uptime
自系统启动以来的秒数
Com_xxx
记录xxx的执行次数,比如com_delete记录delete执行次数,com_commit事务提交数
TPS=(com_commit + com_rollback)/seconds
QPS=queries/seconds
注:通过query cache完成的select由qcache_hits记录,而非com_select