MySQL 性能监控
MySQL本身的监控应该包含重点参数的检查,MySQL状态的检查,除此以外还应该包含自增id的使用情况(注意因为自增id使用满了 不能insert写入从而引发报警哦),及主从健康状态的巡检。

1、重点参数

  1. "innodb_buffer_pool_size""sync_binlog"'binlog_format''innodb_flush_log_at_trx_commit''read_only':
  2. 'log_slave_updates''innodb_io_capacity''query_cache_type''query_cache_size''max_connections''max_connect_errors''server_id'

2、MySQL的状态

每秒的tps、qps,提交了多少事务、回滚了多少事务、打开文件数、打开表数、连接数、innodb buffer使用率,及锁等待等等。

A.查看mysql状态

  1. mysql> show full processlis;
  2. mysql> show global status;
  3. mysql> show engine innodb status\G

①wait事件

  1. Innodb_buffer_pool_wait_free
  2. Innodb_log_waits

②MySQL锁监控

  1. #表锁
  2. Table_locks_waited
  3. Table_locks_immediate
  4. #行锁
  5. Innodb_row_lock_current_waits,当前等待锁的行锁数量
  6. Innodb_row_lock_time,请求行锁总耗时
  7. Innodb_row_lock_time_avg,请求行锁平均耗时
  8. Innodb_row_lock_time_max,请求行锁最久耗时
  9. Innodb_row_lock_waits,行锁发生次数
  10. #还可以定时收集INFORMATION_SCHEMA里面的信息:
  11. INFORMATION_SCHEMA.INNODB_LOCKS;
  12. INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
  13. #临时表/临时文件
  14. Created_tmp_disk_tables/Created_tmp_files
  15. #打开表/文件数
  16. Open_files/Open_table_definitions/Open_tables
  17. #并发连接数
  18. Threads_running /Threads_created/Threads_cached
  19. Aborted_clients
  20. #客户端没有正确关闭连接导致客户端终止而中断的连接数
  21. Aborted_connects

B.Binlog

  1. Binlog_cache_disk_use
  2. 使用临时二进制日志缓冲但超过 binlog_cache_size 值并使用临时文件
  3. Binlog_cache_use
  4. 使用临时二进制日志缓冲的事务数量
  5. Binlog_stmt_cache_disk_use
  6. 当非事务语句使用二进制日志缓存
  7. Binlog_stmt_cache_use
  8. 使用二进制日志缓冲非事务语句数量

C.链接数

  1. Connections
  2. 试图连接到(不管成不成功)mysql服务器的链接数

D.临时表

  1. Created_tmp_disk_tables
  2. 服务器执行语句时,在硬盘上自动创建的临时表的数量,是指在排序时,内存不够用(tmp_table_size小于需要排序的结果集),所以需要创建基于磁盘的临时表进行排序
  3. Created_tmp_files
  4. 服务器执行语句时自动创建的内存中的临时表的数量

E.索引

  1. Handler_commit 内部交语句
  2. Handler_rollback 内部 rollback语句数量
  3. Handler_read_first 索引第一条记录被读的次数,如果高,则它表明服务器正执行大量全索引扫描
  4. Handler_read_key 根据索引读一行的请求数,如果较高,说明查询和表的索引正确
  5. Handler_read_last 查询读索引最后一个索引键请求数
  6. Handler_read_next 按照索引顺序读下一行的请求数
  7. Handler_read_prev 按照索引顺序读前一行的请求数
  8. Handler_read_rnd 根据固定位置读一行的请求数,如果值较高,说明可能使用了大量需要mysql扫整个表的查询或没有正确使用索引
  9. Handler_read_rnd_next 在数据文件中读下一行的请求数,如果你正进行大量的表扫,该值会较高
  10. Open_table_definitions
  11. 被缓存的.frm文件数量
  12. Opened_tables
  13. 已经打开的表的数量,如果较大,table_open_cache值可能太小
  14. Open_tables
  15. 当前打开的表的数量
  16. Queries
  17. 已经发送给服务器的查询个数
  18. Select_full_join
  19. 没有使用索引的联接的数量,如果该值不为0,你应该仔细检查表的所有
  20. Select_scan
  21. 对第一个表进行完全扫的联接的数量
  22. Slow_queries
  23. 查询时间超过long_query_time秒的查询个数
  24. Sort_merge_passes
  25. 排序算法已经执行的合并的数量,如果值较大,增加sort_buffer_size大小

F.线程

  1. Threads_cached 线程缓存内的线程数量
  2. Threads_connected 当前打开的连接数量
  3. Threads_created 创建用来处理连接的线程数
  4. Threads_running 激活的(非睡眠状态)线程数

G.MySQL自增主键的使用情况

  1. mysql> SELECT table_schema,table_name,engine, Auto_increment
  2. FROM information_schema.tables where
  3. INFORMATION_SCHEMA.TABLE_SCHEMA
  4. not in ("INFORMATION_SCHEMA" ,"PERFORMANCE_SCHEMA", "MYSQL", "SYS")

H.存储引擎是否为InnoDB

  1. mysql> SELECT TABLE_SCHEMA,TABLE_NAME,ENGINE FROM
  2. INFORMATION_SCHEMA.TABLES WHERE
  3. ENGINE != 'innodb' AND
  4. TABLE_SCHEMA NOT IN
  5. ("INFORMATION_SCHEMA" ,"PERFORMANCE_SCHEMA", "MYSQL", "SYS");

I.MySQL主从检查

  1. #主从状态
  2. mysql> show slave status\G
  3. #主从是否延迟
  4. Master_Log_File == Relay_Master_Log_File
  5. && Read_Master_Log_Pos == Exec_Master_Log_Pos