RDS控制台之MySQL系统资源监控

   RDS控制台提供了多种系统资源监控项,本文介绍MySQL实例各个性能指标的意义及计算方法,希望用户能更清楚如何使用RDS对实例进行性能监控。绝大多数MySQL性能指标可以通过以下两种方式获取:

   (1)mysqladmin

   使用mysqladmin extended-status命令获得的MySQL的性能指标,默认为累计值。如果想了解当前状态,需要进行差值计算;加上参数 -relative(-r),就可以看到各个指标的差值,配合参数-sleep(-i)就可以指定刷新的频率。

   1

   2

   (2)Show global status

   可以列出MySQL服务器运行各种状态值,累计值。同样的,如果想了解当前状态,需要进行差值计算。

   3

   mysqladmin extended-status命令及show global status得到的指标项特别多。实际应用中,重点关注以下性能指标:

   4

   1. 磁盘空间:

   当前实例磁盘空间使用量。磁盘空间中主要包括了:数据文件、日志文件、其他文件(系统文件和临时文件)。

   2. IOPS:

   数据从磁盘读取到内存,或者数据从内存写到磁盘都需要消耗IO。IOPS即为每秒磁盘IO次数。

   3. CPU利用率:

   在RDS中,各实例之间相互独立、资源隔离,相互之间不存在CPU的抢占问题,但同一实例中的不同数据库之间是资源共享的。获取mysqld的进程ID后,通过top或ps命令即可查看实例的CPU利用率。

   4. 连接数:

   连接数是指用户能够创建多少个连接,也就是MySQL show processlist命令输出结果中运行着的线程个数。

   当前总连接数: show processlist结果中的总线程个数

   当前活跃连接数:show processlist结果中的活跃线程数(Command列状态为sleep的不计入在内)

   更详细的说明,请参考:RDS最佳实践(一)-如何选择RDS

   5. 网络流量:

   Bytes_received/s:平均每秒的输入流量,单位byte/s

   Bytes_sent/s:平均每秒的输出流量,单位byte/s

   6. QPS/TPS:

   TPS: 平均每秒事务数

   QPS:平均每秒SQL语句执行次数

   TPS= Com_insert/s + Com_update/s + Com_delete/s

   QPS=Com_select/s + Com_insert/s + Com_update/s + Com_delete/s

   7. Innodb缓冲池:

   缓冲池(innodb buffer pool)简单来说就是一块内存区域。缓冲池中缓存的数据页类型有:索引页、数据页、undo页、插入缓冲、自适应哈希索引、InnoDB存储的锁信息、数据字典信息等。不能简单认为,缓冲池只是缓存索引页和数据页,它们只是占缓冲池很大的一部分而已。

   在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,下一次再读相同的页时,首先判断该页是否在缓冲池中。若在,称该页在缓冲池中被命中,直接读取该页。否则,读取磁盘中的页。

   innodb_buffer_pool_reads: 平均每秒从物理磁盘读取页的次数

   innodb_buffer_pool_read_requests: 平均每秒从innodb缓冲池的读次数

   innodb_buffer_pool_write_requests: 平均每秒向innodb缓冲池的写次数

   innodb_buffer_pool_pages_dirty: 平均每秒innodb缓存池中脏页的数目

   innodb_buffer_pool_pages_flushed: 平均每秒innodb缓存池中刷新页请求的数目

   缓冲池的读命中率

   innodb_buffer_read_hit_ratio = ( 1 – innodb_buffer_pool_reads/innodb_buffer_pool_read_requests) * 100

   缓冲池的利用率

   innodb_buffer_usage = ( 1 – innodb_buffer_pool_pages_free / innodb_buffer_pool_pages_total) * 100

   缓冲池的脏块的百分率

   innodb_buffer_pool_pages_dirty / innodb_buffer_pool_pages_total

   8. Innodb读写量:

   平均每秒读取的数据量:innodb_data_read

   平均每秒写入的数据量:innodb_data_written

   9. Innodb读写次数:

   平均每秒Innodb从文件中读取的次数:innodb_data_reads

   平均每秒Innodb从文件中写入的次数:innodb_data_writes

   10. Innodb日志:

   平均每秒向日志文件的物理写次数:innodb_log_writes

   平均每秒日志写请求次数:innodb_log_write_requests

   平均每秒向日志文件完成fsync()写数量:innodb_os_log_fsyncs

   11. 临时表:

   Created_tmp_disk_tables:MySQL执行语句时在磁盘上自动创建的临时表的数量

   在某些情况下,MySQL服务器会自动创建内部临时表。用explain查看select语句的执行计划,如果extra列显示“using temporary”,即使用了内部临时表。一般情况下,MySQL会先创建内存临时表,内存临时表超过配置指定的值后,MySQL会将内存临时表导出到磁盘临时表。

   使用临时表一般都意味着性能比较低,特别是使用磁盘临时表,性能更慢,因此我们在实际应用中应该尽量避免临时表的使用。常见的方法有:

   1)创建索引:在ORDER BY或者GROUP BY的列上创建索引;

   2)分拆很长的列:一般情况下,TEXT、BLOB,大于512字节的字符串,基本上都是为了显示信息,而不会用于查询条件, 因此表设计的时候,应该将这些列独立到另外一张表。

   如果表的设计已经确定,修改比较困难,那么也可以通过优化SQL语句来减少临时表的大小,以提升SQL执行效率。

   12. MyISAM Key Buffer

   为了最小化磁盘I/O,MyISAM将最频繁访问的索引块(Index block)都放在内存中,这样的内存缓冲区我们称之为Key Cache,它的大小可以通过参数key_buffer_size来控制。在MyISAM的索引文件中,连续的单元组成一个Block,Index block的大小等于该BTree索引节点的大小。Key Cache就是以Block为单位的。

   当MySQL请求(读或写)MyISAM索引文件中某个Index Block时,首先会看Key Cache队列中是否已经缓存了对应block。

   如果有,就直接在Key Cache队列中进行读写了,不再需要请求磁盘。如果是写请求,那么Key Cache中的对应Block就会被标记为Dirty(和磁盘不一致)。在MyISAM在Key Cache成功请求(读写)某个Block后,会将该Block放到Key Cache队列的头部。

   如果Key Cache中没有待请求(读或写)的Block,MyISAM会向磁盘请求对应的Block,并将其放到Key Cache的队列头部。队列如果满了,会将队列尾部的Block删除,该Block如果是Dirty的,会将其Flush到磁盘上。我们看到MyISAM维护了一个LRU(Least Recently Used)的Key Cache队列。队列中的Dirty Block会在Block被踢出队列时Flush到磁盘上。

   MyISAM平均每秒key buffer利用率

   Key_usage_ratio =Key_blocks_used/(Key_blocks_used+Key_blocks_unused)*100

   MyISAM平均每秒key buffer读命中率

   Key_read_hit_ratio=(1-Key_reads/Key_read_requests)*100

   MyISAM平均每秒key buffer写命中率

   Key_write_hit_ratio =(1-Key_writes/Key_write_requests)*100

   13. MyISAM读写次数

   key_read_requests: MyISAM平均每秒钟从缓冲池中的读取次数

   Key_write_requests: MyISAM平均每秒钟从缓冲池中的写入次数

   key_reads : MyISAM平均每秒钟从硬盘上读取的次数

   key_writes : MyISAM平均每秒钟从硬盘上写入的次数

   14. COMDML

   Com_select/s:平均每秒select语句执行次数

   Com_insert/s:平均每秒insert语句执行次数

   Com_update/s:平均每秒update语句执行次数

   Com_delete/s:平均每秒delete语句执行次数

   15. ROWDML

   innodb_rows_deleted: 平均每秒从innodb表删除的行数

   innodb_rows_inserted: 平均每秒从innodb表插入的行数

   innodb_rows_read: 平均每秒从innodb表读取的行数

   innodb_rows_updated: 平均每秒从innodb表更新的行数

觉得文章有用?立即: 和朋友一起 共学习 共进步!

猜您喜欢

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>