外观
MariaDB 监控指标参考
连接指标
Connections
- 描述:尝试连接到MariaDB服务器的连接总数
- 正常范围:根据业务需求而定,通常与
max_connections相关 - 告警阈值:持续高于
max_connections的80% - 监控建议:结合
max_connections和Threads_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_size和max_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:命令行工具,实时查看服务器状态
bashmariadb-status -u root -pmariadb-admin:命令行工具,执行管理操作和查看状态
bashmariadb-admin extended-status -u root -p mariadb-admin processlist -u root -pPerformance 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_trx中trx_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:正常的主从延迟通常是短暂的,与网络延迟和事务大小有关。异常的主从延迟表现为:
- 延迟持续增长,没有下降趋势
- 延迟超过业务可接受的阈值(通常为60秒)
- 从库SQL线程停止
建议结合Slave_SQL_Running和Seconds_behind_master一起监控。
Q:Galera Cluster如何监控同步状态?
A:Galera Cluster使用以下指标监控同步状态:
wsrep_local_state_comment:节点状态,正常应为Syncedwsrep_cluster_status:集群状态,正常应为Primarywsrep_local_recv_queue:接收队列,正常应为0-50wsrep_local_send_queue:发送队列,正常应为0-50wsrep_flow_control_paused:流控暂停时间比例,正常应低于0.1
Q:如何监控MariaDB的磁盘使用情况?
A:可以通过以下方法监控磁盘使用情况:
- 使用系统命令:
df -h、du -sh /var/lib/mysql/* - 通过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; - 监控
Innodb_data_fsyncs和Innodb_os_log_written等指标,分析I/O压力
Q:如何监控MariaDB的内存使用情况?
A:可以通过以下方法监控内存使用情况:
- 使用系统命令:
top -p $(pgrep -f mysqld)、pmap -x $(pgrep -f mysqld) - 监控
innodb_buffer_pool_size、key_buffer_size等配置参数 - 监控
Innodb_buffer_pool_pages_free、Key_blocks_used等状态指标 - 使用Performance Schema(MariaDB 10.0+)查看详细内存使用
Q:哪些监控指标对性能优化最有帮助?
A:建议优先关注以下监控指标:
Slow_queries:识别需要优化的查询Handler_read_rnd_next:识别全表扫描Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests:分析缓冲池命中率Innodb_row_lock_waits:分析锁竞争Threads_running:分析CPU瓶颈wsrep_flow_control_paused(Galera Cluster):分析集群性能
这些指标能帮助DBA快速定位性能瓶颈,进行针对性优化。
