mysql性能监控最佳实践(监控产品及监控指标)

mysql性能监控最佳实践(监控产品及监控指标)

1、监控什么内容

    1、os层面
        空间监控df -h ,防止文件系统空间满造成数据库hang住
        性能cpu监控
            vmstat 
                r队列,这个队列需要小于cpu核数,最大不要超过4倍???
            top load average队列数量,同上???
            top中sys cpu占比小于5%,iowait占比小于5%,user占比小于70%
            top H线程占cpu占比,不要出现70%+的线程
    2、内存
        vmstat中出现swap in out    ,free至少2G以上
    3、io
        iostat -x 中  r/s     w/s 
        svctm<=6ms
        %util<80%
    4、网络监控
        sar监控中,网络带宽不需要达到90%,一般1000Mbit/s 带宽足够使用,除了备份等场景

    5、数据库
        真实负载监控
                | Innodb_rows_deleted | 99493 |
                | Innodb_rows_inserted | 1376624 |
                | Innodb_rows_read | 12895545 |
                | Innodb_rows_updated | 2720746 |

                | Queries | 8932356 |:qps,所有查询语句(i+d+u+s)的数量,如执行一个存储过程,会把存储过程中的执行sql数量也包括。questions是一个存储过程算一个,不管存过程中有多少语句。
                tps:
                显示的tps:
                | Com_commit | 338336 |
                | Com_rollback | 1057 |
                隐式tps:
                | Handler_commit | 12519502 |
                | Handler_rollback | 2114 |

IO相关
物理读相关:

                | Innodb_buffer_pool_read_requests| 66101630 |内存读的总次数
                | Innodb_buffer_pool_reads | 115801 | 数据库物理读的次数
                | Innodb_pages_read | 142404 | 数据库物理读的页数
                | Handler_read_rnd_next | 2112621 |很高表示全表扫描的征兆
                物理写相关:
                | Innodb_buffer_pool_pages_flushed | 232223 |从buffer pool 中刷新页的数量,即写的总页数
                | Innodb_buffer_pool_write_requests | 16157929 |写入的次数
                | Innodb_dblwr_writes | 0 |:double write 写入的次数
                | Innodb_dblwr_pages_written | 0 |:dbwr 写入的页数
                | Innodb_log_writes | 131755 |:日志的写入次数
                关注pending(读不动,写不动---IO有问题)的数量:
                | Innodb_data_pending_reads | 0 |读挂起
                | Innodb_data_pending_writes | 0 |写挂起
                | Innodb_os_log_pending_writes | 0 |日志挂起

内存相关

               | Innodb_buffer_pool_wait_free | 0 |:因为内存短缺,导致物理读不能获
                取到内存,为0 表示内存中总有可用页。
                | Innodb_buffer_pool_pages_total | 65536 |:innodb 内存总量
                | Innodb_buffer_pool_pages_dirty | 0 |:脏页总量,脏页暴增,可能是系统中有异常的dml

4、连接相关

                | Connections | 48 |连接累计值,不管失败或成功,连接总次数。不关注。
                | Threads_created | 44 |线程连接建立的次数
                | Threads_connected| 1 |当前打开的连接数量,正在连接的数量。
                | Connection_errors_max_connections | 0 |因为连接数达到最大而不能连接所
                产生的错误次数。>0 表示连接数超了。    

5、用户空间相关

                | Created_tmp_disk_tables | 0 |:当这个值很大,表示需要增加
                tmp_table_size 和max_heap_table_size 的值(在内存中的临时表)。
                select 子查询join 子查询,需要把两个子查询求出来,再join,子查询
                需要放在内部临时表里,如果内部临时表大小不够用,就会发生磁盘临时表。
                | Sort_merge_passes | 0 |sort 用户空间太小发生磁盘排序的数量。
                | Binlog_cache_disk_use | 0 |:binlog 用户空间太小发生使用磁盘空间的数量。

6、锁相关


                | Innodb_row_lock_waits | 89877 |
                | Innodb_row_lock_time | 37340748 |
                | Table_locks_waited | 0 |产生表锁等待的数量

7、慢查询相关:

| Slow_queries | 508 |:慢查询执行次数
慢查询日志的解读
对慢查询日志进行tail -f式的解读

8、产生的日志量相关:——产生的redo数量

                | Innodb_os_log_written | 1255217664 |redo log 产生的量,字节数
                show master status;隔段时间监控的差值除以时间间隔得到每秒产生binlog 日志量。

9、网络相关

                | Bytes_received | 372184964 |
                | Bytes_sent | 1996745853 |

10、全表扫描

                | Select_full_join | 0 |表关联时,由于表上没有索引而发生的表扫描的次数。
                | Select_scan | 39 |use 数据库或者show status 等时,会扫描小的系统表,做了全表扫描,所以有时候不准,容易产生误导,select 产生全表扫描的次数。
                使用Handler_read_rnd_next 值看全表扫描。
                | Handler_read_rnd_next | 2113042 |如果这个值很高,表示你正在做很多表扫描,应该是没有使用正确或者高效的索引。

2、监控工具

    PT
    ZABBIX
    SHELL脚本

zabbix的安装和配置

3、阈值,趋势
    有些建龙指标有阈值,例如io的svtime
    有些需要看趋势,例如io的tps

你可能感兴趣的:(mysql性能监控最佳实践(监控产品及监控指标))