MYSQL 数据库的稳定运行指标

通常会关注一下四个与性能和资源利用率相关的指标:查询吞吐量连接情况缓冲池使用情况以及查询执行性能等。
 
数据库吞吐量
   对于数据库而言,最重要的工作就是实现对数据的增、删、改、查。为了衡量数据库服务器当前的吞吐量变化情况
在MySQL内部通过一个名为Questions的计数器当客户端发送一个查询语句后,其值就会+1
可以通过以下MySQL指令查询Questions等服务器状态变量的值:
    show global status like "Questions";
 
    一般还可以从监控读操作和写操作的执行情况进行判断。通过MySQL全局状态中的Com_select可以查询到当前服务器执行查询语句的总次数
相应的,也可以通过Com_insertCom_update以及Com_delete的总量衡量当前服务器写操作的总次数,
    例如,可以通过以下指令查询当前MySQL实例insert语句的执行次数总量:
        show global status like "Com_insert";
 
连接情况
   在MySQL中通过全局设置max_connections限制了当前服务器允许的最大客户端连接数量。一旦可用连接数被用尽,新的客户端连接都会被直接拒绝。
因此当监控MySQL运行状态时,需要时刻关注MySQL服务器的连接情况。用户可以通过以下指令查看当前MySQL服务的max_connections配置:
    show variables like "max_connections";
     MySQL默认的最大链接数为200(这个数值是上述命令查出的结果值)。临时调整最大连接数,可以通过以下指令进行设置:
        set global max_connections = 210;
     如果想永久化设置,则需要通过修改MySQL配置文件my.cnf,添加以下内容:
        max_connections = 210
 
    通过Global Status中的Threads_connected、Aborted_connects、Connection_errors_max_connections以及Threads_running可以查看当前MySQL实例的连接情况。
    例如,通过以下指令可以直接当前MySQL实例的连接数:
        show global status like "Threads_connected";
   当所有可用连接都被占用时,如果一个客户端尝试连接至MySQL,会出现“Too many connections(连接数过多)”错误,
同时Connection_errors_max_connections的值也会增加。为了防止出现此类情况,你应该监控可用连接的数量,
确保其值保持在max_connections限制以内。同时如果Aborted_connects的数量不断增加,说明客户端尝试连接到MySQL都失败了。
此时可以通过Connection_errors_max_connections以及Connection_errors_internal分析连接失败的问题原因。  
    
  • mysql_global_variables_max_connections: 允许的最大连接数;
  • mysql_global_status_threads_connected: 当前开放的连接;
  • mysql_global_status_threads_running:当前开放的连接;
  • mysql_global_status_aborted_connects:当前开放的连接;
  • mysql_global_status_connection_errors_total{error="max_connections"}:由于超出最大连接数导致的错误;
  • mysql_global_status_connection_errors_total{error="internal"}:由于系统内部导致的错误;
监控缓冲池使用情况
 MySQL默认的存储引擎InnoDB使用了一片称为缓冲池的内存区域,用于缓存数据表以及索引的数据。 当缓冲池的资源使用超出限制后,可能会导致数据库性能的下降同时很多查询命令会直接在磁盘中执行,导致磁盘I/O不断攀升。 因此,应该关注MySQL缓冲池的资源使用情况,并且在合理的时间扩大缓冲池的大小可以优化数据库的性能
Innodb_buffer_pool_pages_total反映了当前缓冲池中的内存页的总页数。可以通过以下指令查看:
    show global status like "Innodb_buffer_pool_pages_total";
 
Innodb_buffer_pool_read_requests记录了正常从缓冲池读取数据的请求数量。可以通过以下指令查看:
    show global status like "Innodb_buffer_pool_read_requests";
 
缓冲池无法满足时,MySQL只能从磁盘中读取数据Innodb_buffer_pool_reads即记录了从磁盘读取数据的请求数量
通常来说从内存中读取数据的速度要比从磁盘中读取快很多,因此,如果Innodb_buffer_pool_reads的值开始增加,可能意味着数据库的性能有问题。
可以通过以下命令查看Innodb_buffer_pool_reads的数量:
    show global status like "Innodb_buffer_pool_reads";
 
 
查询性能
   MySQL还提供了一个Slow_queries的计数器,当查询的执行时间超过long_query_time的值后,计数器就会+1,其默认值为10秒,
可以通过以下指令在MySQL中查询当前long_query_time的设置:
    show variables like "long_query_time";
    
     通过以下指令可以查看当前MySQL实例中Slow_queries的数量:
        show global status like "Slow_queries";
 
     通过监控Slow_queries的增长率,可以反映出当前MySQL服务器的性能状态 ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/guo-s/p/14144813.html