外观
TDSQL 资源指标
CPU 指标
CPU 使用率
定义
CPU使用率是指数据库进程占用CPU资源的百分比,是衡量CPU资源使用情况的核心指标。
监控方法
TDSQL Console
- 进入实例监控页面
- 查看CPU使用率指标
- 配置CPU使用率告警
命令行
sql
-- 查看CPU使用率
SHOW GLOBAL STATUS LIKE 'cpu%';
-- 查看服务器CPU使用率(需要系统权限)
SHOW GLOBAL VARIABLES LIKE 'innodb_cpu_usage_stats';
SET GLOBAL innodb_cpu_usage_stats = ON;操作系统命令
bash
# Linux
top -p <mysql_pid>
mpstat 1
# Windows
perfmon正常范围
- 核心业务:50%以下
- 重要业务:70%以下
- 一般业务:80%以下
异常分析
- CPU使用率持续超过90%:可能存在性能问题
- CPU使用率突然升高:可能是突发流量或慢查询导致
- CPU使用率不均衡:可能是进程调度问题
优化建议
- 优化慢查询
- 调整数据库参数
- 考虑水平扩展
- 升级硬件
CPU 负载
定义
CPU负载是指CPU队列中的进程数量,反映CPU的繁忙程度。
监控方法
操作系统命令
bash
# Linux
uptime
w
cat /proc/loadavg
# Windows
perfmon (查看系统负载)正常范围
- 单CPU系统:负载值 < 1
- 多CPU系统:负载值 < CPU核心数
异常分析
- 负载值持续超过CPU核心数:CPU资源不足
- 负载值突然升高:可能是突发流量或进程异常
优化建议
- 优化应用程序
- 增加CPU资源
- 考虑负载均衡
上下文切换
定义
上下文切换是指CPU从一个进程切换到另一个进程的过程,频繁的上下文切换会消耗CPU资源。
监控方法
操作系统命令
bash
# Linux
vmstat 1
sar -w 1
# Windows
perfmon (查看上下文切换/秒)正常范围
- 上下文切换次数 < 10,000次/秒
异常分析
- 上下文切换次数过高:可能是进程过多或线程竞争导致
- 上下文切换次数突然增加:可能是应用程序问题
优化建议
- 减少进程或线程数量
- 优化应用程序设计
- 调整数据库连接池大小
内存 指标
内存使用率
定义
内存使用率是指数据库系统占用内存资源的百分比,包括物理内存和虚拟内存。
监控方法
TDSQL Console
- 进入实例监控页面
- 查看内存使用率指标
- 配置内存使用率告警
命令行
sql
-- 查看内存使用情况
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';
SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size';
-- 查看内存分配
SHOW GLOBAL VARIABLES LIKE '%buffer%';操作系统命令
bash
# Linux
free -h
top
# Windows
perfmon正常范围
- 物理内存使用率:70%-85%(预留部分内存给操作系统)
- 虚拟内存使用率:尽量避免使用虚拟内存
异常分析
- 内存使用率接近100%:内存资源不足
- 内存使用率突然升高:可能是内存泄漏或缓存配置过大
优化建议
- 调整InnoDB缓冲池大小
- 优化内存配置参数
- 升级内存硬件
- 考虑使用内存数据库
InnoDB 缓冲池
定义
InnoDB缓冲池是InnoDB存储引擎的核心内存结构,用于缓存数据和索引。
监控指标
缓冲池命中率
sql
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
-- 计算缓冲池命中率
Innodb_buffer_pool_read_requests / (Innodb_buffer_pool_read_requests + Innodb_buffer_pool_reads) * 100%缓冲池使用率
sql
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages%';
-- 计算缓冲池使用率
(Innodb_buffer_pool_pages_total - Innodb_buffer_pool_pages_free) / Innodb_buffer_pool_pages_total * 100%正常范围
- 缓冲池命中率:>95%
- 缓冲池使用率:70%-90%
优化建议
- 调整innodb_buffer_pool_size参数
- 考虑使用多个缓冲池实例
- 优化查询,减少全表扫描
连接内存
定义
连接内存是指每个数据库连接占用的内存资源,包括连接缓冲区、结果集缓冲区等。
监控方法
sql
-- 查看连接数
SHOW GLOBAL STATUS LIKE 'Threads_connected';
-- 查看连接内存配置
SHOW GLOBAL VARIABLES LIKE 'read_buffer_size';
SHOW GLOBAL VARIABLES LIKE 'sort_buffer_size';
SHOW GLOBAL VARIABLES LIKE 'join_buffer_size';优化建议
- 合理设置连接内存参数
- 使用连接池管理连接
- 限制最大连接数
磁盘 指标
磁盘使用率
定义
磁盘使用率是指数据库存储设备的空间使用百分比,是衡量磁盘资源使用情况的重要指标。
监控方法
TDSQL Console
- 进入实例监控页面
- 查看磁盘使用率指标
- 配置磁盘使用率告警
命令行
sql
-- 查看数据目录
SHOW GLOBAL VARIABLES LIKE 'datadir';
-- 查看表空间使用情况
SELECT table_schema, table_name, data_length, index_length, data_free
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');操作系统命令
bash
# Linux
df -h
du -sh <data_dir>
# Windows
dir
wmic logicaldisk get size,freespace,caption正常范围
- 数据盘:70%以下
- 日志盘:60%以下
- 备份盘:80%以下
异常分析
- 磁盘使用率持续超过90%:磁盘空间不足
- 磁盘使用率突然升高:可能是数据量突增或日志未清理
优化建议
- 清理无用数据
- 优化日志配置
- 考虑磁盘扩容
- 配置自动清理策略
IOPS
定义
IOPS(Input/Output Operations Per Second)是指每秒执行的IO操作数量,是衡量磁盘IO性能的重要指标。
监控方法
TDSQL Console
- 进入实例监控页面
- 查看IOPS指标
命令行
sql
-- 查看InnoDB IO情况
SHOW GLOBAL STATUS LIKE 'Innodb_data%';
SHOW GLOBAL STATUS LIKE 'Innodb_os_log%';操作系统命令
bash
# Linux
iostat -dx 1
iotop
# Windows
diskperf -y
perfmon (查看物理磁盘IOPS)正常范围
- SSD磁盘:10,000-100,000 IOPS
- HDD磁盘:100-200 IOPS
异常分析
- IOPS接近磁盘最大能力:磁盘IO瓶颈
- IOPS突然升高:可能是批量操作或故障导致
优化建议
- 优化查询,减少IO操作
- 使用SSD存储
- 考虑存储阵列
- 调整IO调度策略
磁盘吞吐量
定义
磁盘吞吐量是指每秒读写的数据量,单位为MB/s,反映磁盘的数据传输能力。
监控方法
TDSQL Console
- 进入实例监控页面
- 查看磁盘吞吐量指标
操作系统命令
bash
# Linux
iostat -dm 1
# Windows
perfmon (查看磁盘吞吐量)正常范围
- SSD磁盘:100-1000 MB/s
- HDD磁盘:50-200 MB/s
异常分析
- 吞吐量接近磁盘最大能力:磁盘带宽瓶颈
- 吞吐量突然变化:可能是批量操作或故障导致
优化建议
- 优化数据访问模式
- 增加磁盘带宽
- 考虑RAID配置
磁盘延迟
定义
磁盘延迟是指IO操作的响应时间,单位为毫秒,反映磁盘的响应速度。
监控方法
操作系统命令
bash
# Linux
iostat -dx 1 (查看await指标)
# Windows
perfmon (查看磁盘平均响应时间)正常范围
- SSD磁盘:<5 ms
- HDD磁盘:<20 ms
异常分析
- 磁盘延迟持续超过正常范围:磁盘性能下降
- 磁盘延迟突然升高:可能是磁盘故障或负载过高
优化建议
- 更换故障磁盘
- 减少磁盘负载
- 升级到更快的存储设备
网络 指标
网络流量
定义
网络流量是指数据库系统的网络输入输出数据量,包括客户端连接和复制流量。
监控方法
TDSQL Console
- 进入实例监控页面
- 查看网络流量指标
操作系统命令
bash
# Linux
tcpdump -i eth0 -w network.pcap
sar -n DEV 1
# Windows
perfmon (查看网络接口流量)正常范围
- 取决于网络带宽和业务需求
- 建议预留30%以上的网络带宽
异常分析
- 网络流量持续接近带宽上限:网络瓶颈
- 网络流量突然变化:可能是突发流量或故障导致
优化建议
- 优化网络配置
- 增加网络带宽
- 考虑网络隔离
- 优化复制配置
连接数
定义
连接数是指当前连接到数据库的客户端数量,反映数据库的并发访问情况。
监控方法
TDSQL Console
- 进入实例监控页面
- 查看连接数指标
- 配置连接数告警
命令行
sql
-- 查看当前连接数
SHOW GLOBAL STATUS LIKE 'Threads_connected';
-- 查看最大连接数
SHOW GLOBAL VARIABLES LIKE 'max_connections';
-- 查看活跃连接数
SHOW GLOBAL STATUS LIKE 'Threads_running';
-- 查看连接详情
SHOW PROCESSLIST;正常范围
- 连接数 < 最大连接数的80%
- 活跃连接数 < CPU核心数的2倍
异常分析
- 连接数接近最大连接数:连接资源不足
- 连接数突然升高:可能是连接泄漏或突发流量
- 活跃连接数过高:可能是慢查询导致
优化建议
- 优化连接池配置
- 增加最大连接数
- 优化慢查询
- 考虑读写分离
网络延迟
定义
网络延迟是指网络数据包的传输时间,反映网络的响应速度。
监控方法
命令行
bash
# 测试网络延迟
ping <target_ip>
# 测试网络路由
traceroute <target_ip> # Linux
tracert <target_ip> # Windows正常范围
- 局域网:<1 ms
- 城域网:<10 ms
- 广域网:<100 ms
异常分析
- 网络延迟持续超过正常范围:网络质量问题
- 网络延迟波动大:网络不稳定
优化建议
- 优化网络架构
- 考虑就近部署
- 使用CDN或专线
数据库特定资源指标
连接数
定义
连接数是指当前连接到数据库的客户端数量,包括活跃连接和空闲连接。
监控方法
sql
-- 查看连接数统计
SHOW GLOBAL STATUS LIKE 'Connections';
SHOW GLOBAL STATUS LIKE 'Aborted_connects';
SHOW GLOBAL STATUS LIKE 'Aborted_clients';优化建议
- 使用连接池
- 合理设置wait_timeout和interactive_timeout
- 监控连接泄漏
缓存命中率
定义
缓存命中率是指从缓存中获取数据的比例,反映缓存的有效性。
监控方法
InnoDB 缓冲池命中率
sql
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
-- 计算缓冲池命中率
SELECT (
(@@global.innodb_buffer_pool_read_requests - @@global.innodb_buffer_pool_reads) /
@@global.innodb_buffer_pool_read_requests * 100
) AS buffer_pool_hit_rate;Query Cache 命中率(MySQL 5.7及以下)
sql
SHOW GLOBAL STATUS LIKE 'Qcache%';
-- 计算查询缓存命中率
SELECT (
@@global.Qcache_hits / (
@@global.Qcache_hits + @@global.Com_select
) * 100
) AS query_cache_hit_rate;正常范围
- InnoDB缓冲池命中率:>95%
- 查询缓存命中率:>80%(如果启用)
优化建议
- 调整缓存大小
- 优化数据访问模式
- 考虑使用应用层缓存
临时表使用
定义
临时表使用是指数据库在执行查询时创建的临时表数量,反映查询的复杂度。
监控方法
sql
-- 查看临时表使用情况
SHOW GLOBAL STATUS LIKE 'Created_tmp%';正常范围
- Created_tmp_tables:<100/秒
- Created_tmp_disk_tables:<10/秒
异常分析
- 临时表数量过多:可能是查询复杂度高或缺少索引
- 磁盘临时表比例高:内存临时表配置不足
优化建议
- 优化查询,减少临时表使用
- 增加tmp_table_size和max_heap_table_size
- 添加适当的索引
资源指标监控最佳实践
1. 建立监控体系
监控工具选择
- TDSQL Console:内置监控,方便易用
- Prometheus + Grafana:强大的开源监控方案
- Zabbix:综合监控系统
- 自定义监控脚本
监控指标选择
- 核心指标:CPU使用率、内存使用率、磁盘使用率、IOPS、连接数
- 辅助指标:缓存命中率、临时表使用等
监控频率
- 核心指标:1分钟
- 辅助指标:5分钟
- 历史数据:根据需求设置保留期限
2. 配置告警规则
告警分级
- 紧急告警:CPU使用率>95%、磁盘使用率>90%等
- 严重告警:CPU使用率>85%、磁盘使用率>80%等
- 警告告警:CPU使用率>75%、磁盘使用率>70%等
告警方式
- 短信告警:紧急和严重告警
- 邮件告警:所有告警
- 即时通讯工具告警:紧急告警
告警抑制
- 避免重复告警
- 关联相关告警
- 配置告警静默期
3. 定期分析和优化
定期报告
- 每日:查看告警和异常
- 每周:分析资源使用趋势
- 每月:生成资源使用报告
趋势分析
- 分析资源使用的长期趋势
- 预测资源需求
- 规划扩容和优化
优化流程
- 识别资源瓶颈
- 分析瓶颈原因
- 制定优化方案
- 实施优化
- 验证优化效果
4. 资源规划和扩容
容量规划
- 根据业务增长预测资源需求
- 考虑3-5年的业务增长
- 预留足够的资源余量
扩容策略
- 垂直扩容:升级硬件
- 水平扩容:增加实例数量
- 读写分离:分散负载
- 分库分表:拆分数据
扩容注意事项
- 制定详细的扩容计划
- 考虑业务影响
- 进行充分的测试
- 制定回滚计划
常见问题(FAQ)
Q1: 如何快速识别资源瓶颈?
A1: 快速识别资源瓶颈的方法:
- 查看监控指标,识别异常指标
- 分析指标之间的关联性
- 使用性能分析工具
- 结合业务场景分析
- 进行压力测试验证
Q2: 资源指标之间有什么关联性?
A2: 资源指标之间的关联性:
- CPU使用率高可能导致IO等待增加
- 内存不足可能导致磁盘IO增加
- 磁盘IO高可能导致CPU等待
- 网络延迟高可能导致连接超时
Q3: 如何优化资源使用效率?
A3: 优化资源使用效率的方法:
- 优化查询语句
- 调整数据库参数
- 优化架构设计
- 合理分配资源
- 定期进行维护
Q4: 如何预测资源需求?
A4: 预测资源需求的方法:
- 分析历史资源使用趋势
- 考虑业务增长预期
- 进行负载测试
- 参考行业基准
- 建立资源预测模型
Q5: 如何平衡资源使用和成本?
A5: 平衡资源使用和成本的方法:
- 实施资源弹性伸缩
- 优化资源配置
- 考虑云服务的按需付费模式
- 合理规划资源生命周期
- 定期评估资源利用率
Q6: 如何监控分布式环境下的资源指标?
A6: 监控分布式环境下资源指标的方法:
- 使用集中式监控系统
- 统一监控指标和告警规则
- 考虑分布式追踪
- 实现跨节点关联分析
- 建立全局视图
