Skip to content

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. 定期分析和优化

定期报告

  • 每日:查看告警和异常
  • 每周:分析资源使用趋势
  • 每月:生成资源使用报告

趋势分析

  • 分析资源使用的长期趋势
  • 预测资源需求
  • 规划扩容和优化

优化流程

  1. 识别资源瓶颈
  2. 分析瓶颈原因
  3. 制定优化方案
  4. 实施优化
  5. 验证优化效果

4. 资源规划和扩容

容量规划

  • 根据业务增长预测资源需求
  • 考虑3-5年的业务增长
  • 预留足够的资源余量

扩容策略

  • 垂直扩容:升级硬件
  • 水平扩容:增加实例数量
  • 读写分离:分散负载
  • 分库分表:拆分数据

扩容注意事项

  • 制定详细的扩容计划
  • 考虑业务影响
  • 进行充分的测试
  • 制定回滚计划

常见问题(FAQ)

Q1: 如何快速识别资源瓶颈?

A1: 快速识别资源瓶颈的方法:

  1. 查看监控指标,识别异常指标
  2. 分析指标之间的关联性
  3. 使用性能分析工具
  4. 结合业务场景分析
  5. 进行压力测试验证

Q2: 资源指标之间有什么关联性?

A2: 资源指标之间的关联性:

  • CPU使用率高可能导致IO等待增加
  • 内存不足可能导致磁盘IO增加
  • 磁盘IO高可能导致CPU等待
  • 网络延迟高可能导致连接超时

Q3: 如何优化资源使用效率?

A3: 优化资源使用效率的方法:

  1. 优化查询语句
  2. 调整数据库参数
  3. 优化架构设计
  4. 合理分配资源
  5. 定期进行维护

Q4: 如何预测资源需求?

A4: 预测资源需求的方法:

  1. 分析历史资源使用趋势
  2. 考虑业务增长预期
  3. 进行负载测试
  4. 参考行业基准
  5. 建立资源预测模型

Q5: 如何平衡资源使用和成本?

A5: 平衡资源使用和成本的方法:

  1. 实施资源弹性伸缩
  2. 优化资源配置
  3. 考虑云服务的按需付费模式
  4. 合理规划资源生命周期
  5. 定期评估资源利用率

Q6: 如何监控分布式环境下的资源指标?

A6: 监控分布式环境下资源指标的方法:

  1. 使用集中式监控系统
  2. 统一监控指标和告警规则
  3. 考虑分布式追踪
  4. 实现跨节点关联分析
  5. 建立全局视图