Skip to content

MariaDB 监控指标参考

连接指标

Connections

  • 描述:尝试连接到MariaDB服务器的连接总数
  • 正常范围:根据业务需求而定,通常与max_connections相关
  • 告警阈值:持续高于max_connections的80%
  • 监控建议:结合max_connectionsThreads_connected一起监控,识别连接风暴
  • 版本差异:所有版本一致

Threads_connected

  • 描述:当前打开的连接数
  • 正常范围:根据业务需求而定,通常低于max_connections的80%
  • 告警阈值:持续高于max_connections的90%或突然增长超过50%
  • 监控建议:监控连接数变化趋势,识别连接泄漏
  • 版本差异:所有版本一致

Threads_running

  • 描述:当前正在运行的线程数
  • 正常范围:通常为CPU核心数的1-2倍
  • 告警阈值:持续高于CPU核心数的4倍或突然增长超过100%
  • 监控建议:结合CPU使用率监控,识别查询风暴
  • 版本差异:所有版本一致

Threads_created

  • 描述:创建的线程总数
  • 正常范围:每秒创建的线程数低于50
  • 告警阈值:每秒创建的线程数持续高于100
  • 监控建议:结合thread_cache_size调整,减少线程创建开销
  • 版本差异:所有版本一致

Aborted_connects

  • 描述:失败的连接尝试次数
  • 正常范围:每秒失败连接数低于10
  • 告警阈值:每秒失败连接数持续高于50
  • 监控建议:检查网络连接、权限配置和密码策略
  • 版本差异:所有版本一致

性能指标

Queries

  • 描述:服务器执行的查询总数(包括Com_*命令)
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:突然下降超过50%或增长超过200%
  • 监控建议:监控查询吞吐量变化,识别业务异常
  • 版本差异:所有版本一致

Questions

  • 描述:客户端发送的查询总数(不包括Com_*命令)
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:突然下降超过50%或增长超过200%
  • 监控建议:与Queries结合,分析查询效率
  • 版本差异:所有版本一致

Slow_queries

  • 描述:慢查询总数
  • 正常范围:慢查询率低于总查询数的0.1%
  • 告警阈值:慢查询率持续高于0.5%或每秒慢查询数超过10
  • 监控建议:结合慢查询日志分析,优化查询语句
  • 版本差异:所有版本一致

Qcache_hits

  • 描述:查询缓存命中次数(MariaDB 10.1+已废弃)
  • 正常范围:查询缓存命中率高于50%
  • 告警阈值:查询缓存命中率低于20%
  • 监控建议:MariaDB 10.1+建议禁用查询缓存
  • 版本差异:MariaDB 10.1+默认禁用,10.3+已移除

Handler_read_rnd_next

  • 描述:全表扫描的次数
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:每秒持续高于10000
  • 监控建议:检查是否缺少索引,优化查询语句
  • 版本差异:所有版本一致

InnoDB 存储引擎指标

Innodb_buffer_pool_reads

  • 描述:从磁盘读取的页数
  • 正常范围:缓冲池命中率高于95%
  • 告警阈值:缓冲池命中率低于90%
  • 监控建议:结合Innodb_buffer_pool_read_requests计算命中率,考虑调整innodb_buffer_pool_size
  • 版本差异:所有版本一致

Innodb_buffer_pool_read_requests

  • 描述:从缓冲池读取的请求次数
  • 正常范围:根据业务需求而定,关注命中率
  • 告警阈值:无直接阈值,结合命中率监控
  • 监控建议:用于计算缓冲池命中率 = 1 - (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests)
  • 版本差异:所有版本一致

Innodb_data_reads

  • 描述:InnoDB数据读取次数
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:突然增长超过200%
  • 监控建议:结合磁盘I/O监控,识别I/O瓶颈
  • 版本差异:所有版本一致

Innodb_data_writes

  • 描述:InnoDB数据写入次数
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:突然增长超过200%
  • 监控建议:结合磁盘I/O监控,识别写入瓶颈
  • 版本差异:所有版本一致

Innodb_data_fsyncs

  • 描述:InnoDB执行的fsync()操作次数
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:每秒fsync次数持续高于1000
  • 监控建议:结合innodb_flush_method调整,优化写入性能
  • 版本差异:所有版本一致

Innodb_log_writes

  • 描述:写入InnoDB日志文件的次数
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:突然增长超过200%
  • 监控建议:结合innodb_log_file_size调整,优化日志写入
  • 版本差异:所有版本一致

Innodb_log_waits

  • 描述:InnoDB等待日志缓冲空间的次数
  • 正常范围:接近0
  • 告警阈值:每秒持续高于10
  • 监控建议:增加innodb_log_buffer_size或调整innodb_flush_log_at_trx_commit
  • 版本差异:所有版本一致

Innodb_row_lock_waits

  • 描述:行锁等待次数
  • 正常范围:每秒行锁等待次数低于10
  • 告警阈值:每秒行锁等待次数持续高于50
  • 监控建议:分析死锁日志,优化事务和查询
  • 版本差异:所有版本一致

Innodb_deadlocks

  • 描述:死锁次数
  • 正常范围:接近0
  • 告警阈值:每秒死锁次数持续高于5
  • 监控建议:分析死锁日志,优化事务隔离级别和查询顺序
  • 版本差异:所有版本一致

复制指标

Slave_running

  • 描述:从库复制状态(1=运行,0=停止)
  • 正常范围:1
  • 告警阈值:0
  • 监控建议:实时监控,出现问题立即处理
  • 版本差异:所有版本一致

Seconds_behind_master

  • 描述:从库落后主库的秒数
  • 正常范围:0-30秒
  • 告警阈值:持续高于60秒
  • 监控建议:监控主从延迟趋势,分析延迟原因
  • 版本差异:所有版本一致
  • 注意事项:Galera Cluster使用其他指标监控同步状态

Slave_open_temp_tables

  • 描述:从库打开的临时表数量
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:持续高于1000
  • 监控建议:检查主库查询,优化需要临时表的查询
  • 版本差异:所有版本一致

Master_Log_File / Relay_Master_Log_File

  • 描述:主库当前日志文件 / 从库正在读取的主库日志文件
  • 正常范围:两个值差距不大
  • 告警阈值:两个值差距超过10个日志文件
  • 监控建议:监控日志文件差距,识别复制延迟
  • 版本差异:所有版本一致

Galera Cluster 指标

wsrep_cluster_size

  • 描述:Galera集群中的节点数量
  • 正常范围:与预期集群大小一致
  • 告警阈值:节点数量减少超过1
  • 监控建议:实时监控集群规模,出现节点离线立即处理
  • 版本差异:Galera Cluster专属指标

wsrep_cluster_status

  • 描述:Galera集群状态(Primary/Non-Primary)
  • 正常范围:Primary
  • 告警阈值:Non-Primary
  • 监控建议:实时监控,集群分裂时立即处理
  • 版本差异:Galera Cluster专属指标

wsrep_connected

  • 描述:当前节点是否连接到集群
  • 正常范围:ON
  • 告警阈值:OFF
  • 监控建议:实时监控节点连接状态
  • 版本差异:Galera Cluster专属指标

wsrep_local_state_comment

  • 描述:当前节点状态(Synced/Donor/Joiner等)
  • 正常范围:Synced
  • 告警阈值:其他状态持续超过60秒
  • 监控建议:监控节点状态变化,识别节点异常
  • 版本差异:Galera Cluster专属指标

wsrep_local_recv_queue

  • 描述:接收队列中的事务数量
  • 正常范围:0-50
  • 告警阈值:持续高于100
  • 监控建议:检查网络连接,优化节点间通信
  • 版本差异:Galera Cluster专属指标

wsrep_local_send_queue

  • 描述:发送队列中的事务数量
  • 正常范围:0-50
  • 告警阈值:持续高于100
  • 监控建议:检查网络连接,优化节点性能
  • 版本差异:Galera Cluster专属指标

wsrep_flow_control_paused

  • 描述:流控暂停的时间比例
  • 正常范围:低于0.1
  • 告警阈值:持续高于0.5
  • 监控建议:分析流控原因,优化集群性能
  • 版本差异:Galera Cluster专属指标

wsrep_last_committed

  • 描述:最后提交的事务ID
  • 正常范围:持续增长
  • 告警阈值:停止增长超过60秒
  • 监控建议:监控事务提交状态,识别集群冻结
  • 版本差异:Galera Cluster专属指标

内存与缓存指标

Innodb_buffer_pool_pages_free

  • 描述:InnoDB缓冲池中的空闲页数
  • 正常范围:缓冲池空闲率高于5%
  • 告警阈值:缓冲池空闲率低于1%
  • 监控建议:考虑调整innodb_buffer_pool_size,增加内存或优化查询
  • 版本差异:所有版本一致

Innodb_buffer_pool_pages_dirty

  • 描述:InnoDB缓冲池中的脏页数
  • 正常范围:脏页比例低于10%
  • 告警阈值:脏页比例持续高于25%
  • 监控建议:结合innodb_max_dirty_pages_pct调整,优化 checkpoint 策略
  • 版本差异:所有版本一致

Key_blocks_used

  • 描述:MyISAM索引缓冲区使用的块数
  • 正常范围:根据key_buffer_size调整
  • 告警阈值:使用率持续高于90%
  • 监控建议:考虑调整key_buffer_size
  • 版本差异:所有版本一致

Key_reads / Key_read_requests

  • 描述:从磁盘读取索引块的次数 / 从缓存读取索引块的请求次数
  • 正常范围:索引缓存命中率高于95%
  • 告警阈值:索引缓存命中率低于90%
  • 监控建议:考虑调整key_buffer_size
  • 版本差异:所有版本一致

磁盘I/O指标

Innodb_data_read

  • 描述:InnoDB读取的数据总量(字节)
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:磁盘读取速率持续超过磁盘最大吞吐量的80%
  • 监控建议:监控磁盘I/O使用率,考虑优化查询或升级存储设备
  • 版本差异:所有版本一致

Innodb_data_written

  • 描述:InnoDB写入的数据总量(字节)
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:磁盘写入速率持续超过磁盘最大吞吐量的80%
  • 监控建议:监控磁盘I/O使用率,考虑优化写入或升级存储设备
  • 版本差异:所有版本一致

Innodb_os_log_written

  • 描述:写入InnoDB日志文件的数据总量(字节)
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:日志写入速率突然增长超过200%
  • 监控建议:分析写入高峰原因,优化事务或调整日志配置
  • 版本差异:所有版本一致

Created_tmp_disk_tables

  • 描述:创建的临时表数量(磁盘)
  • 正常范围:磁盘临时表占比低于总临时表的10%
  • 告警阈值:磁盘临时表占比持续高于20%
  • 监控建议:优化查询,增加tmp_table_sizemax_heap_table_size
  • 版本差异:所有版本一致

锁与事务指标

Innodb_row_lock_time_avg

  • 描述:平均行锁等待时间(毫秒)
  • 正常范围:低于100毫秒
  • 告警阈值:持续高于500毫秒
  • 监控建议:分析长锁等待的事务,优化查询和事务设计
  • 版本差异:所有版本一致

Innodb_row_lock_time_max

  • 描述:最大行锁等待时间(毫秒)
  • 正常范围:低于1000毫秒
  • 告警阈值:持续高于5000毫秒
  • 监控建议:识别异常长的锁等待,及时处理
  • 版本差异:所有版本一致

Com_commit

  • 描述:提交的事务数量
  • 正常范围:根据业务需求而定,关注变化趋势
  • 告警阈值:突然下降超过50%或增长超过200%
  • 监控建议:监控事务提交频率,识别业务异常
  • 版本差异:所有版本一致

Com_rollback

  • 描述:回滚的事务数量
  • 正常范围:回滚率低于总事务数的1%
  • 告警阈值:回滚率持续高于5%
  • 监控建议:分析回滚原因,检查应用逻辑和死锁
  • 版本差异:所有版本一致

监控指标获取方法

使用SHOW GLOBAL STATUS命令

sql
-- 获取所有状态指标
SHOW GLOBAL STATUS;

-- 获取特定指标
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';

-- 获取复制相关指标
SHOW SLAVE STATUS\G;

-- 获取Galera Cluster指标
SHOW GLOBAL STATUS LIKE 'wsrep_%';

使用information_schema表

sql
-- 查询InnoDB缓冲池状态
SELECT * FROM information_schema.INNODB_BUFFER_POOL_STATS\G;

-- 查询InnoDB锁状态
SELECT * FROM information_schema.INNODB_LOCKS\G;
SELECT * FROM information_schema.INNODB_LOCK_WAITS\G;

-- 查询InnoDB事务状态
SELECT * FROM information_schema.INNODB_TRX\G;

使用MariaDB监控工具

  • mariadb-status:命令行工具,实时查看服务器状态

    bash
    mariadb-status -u root -p
  • mariadb-admin:命令行工具,执行管理操作和查看状态

    bash
    mariadb-admin extended-status -u root -p
    mariadb-admin processlist -u root -p
  • Performance Schema:更详细的性能监控(MariaDB 10.0+)

    sql
    -- 启用Performance Schema
    UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%events%';
    
    -- 查询事件信息
    SELECT * FROM performance_schema.events_statements_summary_by_digest LIMIT 10;\G

监控指标组合分析

1. 连接与线程分析

  • Threads_connected + max_connections:分析连接使用率
  • Threads_running + CPU使用率:分析CPU瓶颈
  • Threads_created + thread_cache_size:优化线程缓存

2. 内存与缓存分析

  • Innodb_buffer_pool_reads + Innodb_buffer_pool_read_requests:计算缓冲池命中率
  • Innodb_buffer_pool_pages_free + Innodb_buffer_pool_size:分析缓冲池使用率
  • Key_reads + Key_read_requests:计算索引缓存命中率

3. I/O性能分析

  • Innodb_data_read + Innodb_data_written:分析磁盘I/O吞吐量
  • Innodb_log_writes + Innodb_log_waits:分析日志写入性能
  • Handler_read_rnd_next:识别全表扫描

4. 锁与事务分析

  • Innodb_row_lock_waits + Innodb_deadlocks:分析锁竞争情况
  • Innodb_row_lock_time_avg + Innodb_row_lock_time_max:分析锁等待时间
  • Com_commit + Com_rollback:分析事务成功率

5. 复制性能分析

  • Slave_running + Seconds_behind_master:监控主从复制状态
  • Master_Log_File + Relay_Master_Log_File:分析复制延迟

6. Galera Cluster分析

  • wsrep_cluster_size + wsrep_cluster_status:监控集群健康状态
  • wsrep_local_recv_queue + wsrep_local_send_queue:分析集群通信
  • wsrep_flow_control_paused:分析集群流控情况

监控告警策略建议

1. 紧急告警(P0)

  • 复制停止(Slave_running = 0)
  • Galera集群分裂(wsrep_cluster_status = Non-Primary)
  • 节点离线(wsrep_connected = OFF)
  • 数据库无法连接(Connections 突然下降为0)

2. 高优先级告警(P1)

  • 主从延迟超过60秒(Seconds_behind_master > 60)
  • 连接数接近最大值(Threads_connected > max_connections * 0.9)
  • 慢查询率超过0.5%(Slow_queries / Queries > 0.005)
  • 缓冲池命中率低于90%(Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests > 0.1)
  • 死锁次数超过5次/秒(Innodb_deadlocks > 5)

3. 中优先级告警(P2)

  • CPU使用率持续超过80%
  • 磁盘使用率持续超过85%
  • 内存使用率持续超过90%
  • 长事务超过300秒(Innodb_trxtrx_started 超过300秒)
  • 行锁等待次数超过50次/秒(Innodb_row_lock_waits > 50)

4. 低优先级告警(P3)

  • 临时表使用过多(Created_tmp_disk_tables > 1000)
  • 索引缓存命中率低于90%(Key_reads / Key_read_requests > 0.1)
  • 日志写入量突然增长(Innodb_os_log_written 增长超过200%)

常见问题(FAQ)

Q:如何计算InnoDB缓冲池命中率?

A:缓冲池命中率 = 1 - (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) × 100%

sql
SELECT 
  (1 - (V2.VALUE / V1.VALUE)) * 100 AS buffer_pool_hit_rate
FROM 
  (SELECT VALUE FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_buffer_pool_read_requests') V1,
  (SELECT VALUE FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_buffer_pool_reads') V2;

Q:如何监控长事务?

A:可以通过information_schema.INNODB_TRX表监控长事务:

sql
SELECT 
  trx_id, 
  trx_started, 
  trx_state, 
  trx_rows_locked, 
  trx_rows_modified, 
  NOW() - trx_started AS trx_duration,
  t.processlist_id, 
  t.processlist_user, 
  t.processlist_host, 
  t.processlist_info
FROM 
  information_schema.INNODB_TRX t
WHERE 
  NOW() - trx_started > INTERVAL 60 SECOND
ORDER BY 
  trx_duration DESC;

Q:如何监控慢查询?

A:除了监控Slow_queries指标外,还可以启用慢查询日志:

sql
-- 启用慢查询日志
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 0.5;
SET GLOBAL log_queries_not_using_indexes = ON;

-- 查看慢查询日志位置
SHOW VARIABLES LIKE 'slow_query_log_file';

Q:如何区分正常的主从延迟和异常的主从延迟?

A:正常的主从延迟通常是短暂的,与网络延迟和事务大小有关。异常的主从延迟表现为:

  1. 延迟持续增长,没有下降趋势
  2. 延迟超过业务可接受的阈值(通常为60秒)
  3. 从库SQL线程停止

建议结合Slave_SQL_RunningSeconds_behind_master一起监控。

Q:Galera Cluster如何监控同步状态?

A:Galera Cluster使用以下指标监控同步状态:

  1. wsrep_local_state_comment:节点状态,正常应为Synced
  2. wsrep_cluster_status:集群状态,正常应为Primary
  3. wsrep_local_recv_queue:接收队列,正常应为0-50
  4. wsrep_local_send_queue:发送队列,正常应为0-50
  5. wsrep_flow_control_paused:流控暂停时间比例,正常应低于0.1

Q:如何监控MariaDB的磁盘使用情况?

A:可以通过以下方法监控磁盘使用情况:

  1. 使用系统命令:df -hdu -sh /var/lib/mysql/*
  2. 通过information_schema查询表空间大小:
    sql
    SELECT 
      table_schema AS database_name,
      SUM(data_length + index_length) / 1024 / 1024 AS size_mb,
      SUM(data_free) / 1024 / 1024 AS free_mb
    FROM 
      information_schema.TABLES
    GROUP BY 
      table_schema;
  3. 监控Innodb_data_fsyncsInnodb_os_log_written等指标,分析I/O压力

Q:如何监控MariaDB的内存使用情况?

A:可以通过以下方法监控内存使用情况:

  1. 使用系统命令:top -p $(pgrep -f mysqld)pmap -x $(pgrep -f mysqld)
  2. 监控innodb_buffer_pool_sizekey_buffer_size等配置参数
  3. 监控Innodb_buffer_pool_pages_freeKey_blocks_used等状态指标
  4. 使用Performance Schema(MariaDB 10.0+)查看详细内存使用

Q:哪些监控指标对性能优化最有帮助?

A:建议优先关注以下监控指标:

  1. Slow_queries:识别需要优化的查询
  2. Handler_read_rnd_next:识别全表扫描
  3. Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests:分析缓冲池命中率
  4. Innodb_row_lock_waits:分析锁竞争
  5. Threads_running:分析CPU瓶颈
  6. wsrep_flow_control_paused(Galera Cluster):分析集群性能

这些指标能帮助DBA快速定位性能瓶颈,进行针对性优化。