Percona监控MySQL模板详解

更新时间:2023-07-17 13:46:22 阅读: 评论:0

Percona监控MySQL模板详解
InnoDB Adaptive Hash Index
显⽰了“⾃适应哈希索引”的使⽤情况,哈希索引只能⽤来搜索等值的查询.
# Hash table size 17700827, node heap has 35112 buffer(s)
# 3577.42 hash arches/s, 507.49 non-hash arches/s
Hash Index Cells Total ⾃适应哈希表的槽数=innodb_buffer_pool_size/256
Hash Index Cells Ud ⽤到⾃适应哈希表的查询个数
InnoDB Buffer Pool Activity
显⽰Innodb缓冲池的内部活动,页的创建,读取,写⼊.如果有突然的增加或者减少,需要检查应⽤
Pages Created
Pages Read
Pages Written
InnoDB Buffer Pool
Pool Size InnoDB缓冲池的页数量,每页⼤⼩16K
Databa Pages 数据页⼤⼩
Free Pages 空闲页⼤⼩
Modified Pages "脏"数据页.如果脏数据页太多,则需要检查磁盘IO状态.
InnoDB Checkpoint Age
Uncheckpointed Bytes
显⽰了未写⼊磁盘的数据量.如果该值的⼤⼩接近innodb_log_file_size * n 的总⼤⼩,则需要增加innodb_log_file_size的值,但是要注意,如果发⽣宕机,则需要更长的回复时间.(从redolog恢复)
InnoDB Current Lock Waits
InnoDB Lock Wait Secs
显⽰每秒处于锁等待的innodb事务总数.如果有⼀个⾮常⼤的值,应该检查LOCK WAIT transactions,请看下⾯的模板
InnoDB I/O
File Reads 显⽰每秒⽂件的读次数
File Writes 显⽰每秒⽂件的写次数
Log Writes 写⽇志的次数
File Fsyncs 调⽤fsync()函数的次数.与innodb_flush_log_at_trx_commit值的设置有关.
InnoDB I/O Pending
显⽰了InnoDB挂起的同步或异步IO操作.如果挂起的操作太多,则需要更⼤的RAM,更⼤的缓冲池,更快的磁盘.
Pending Aio Log Ios
Pending Aio Sync Ios
Pending Buf Pool Flushes
Pending Chkp Writes
Pending Ibuf Aio Reads
Pending Log Flushe
Pending Log Writes
Pending Normal Aio Reads
Pending Normal Aio Writes
InnoDB Inrt Buffer
插⼊缓冲,并不是缓存的⼀部分,⽽是物理页,对于⾮聚集索引的插⼊或更新操作,不是每⼀次直接插⼊索引页.⽽是先判断插⼊的⾮聚集索引页是否在缓冲池中.如果在,则直接插⼊,如果不再,则先放⼊⼀个插⼊缓冲区中.然后再以⼀定的频率执⾏插⼊缓冲和⾮聚集索引页⼦节点的合并操作.
使⽤条件:⾮聚集索引,⾮唯⼀
Ibuf Inrts
插⼊的记录数
Ibuf Merged
合并的页的数量
Ibuf Merges
合并的次数
如果merges/merged的值等于3/1,则代表插⼊缓冲对于⾮聚集索引页的IO请求⼤约降低了3倍
InnoDB Inrt Buffer Usage
Ibuf Cell Count
分段⼤⼩
Ibuf Ud Cells
插⼊缓冲区的⼤⼩
Ibuf Free Cells
"⾃由列表"的长度
InnoDB Internal Hash Memory Usage
显⽰了InnoDB内部各种哈希结构(不可⼈⼯⼲预),占⽤的内存⼤⼩.
Adaptive Hash Memory
⾃适应哈希索引占⽤的内存⼤⼩
Page Hash Memory
Dictionary Cache Memory
File System Memory
Lock System Memory
Recovery System Memory
Thread Hash Memory
InnoDB Lock Structures
InnoDB Lock Structs
该图形显⽰了在innodb内部有多少锁结构(不是死锁).这⼤致与当前事务锁住的⾏数有关系.可以⽤来判断是否存在锁争⽤.
对于数量多少算好或者算坏,没有硬性的规定.实际情况下,⼤量的事务在等待锁,很明显,该值越⼩越好.
这个数据来源是SHOW ENGINE INNODB STATUS;
# 23 lock struct(s), heap size 3024, undo log entries 27
# LOCK WAIT 12 lock struct(s), heap size 3024, undo log entries 5
# LOCK WAIT 2 lock struct(s), heap size 368
InnoDB Log
相关变量:innodb_log_buffer_size
InnoDB Log Buffer Size
Log Bytes Written
Log quence number
当前⽇志的位置
Log Bytes Flushed
Log flushed up to
百合花的香味⽇志已经刷新的位置
Unflushed Log
是log_bytes_written与log_bytes_flushed的差值,表⽰⽇志缓存区⾥还有多少数据没被刷新到⽇志⽂件⾥.
如果这个差值超过了innodb_log_buffer_size设置的30%,则需要考虑是否加⼤该参数值.
InnoDB Memory Allocation
Total memory allocated 8824815616; in additional pool allocated 0
Total Mem Alloc
InnoDB申请的总内存量,单位字节
Additional Pool Alloc
分配给额外内存的总量,单位字节
InnoDB Row Lock Time
InnoDB Row Lock Time
该模板读取的Innodb_row_lock_time状态变量,表⽰InnoDB引擎在每次申请数据⾏锁定时等待的总时间(以毫秒为单位). InnoDB Row Lock Waits
InnoDB Row Lock Waits
读取的Innodb_row_lock_waits状态变量,表⽰InnoDB经过这么长时间才获得⼀个⾏锁.(毫秒)
InnoDB Row Operations
Number of rows inrted 50678311, updated 66425915, deleted 20605903, read 454561562
⼤致能表现InnoDB内部的操作
Row Read生病英语
Row Deleted
非洲鸵鸟
Row Updated
Row Inrted
InnoDB Semaphores Wait Time
InnoDB Sem Wait Time Ms
显⽰当前正在等待互斥量的InnoDB线程的等待时间的总耗时(毫秒).
分析:
正常情况下,InnoDB Semaphores Wait Time和 InnoDB Semaphores Waits应该是空的.除⾮服务器运⾏着⾼并发的⼯作负载,它促使InnoDB采取让操作系统等待的措施.信息位于SHOW ENGINE INNODB STATUS的SEMAPHORES⽚段.
相关php脚本代码部分如下:
elif (strpos($line, 'conds the maphore:') > 0) {
# --Thread 907205 has waited at handler/ha_innodb line 7156 for 1.00 conds the maphore:
increment($results, 'innodb_m_waits', 1);
increment($results, 'innodb_m_wait_time_ms', to_int($row[9]) * 1000);
}
其中innodb_m_waits的值是多少,表⽰有多少线程在等待,⽽innodb_m_wait_time_ms表⽰所有线程等待的时间,默认单位是秒,在脚本中乘以1000,所以监控图中的单位是毫秒.
应对这个问题
InnoDB采取多阶段等待策略.⾸先,尝试对锁进⾏循环等待.如果经过了⼀个预设的循环等待周期(innodb_sync_spin_loops = 30,当前配置⽂件默认为30次)之后还没有成功,就会退到更昂贵更复杂的等待阵列⾥,如果并发量太⼤的话,则导致系统负载突增.
循环等待的成本相对⽐较低,但是需要不停地检查⼀个资源是否被锁定,消耗CPU周期,也就是说,当另外⼀条线程能处理事情时,循环等待也会独占处理器.
循环等待的替换⽅案就是让操作系统做上下⽂切换(等待阵列),每秒钟⼏千次的切换会引发⼤量的系统开销.
解决办法
根据具体的应⽤,调整参数;或者优化应⽤,减少并发.
InnoDB Semaphores Waits
InnoDB Sem Waits
显⽰当前正在等待互斥量的InnoDB线程的数量.
InnoDB Semaphores
显⽰innodb内部的信号活动状态.
包括Mutex spin waits,RW-shared spins,RW-excl spins等各种信号量的数量总和.
Spin Rounds
InnoDB内部预设的互斥量信号数量
Spin Waits
InnoDB内部对锁进⾏循环等待的数量(与innodb_sync_spin_loops参数有关)
Os Wait系统等待
事务退到操作系统的等待阵列的数量
在⾼并发的情况,会发现这个值有尖峰状,不稳定.图像主要显⽰了,不合理的设计情况下,不同的连接类型之间的⾏锁或互斥锁的争⽤.
InnoDB Tables In U
# mysql tables in u 2, locked 2
InnoDB Tables In U变废为宝手工小制作
所有事务⽤到的表的数量
InnoDB Locked Tables
所有事务锁定的表的数量
InnoDB Transactions Active/Locked
该图显⽰了InnoDB事务的状态数量.
Active Transactions
正在执⾏的事务数量
Locked Transactions
锁住的事务数量
Current Transactions
当前的事务数量(包括not started,ACTIVE,...等各种状态)
not started # 事务已经提交到磁盘
ACTIVE # 正在执⾏的事务
Read Views(待更新)
read views open inside InnoDB
InnoDB Transactions
显⽰了InnoDB事务相关的信息
InnoDB Transactions
InnoDB内部的事务总数.由以下数值计算出:
Trx id counter 89F56195 # 当前事务ID,每创建⼀个新事务就会累加
Purge done for trx's n:o < 89F5609C undo n:o < 0 -- InnoDB清除旧版本MVCC时所⽤的事务ID.这个ID之前的⽼版本数据已经清除.
疾病种类该数值就是由当前事务ID减去清除旧数据的事务ID再由⼗六进制转成⼗进制的值.(参考ss_get_mysql_stats.php脚本902⾏)
History List
历史记录的长度.位于InnoDB数据⽂件的撤销空间⾥的未清除事务的数⽬.当⼀个事务执⾏了更新并提交后,这个数字就会累加,当清除进程移除⼀个旧版本数据时,它就会递减.
MyISAM Indexs
显⽰了在MyISAM索引上的读写情况
Key Reads Requests
从键缓存读出索引块的读操作的次数
Key Reads
从磁盘读出索引块的读操作次数
Key Write Requests
向键缓存写⼀个索引块的请求的个数
Key Writes
恢弘志士之气把索引块写⼊磁盘的写操作的次数
MyISAM Key Cache
Key Buffer Size
键缓存⼤⼩
Key Buf Bytes Ud
同Key_blocks_ud变量
键缓存⾥已经被使⽤的缓存块的个数
Key Buf Bytes Unud
同Key_blocks_unud
键缓存⾥尚未被使⽤过的缓存块的个数
MySQL Binary/Relay Logs
Binlog Cache U
保存在⼆进制⽇志缓存⾥的事务的个数
Binlog Cache Disk U
超过binlog_cache_size设置的缓存⼤⼩,使⽤磁盘临时⽂件的事务的个数
Binlog Log Space
⼆进制⽇志的⼤⼩小灯笼怎么画
Relay Log Space
中继⽇志的⼤⼩
如果Binlog Cache Disk U/Binlog Cache U的值较⼤,那么应该尝试增加binlog_cache_size的⼤⼩.但是,也不要期望改善过多,如果写临时⽂件的数量从每秒1个减少到每分钟⼀个,这已经证明优化的⾜够好了.没必要耗费⼤量的内存,来处理binlog_cache_size中的事务.
MySQL Command Counts
命令计数器,显⽰了MySQL(在过去1秒内)执⾏各种命令的次数
Questions
记录了服务器收到的查询和命令的总数.(Com_*变量的总数不⼀定相等.)
Com Select
Com Delete
Com Inrt
Com Update
Com Replace
Com Load
Com Delete Multi
Com Inrt Select
Com Update Multi
Com Replace Select
MySQL Connections
Max Connections 允许同时保持在打开状态的客户连接的最⼤个数
Max Ud Connections 此前曾同时打开处于打开状态的连接的最⼤个数
Aborted Clients 因客户端没有正确地关闭⽽被丢弃的连接的个数
Aborted Connects 试图连接MySQL服务器但没有成功的次数
Threads Connectd 现在正处于打开状态的连接的个数
Connections 试图连接MySQL服务器的尝试次数
MySQL Files and Tables开通大运河
Table Cache
Open Tables 当前处于打开状态的数据表的个数.不包括TEMPORARY
Open Files 当前处于打开状态的⽂件的个数,如果与open_files_limit接近,则应该加⼤open_files_limit的值.
Opened Tables
MySQL服务器已打开的数据表总数(包括显式定义的临时表).如果这个值很⾼,应该慎重考虑,是否加⼤数据表缓存(table_open_cache).
MySQL Handler
Handler_writer 向数据表⾥插⼊⼀个数据⾏的请求的个数
Handler_update 对数据表⾥的⼀个数据⾏进⾏修改的请求的个数
Handler_delete 从数据表删除⼀个数据⾏的请求的个数
Handler_read_first 读取索引中第⼀个索引项的请求的个数
Handler_read_key 根据⼀个索引值⽽读取⼀个数据⾏的请求的个数
Handler_read_next 按索引顺序读取下⼀个数据⾏的请求的个数
Handler_read_prev 按索引逆序读取前⼀个数据⾏的请求的个数
Handler_read_rnd 根据某个数据⾏的位置⽽读取该数据⾏的请求的个数
Handler_read_rnd_next 读取下⼀个数据⾏的请求的个数.如果这个数字很⾼,就说明有很多语句需要通过全表扫描才能完成或有很多查询没有使⽤适当的索引
MySQL Network Traffic
Bytes Send 发送字节数
Bytes Received 收到字节数
MySQL Processlist
State Closing Tables
该线程将已更改的表数据刷新到磁盘,并关闭已使⽤的表。这应该是⼀个快速的操作。如果没有,请确认您没有⼀个完整的磁盘,并且磁盘没有⾮常重的使⽤。
State Copying To Tmp Table
服务器正在复制到内存中的临时表
State End
这发⽣创建视图、删除、插⼊、查询或更新语句之最后,但是在修改ALTER TABLE之前
State Freeing Items
线程执⾏了⼀个命令。在此状态下完成的⼀些项⽬将涉及查询缓存。这个状态通常会被清理⼲净
State Init
这发⽣在ALTER TABLE、DELETE、INSERT、SELECT或UPDATE语句的初始化之前。在这个状态下,服务器所采取的操作包括刷新⼆进制⽇志、InnoDB⽇志和⼀些查询缓存清理操作。
对于最终状态,以下操作可能会发⽣:
删除表中的数据之后删除查询缓存条⽬
将事件写⼊⼆进制⽇志
释放内存缓冲区,包括blob

本文发布于:2023-07-17 13:46:22,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1101421.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   等待   事务   状态
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图