Skip to content

MariaDB 核心监控指标清单

监控指标概述

MariaDB 监控指标是评估数据库健康状态、性能和可靠性的关键依据。通过监控这些指标,可以及时发现数据库问题,预防故障发生,确保数据库服务的稳定运行。

监控指标分类

指标类型监控内容主要指标
性能指标数据库响应速度和处理能力查询响应时间、吞吐量、连接数、线程状态
状态指标数据库运行状态服务状态、复制状态、事务状态、锁状态
资源使用指标系统资源消耗CPU、内存、磁盘 I/O、网络 I/O
存储指标存储使用情况数据文件大小、表空间使用率、碎片率
安全指标安全相关指标错误连接尝试、权限变更、审计日志
特有指标MariaDB 特有功能指标Galera Cluster 状态、MaxScale 状态、ColumnStore 状态

性能指标

1. 查询性能指标

指标名称指标描述监控命令/变量告警阈值优化建议
Queries per Second (QPS)每秒处理的查询数量SHOW GLOBAL STATUS LIKE 'Queries'根据业务需求设置优化慢查询、增加缓存、扩容硬件
Transactions per Second (TPS)每秒处理的事务数量SHOW GLOBAL STATUS LIKE 'Com_commit' + SHOW GLOBAL STATUS LIKE 'Com_rollback'根据业务需求设置优化事务设计、减少锁冲突、调整事务隔离级别
慢查询数量超过慢查询阈值的查询数量SHOW GLOBAL STATUS LIKE 'Slow_queries'> 10 个/分钟优化慢查询、调整 long_query_time 阈值
查询响应时间查询的平均响应时间监控工具(如 Prometheus + Grafana)> 500ms优化 SQL、添加索引、调整缓存
连接使用率当前连接数与最大连接数的比例SHOW GLOBAL STATUS LIKE 'Threads_connected' / SHOW VARIABLES LIKE 'max_connections'> 80%增加 max_connections、优化连接池、减少连接占用时间

2. 线程状态指标

指标名称指标描述监控命令/变量告警阈值优化建议
活跃线程数当前活跃的线程数量SHOW GLOBAL STATUS LIKE 'Threads_running'> CPU 核心数 * 2优化查询、增加线程池大小、调整 innodb_thread_concurrency
连接线程数当前连接的线程数量SHOW GLOBAL STATUS LIKE 'Threads_connected'> max_connections * 0.8增加 max_connections、优化连接池
缓存线程数缓存的线程数量SHOW GLOBAL STATUS LIKE 'Threads_cached'< 5 或 > max_connections * 0.2调整 thread_cache_size
创建线程数每秒创建的线程数量SHOW GLOBAL STATUS LIKE 'Threads_created'> 10 个/秒增加 thread_cache_size

3. 缓存性能指标

指标名称指标描述监控命令/变量告警阈值优化建议
InnoDB 缓冲池命中率InnoDB 缓冲池的命中率(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100< 95%增加 innodb_buffer_pool_size
查询缓存命中率查询缓存的命中率(Qcache_hits / (Qcache_hits + Qcache_inserts + Qcache_not_cached)) * 100< 30%调整 query_cache_size、query_cache_type
表缓存命中率表缓存的命中率(Open_tables / (Open_tables + Opened_tables)) * 100< 80%增加 table_open_cache、table_definition_cache
键缓存命中率MyISAM 键缓存的命中率(Key_read_requests - Key_reads) / Key_read_requests * 100< 95%增加 key_buffer_size

状态指标

1. 服务状态指标

指标名称指标描述监控命令/变量告警阈值优化建议
数据库运行状态数据库服务是否正常运行systemctl status mariadbmysqladmin ping服务停止启动服务、检查错误日志、修复故障
正常运行时间数据库服务的正常运行时间SHOW GLOBAL STATUS LIKE 'Uptime'< 3600 秒(频繁重启)检查错误日志、修复根本原因
连接错误数连接数据库失败的次数SHOW GLOBAL STATUS LIKE 'Aborted_connects'> 10 个/分钟检查连接配置、网络状态、权限设置
拒绝连接数由于连接数限制拒绝的连接数SHOW GLOBAL STATUS LIKE 'Connections' - SHOW GLOBAL STATUS LIKE 'Max_used_connections'> 0增加 max_connections、优化连接池

2. 复制状态指标

指标名称指标描述监控命令/变量告警阈值优化建议
复制状态从库复制是否正常运行SHOW SLAVE STATUS\G 中的 Slave_IO_RunningSlave_SQL_Running任一为 No检查复制配置、网络连接、主从数据一致性
主从延迟从库与主库的延迟时间(秒)SHOW SLAVE STATUS\G 中的 Seconds_Behind_Master> 300 秒优化主库性能、调整复制参数、增加从库硬件资源
复制队列大小从库 Relay Log 队列大小SHOW SLAVE STATUS\G 中的 Relay_Log_Space> 1GB优化从库性能、增加从库硬件资源
GTID 一致性主从 GTID 是否一致SHOW SLAVE STATUS\G 中的 Executed_Gtid_Set 与主库的 SHOW MASTER STATUS不一致修复 GTID 一致性、重新初始化从库

3. 事务状态指标

指标名称指标描述监控命令/变量告警阈值优化建议
活跃事务数当前活跃的事务数量SHOW ENGINE INNODB STATUS 中的 TRANSACTIONS 部分> 100优化长事务、调整事务隔离级别、增加资源
锁定事务数当前锁定的事务数量SHOW ENGINE INNODB STATUS 中的 LOCK WAIT 部分> 10优化锁冲突、调整事务隔离级别、减少事务持有锁的时间
回滚事务比例回滚事务占总事务的比例Com_rollback / (Com_commit + Com_rollback) * 100> 10%检查应用逻辑、优化事务设计、增加错误处理
死锁数量发生死锁的数量SHOW GLOBAL STATUS LIKE 'Innodb_deadlocks'> 1 个/小时优化事务顺序、减少锁持有时间、调整 innodb_deadlock_detect

4. 锁状态指标

指标名称指标描述监控命令/变量告警阈值优化建议
表锁等待数等待表锁的次数SHOW GLOBAL STATUS LIKE 'Table_locks_waited'> 10 个/分钟优化 SQL、减少锁持有时间、使用 InnoDB 引擎
行锁等待时间行锁等待的总时间SHOW GLOBAL STATUS LIKE 'Innodb_row_lock_time'> 1000 秒/小时优化索引、减少锁冲突、调整事务隔离级别
行锁等待数等待行锁的次数SHOW GLOBAL STATUS LIKE 'Innodb_row_lock_waits'> 100 个/小时优化索引、减少锁冲突、调整事务隔离级别
锁等待比例锁等待占总请求的比例(Table_locks_waited + Innodb_row_lock_waits) / Queries * 100> 1%优化 SQL、添加索引、调整事务设计

资源使用指标

1. CPU 使用率指标

指标名称指标描述监控命令/变量告警阈值优化建议
数据库进程 CPU 使用率MariaDB 进程的 CPU 使用率监控工具(如 top、htop、Prometheus)> 80%优化查询、增加 CPU 核心数、调整线程池配置
系统 CPU 使用率整个系统的 CPU 使用率监控工具(如 top、htop、Prometheus)> 90%优化查询、关闭不必要的进程、扩容硬件
CPU 负载系统 CPU 负载uptime 或监控工具> CPU 核心数 * 1.5优化查询、增加 CPU 核心数、调整线程池配置

2. 内存使用率指标

指标名称指标描述监控命令/变量告警阈值优化建议
数据库进程内存使用率MariaDB 进程的内存使用率监控工具(如 top、htop、Prometheus)> 系统内存的 80%调整内存相关参数、增加系统内存
InnoDB 缓冲池使用率InnoDB 缓冲池的使用率SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_data' / SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_total' * 100> 90%增加 innodb_buffer_pool_size、优化查询
系统内存使用率整个系统的内存使用率监控工具(如 free、Prometheus)> 90%调整内存相关参数、增加系统内存、关闭不必要的服务
Swap 使用率系统 Swap 分区的使用率监控工具(如 free、Prometheus)> 20%增加系统内存、调整内存相关参数、关闭 Swap

3. 磁盘 I/O 指标

指标名称指标描述监控命令/变量告警阈值优化建议
磁盘使用率数据目录所在磁盘的使用率df -h 或监控工具> 80%清理数据、扩容磁盘、归档历史数据
磁盘 I/O 使用率磁盘 I/O 使用率监控工具(如 iostat、Prometheus)> 80%优化查询、调整 innodb_io_capacity、使用 SSD 存储
读写 IOPS每秒的 I/O 操作数监控工具(如 iostat、Prometheus)根据磁盘性能设置优化查询、调整 innodb_io_capacity、使用 SSD 存储
平均 I/O 等待时间平均 I/O 等待时间监控工具(如 iostat、Prometheus)> 10ms优化查询、调整 innodb_io_capacity、使用 SSD 存储
InnoDB I/O pendingInnoDB 等待 I/O 的请求数SHOW GLOBAL STATUS LIKE 'Innodb_data_pending_reads' + SHOW GLOBAL STATUS LIKE 'Innodb_data_pending_writes'> 100优化查询、调整 innodb_io_capacity、使用 SSD 存储

4. 网络 I/O 指标

指标名称指标描述监控命令/变量告警阈值优化建议
网络发送流量数据库发送的网络流量监控工具(如 iftop、Prometheus)根据网络带宽设置优化查询、减少网络传输、增加网络带宽
网络接收流量数据库接收的网络流量监控工具(如 iftop、Prometheus)根据网络带宽设置优化查询、减少网络传输、增加网络带宽
网络连接数数据库的网络连接数`netstat -angrep 3306wc -l`

存储指标

1. 数据文件指标

指标名称指标描述监控命令/变量告警阈值优化建议
数据文件总大小数据库数据文件的总大小du -sh /var/lib/mysqlSHOW TABLE STATUS根据磁盘容量设置清理数据、归档历史数据、扩容磁盘
表空间使用率表空间的使用率SHOW TABLE STATUS 中的 Data_length + Index_length> 100GB分区表、归档历史数据、清理碎片
日志文件大小日志文件(Redo Log、Binlog)的大小ls -la /var/lib/mysql/*.log根据磁盘容量设置调整日志文件大小、启用日志自动清理
临时表空间大小临时表空间的大小SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables'ls -la /var/lib/mysql/ibtmp*> 10GB优化查询、增加 tmp_table_size、max_heap_table_size

2. 表和索引指标

指标名称指标描述监控命令/变量告警阈值优化建议
表数量数据库中的表数量SHOW TABLESSELECT COUNT(*) FROM information_schema.tables WHERE table_schema NOT IN ('mysql', 'information_schema', 'performance_schema')根据数据库设计设置合并表、分区表、归档历史表
索引使用率索引的使用率监控工具(如 pt-index-usage)< 50%删除不必要的索引、优化查询
全表扫描次数全表扫描的次数SHOW GLOBAL STATUS LIKE 'Select_scan'> 100 个/分钟优化查询、添加索引、调整查询条件
表碎片率表的碎片率SHOW TABLE STATUS 中的 Data_free / (Data_length + Index_length)> 20%优化表(OPTIMIZE TABLE)、定期重建表

安全指标

1. 访问控制指标

指标名称指标描述监控命令/变量告警阈值优化建议
失败登录尝试次数登录失败的次数SHOW GLOBAL STATUS LIKE 'Access_denied_errors'> 10 个/分钟检查密码策略、启用连接控制插件、监控恶意登录
用户权限变更次数用户权限变更的次数审计日志> 0(非计划变更)检查权限变更原因、启用审计日志、限制权限变更权限
匿名用户存在是否存在匿名用户SELECT User, Host FROM mysql.user WHERE User=''存在匿名用户删除匿名用户、加强权限管理
空密码用户存在是否存在空密码用户SELECT User, Host FROM mysql.user WHERE authentication_string=''存在空密码用户设置强密码、加强密码策略

2. 审计日志指标

指标名称指标描述监控命令/变量告警阈值优化建议
审计日志启用状态审计日志是否启用SHOW VARIABLES LIKE 'server_audit_logging'未启用启用审计日志、配置审计规则
敏感操作次数敏感操作(如 DROP、ALTER)的次数审计日志> 0(非计划操作)检查敏感操作原因、启用操作审批流程、限制敏感操作权限
审计日志大小审计日志的大小ls -la /var/lib/mysql/server_audit.log> 10GB启用日志轮转、调整审计日志保留策略

MariaDB 特有指标

1. Galera Cluster 指标

指标名称指标描述监控命令/变量告警阈值优化建议
集群状态Galera 集群是否正常运行SHOW STATUS LIKE 'wsrep_cluster_status'非 Primary检查集群配置、网络连接、节点状态
集群节点数量Galera 集群中的节点数量SHOW STATUS LIKE 'wsrep_cluster_size'< 3 或与预期不符检查节点状态、添加或移除节点
节点状态节点在集群中的状态SHOW STATUS LIKE 'wsrep_local_state_comment'非 Synced检查节点日志、网络连接、数据一致性
复制延迟节点间的复制延迟SHOW STATUS LIKE 'wsrep_local_recv_queue'> 10优化网络、调整 wsrep_slave_threads、增加节点资源
冲突解决次数集群中冲突解决的次数SHOW STATUS LIKE 'wsrep_local_cert_failures'> 10 个/分钟优化应用设计、调整冲突检测级别、使用乐观锁

2. ColumnStore 指标

指标名称指标描述监控命令/变量告警阈值优化建议
ColumnStore 状态ColumnStore 服务是否正常运行mcsadmin getSystemStatus服务异常检查 ColumnStore 日志、重启服务、修复故障
查询执行时间ColumnStore 查询的执行时间监控工具或 SHOW PROFILE> 30 秒优化查询、调整 ColumnStore 配置、增加资源
数据加载状态数据加载作业的状态mcsadmin listLoads加载失败检查加载日志、修复数据格式、调整加载参数
存储节点使用率存储节点的磁盘使用率df -hmcsadmin getSystemStatus> 80%扩容存储节点、归档历史数据

监控指标收集方法

1. 使用 MariaDB 内置命令

bash
# 查看全局状态变量
SHOW GLOBAL STATUS;

# 查看特定状态变量
SHOW GLOBAL STATUS LIKE 'Queries';
SHOW GLOBAL STATUS LIKE 'Threads_connected';

# 查看 InnoDB 状态
SHOW ENGINE INNODB STATUS\G;

# 查看复制状态
SHOW SLAVE STATUS\G;

# 查看变量设置
SHOW VARIABLES LIKE 'max_connections';

# 查看表状态
SHOW TABLE STATUS LIKE 'mytable'\G;

2. 使用监控工具

命令行工具

bash
# 使用 mysqladmin 查看状态
mysqladmin -u root -p extended-status
mysqladmin -u root -p processlist
mysqladmin -u root -p status

# 使用 iostat 查看磁盘 I/O
iostat -dx 1

# 使用 vmstat 查看系统资源
vmstat 1

# 使用 top 查看进程资源使用
top -p $(pgrep -f mysqld)

监控平台

  1. Prometheus + Grafana

    • 使用 node_exporter 收集系统指标
    • 使用 mysqld_exporter 收集 MariaDB 指标
    • 使用 Grafana 创建监控仪表盘
  2. Zabbix

    • 使用 Zabbix Agent 收集系统指标
    • 使用 MariaDB 模板收集数据库指标
    • 配置告警规则和通知
  3. Nagios/Icinga

    • 使用 check_mysql 插件收集数据库指标
    • 配置服务检查和告警
  4. 商业监控工具

    • SolarWinds Database Performance Monitor
    • Datadog
    • New Relic

监控指标最佳实践

  1. 选择关键指标:根据业务需求和数据库规模选择关键指标进行监控,避免监控过多无关指标
  2. 设置合理阈值:根据数据库性能和业务需求设置合理的告警阈值,避免误告警
  3. 定期调整指标:根据数据库负载和业务变化定期调整监控指标和阈值
  4. 集成监控平台:使用专业的监控平台进行集中监控和告警管理
  5. 自动化响应:对于常见问题,实现自动化响应和修复
  6. 监控数据可视化:使用图表和仪表盘可视化监控数据,便于快速识别问题
  7. 历史数据保留:保留足够的历史监控数据,便于趋势分析和容量规划
  8. 监控覆盖全面:覆盖性能、状态、资源、安全等各个方面的指标

常见问题(FAQ)

Q1: 监控指标太多,如何选择关键指标?

A: 可以根据以下原则选择关键指标:

  1. 业务相关性:选择与业务直接相关的指标,如 QPS、TPS、响应时间
  2. 系统健康度:选择反映系统健康状态的指标,如服务状态、复制状态、磁盘使用率
  3. 性能瓶颈:选择可能成为性能瓶颈的指标,如 CPU 使用率、内存使用率、磁盘 I/O
  4. 安全风险:选择反映安全风险的指标,如失败登录尝试、权限变更

Q2: 如何设置合理的告警阈值?

A: 可以通过以下方法设置合理的告警阈值:

  1. 基准测试:在系统正常运行时进行基准测试,确定正常指标范围
  2. 历史数据分析:分析历史监控数据,确定指标的正常波动范围
  3. 业务需求:根据业务的 SLA 要求设置告警阈值
  4. 逐步调整:先设置宽松的阈值,然后根据实际情况逐步调整
  5. 分层告警:设置多个告警级别(警告、严重、紧急),根据指标严重程度触发不同级别的告警

Q3: 如何处理大量的告警?

A: 可以采取以下措施:

  1. 优化告警规则:调整告警阈值,减少误告警
  2. 合并相关告警:将相关的告警合并为一个告警,减少告警数量
  3. 设置告警抑制:在特定情况下抑制某些告警
  4. 自动化响应:对于常见问题,实现自动化响应和修复
  5. 告警分级:根据告警严重程度进行分级,优先处理严重告警

Q4: 如何实现监控数据的可视化?

A: 可以使用以下工具实现监控数据的可视化:

  1. Grafana:开源的监控数据可视化工具,支持多种数据源
  2. Kibana:与 Elasticsearch 配合使用,支持日志和指标的可视化
  3. Zabbix 仪表盘:Zabbix 内置的仪表盘功能
  4. 商业监控工具:如 Datadog、New Relic 等提供的可视化功能

Q5: 如何进行监控数据的趋势分析?

A: 可以通过以下方法进行趋势分析:

  1. 长期数据保留:保留足够的历史监控数据,便于趋势分析
  2. 使用时间序列数据库:如 Prometheus、InfluxDB 等,专门用于存储时间序列数据
  3. 使用趋势分析工具:如 Grafana 的趋势图、Prometheus 的查询语言
  4. 定期报告:生成定期的监控报告,分析指标趋势和变化
  5. 容量规划:根据监控数据的趋势进行容量规划,提前扩容资源

最佳实践总结

  1. 全面监控:监控性能、状态、资源、安全等各个方面的指标
  2. 合理选择指标:选择与业务相关的关键指标,避免监控过多无关指标
  3. 设置合理阈值:根据数据库性能和业务需求设置合理的告警阈值
  4. 集成监控平台:使用专业的监控平台进行集中监控和告警管理
  5. 自动化响应:对于常见问题,实现自动化响应和修复
  6. 可视化监控数据:使用图表和仪表盘可视化监控数据,便于快速识别问题
  7. 历史数据分析:分析历史监控数据,进行趋势分析和容量规划
  8. 定期优化:根据监控数据定期优化数据库配置和查询

通过全面监控 MariaDB 的核心指标,可以及时发现数据库问题,预防故障发生,确保数据库服务的稳定运行,提高业务的可用性和可靠性。