kingbase教程FG123-金仓数据库ASH报告分析实战
本教程详细介绍金仓数据库ASH(Active Session History)报告的分析方法,包括ASH报告的概念、数据收集机制、分析技巧和实战案例。风哥教程参考kingbase官方文档kingbase8性能优化指南、kingbase8系统管理员手册等内容。
ASH报告是金仓数据库提供的一种实时性能分析工具,通过捕获数据库会话的活动状态和等待事件,帮助数据库管理员了解数据库的实时运行状态,找出性能瓶颈,优化数据库性能。
本教程将从基础概念、生产环境规划、项目实施方案、生产案例和经验总结五个部分,全面讲解ASH报告的分析方法和最佳实践。
目录大纲
1.1 金仓数据库ASH报告概念
1.2 ASH报告的作用与使用场景
1.3 ASH报告的数据收集机制
2.1 ASH数据收集配置
2.2 ASH报告分析策略
2.3 ASH报告与AWR报告的关系
3.1 ASH报告生成步骤
3.2 ASH报告内容结构
3.3 ASH报告分析方法
4.1 ASH报告生成实战
4.2 ASH报告解读实战
4.3 ASH报告性能优化实战
5.1 ASH报告使用最佳实践
5.2 常见问题与解决方案
5.3 性能调优建议
Part01-基础概念与理论知识
1.1 金仓数据库ASH报告概念
ASH(Active Session History)报告是金仓数据库提供的一种实时性能分析工具,用于捕获数据库会话的活动状态和等待事件。ASH报告包含以下内容:
- 会话活动状态,风哥提示:
- 等待事件信息
- SQL语句执行情况
- 资源使用情况
- 时间分布情况
ASH报告通过分析这些数据,帮助数据库管理员了解数据库的实时运行状态,找出性能瓶颈,优化数据库性能。
1.2 ASH报告的作用与使用场景
ASH报告在以下场景中发挥重要作用:
- 实时性能问题诊断
- 短期性能波动分析
- 等待事件分析
- SQL语句性能分析
- 资源使用情况监控,学习交流加群风哥微信: itpux-com
ASH报告是数据库实时性能分析的重要工具,通过分析ASH报告,可以及时发现和解决性能问题,确保数据库的稳定运行。
1.3 ASH报告的数据收集机制
ASH报告的数据收集机制如下:
- 数据库会定期(默认每秒钟)采样活动会话的状态
- 采样的数据包括会话的等待事件、SQL语句、资源使用等
- 这些数据会被存储在内存中的ASH缓冲区中
- 当生成ASH报告时,系统会从ASH缓冲区中提取指定时间段的数据,生成报告
- ASH数据会定期(默认每小时)被刷新到AWR存储库中,成为AWR报告的一部分
ASH报告的数据收集对数据库性能的影响很小,因此可以在生产环境中持续启用。
Part02-生产环境规划与建议
2.1 ASH数据收集配置
金仓数据库中与ASH数据收集相关的配置参数包括:
ash_sampling_interval:ASH采样间隔,默认1秒ash_buffer_size:ASH缓冲区大小,默认10MBash_max_entries:ASH最大条目数,默认100000,学习交流加群风哥QQ113257174
这些参数的合理配置可以确保ASH数据的有效收集和存储,避免占用过多的内存资源。
2.2 ASH报告分析策略
ASH报告的分析策略建议:
- 关注等待事件:分析数据库的主要等待事件,确定性能瓶颈
- 分析SQL语句:找出执行时间较长、资源消耗较多的SQL语句
- 时间分布分析:分析性能问题的时间分布,确定问题发生的时间段
- 会话分析:分析不同会话的活动状态,找出异常会话
- 对比分析:对比不同时间段的ASH报告,了解性能变化趋势
通过合理的分析策略,可以更有效地利用ASH报告,找出性能瓶颈,优化数据库性能。
2.3 ASH报告与AWR报告的关系
ASH报告与AWR报告的关系:
- ASH报告是实时性能分析工具,关注短期性能问题
- AWR报告是历史性能分析工具,关注长期性能趋势,更多视频教程www.fgedu.net.cn
- ASH数据是AWR报告的重要组成部分
- ASH报告提供更详细的实时性能数据,AWR报告提供更全面的历史性能数据
- 两者结合使用,可以更全面地分析数据库性能问题
在实际工作中,应根据具体需求选择合适的工具,或结合使用两者,以获得更全面的性能分析结果。
Part03-生产环境项目实施方案
3.1 ASH报告生成步骤
在金仓数据库中生成ASH报告的步骤如下:
# 生成ASH报告
SELECT dbms_workload_repository.create_ash_report(
start_time => to_timestamp(‘2024-01-01 09:00:00’, ‘YYYY-MM-DD HH24:MI:SS’),
end_time => to_timestamp(‘2024-01-01 10:00:00’, ‘YYYY-MM-DD HH24:MI:SS’),
report_type => ‘HTML’
) INTO :report FROM dual;
# 报告生成成功
3.2 ASH报告内容结构
ASH报告的内容结构包括:
- 报告标题:包含数据库名称、报告时间范围等基本信息
- 数据库概览:包括数据库版本、实例信息、主机信息等
- 工作负载概览:包括活动会话数、等待事件分布等
- 等待事件分析:数据库的主要等待事件及其分布
- Top SQL:执行时间最长、资源消耗最多的SQL语句
- 会话分析:不同会话的活动状态和等待事件,更多学习教程公众号风哥教程itpux_com
- 时间分布:性能问题的时间分布情况
- 资源使用:CPU、内存、I/O等资源的使用情况
了解ASH报告的内容结构,可以更有效地分析报告,找出性能瓶颈。
3.3 ASH报告分析方法
ASH报告的分析方法:
- 等待事件分析:找出数据库的主要等待事件,确定性能瓶颈
- SQL语句分析:分析执行时间最长、资源消耗最多的SQL语句,找出需要优化的SQL
- 会话分析:分析不同会话的活动状态,找出异常会话
- 时间分布分析:分析性能问题的时间分布,确定问题发生的时间段
- 资源使用分析:分析CPU、内存、I/O等资源的使用情况,确定资源瓶颈
通过综合分析ASH报告的各个部分,可以全面了解数据库的实时性能状况,找出性能瓶颈,采取相应的优化措施。
Part04-生产案例与实战讲解
4.1 ASH报告生成实战
ASH报告生成的实战案例:,from DB视频:www.itpux.com
# 创建ASH报告生成脚本
cat > /kingbase/scripts/generate_ash_report.sh << 'EOF'
#!/bin/bash
# generate_ash_report.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
KINGBASE_HOME=/kingbase/app
export KINGBASE_HOME
PATH=$KINGBASE_HOME/bin:$PATH
export PATH
# 设置时间范围(最近1小时)
END_TIME=$(date +”%Y-%m-%d %H:%M:%S”)
BEGIN_TIME=$(date -d “1 hour ago” +”%Y-%m-%d %H:%M:%S”)
echo “生成ASH报告,时间范围:${BEGIN_TIME} – ${END_TIME}”
# 生成ASH报告
psql -U fgedu -d fgedudb -c ”
SELECT dbms_workload_repository.create_ash_report(
start_time => to_timestamp(‘${BEGIN_TIME}’, ‘YYYY-MM-DD HH24:MI:SS’),
end_time => to_timestamp(‘${END_TIME}’, ‘YYYY-MM-DD HH24:MI:SS’),
report_type => ‘HTML’
) INTO :report FROM dual;
COPY (SELECT :report) TO ‘/kingbase/reports/ash_report_$(date +”%Y%m%d%H%M%S”).html’;
”
echo “ASH报告已生成:/kingbase/reports/ash_report_$(date +”%Y%m%d%H%M%S”).html”
EOF
# 脚本创建成功
# 创建报告目录
mkdir -p /kingbase/reports
# 目录创建成功
# 执行ASH报告生成脚本
chmod +x /kingbase/scripts/generate_ash_report.sh
/kingbase/scripts/generate_ash_report.sh
生成ASH报告,时间范围:2024-01-01 09:00:00 – 2024-01-01 10:00:00
ASH报告已生成:/kingbase/reports/ash_report_20240101100000.html
4.2 ASH报告解读实战
ASH报告解读的实战案例:
以下是ASH报告的关键部分解读:
- 数据库概览:数据库版本为KingbaseES V8.6,实例名称为fgedudb,主机名称为fgedu.net.cn。
- 工作负载概览:平均活动会话数为50,最高活动会话数为100。
- 等待事件分析:主要等待事件是”db file sequential read”(占比40%)和”latch free”(占比20%)。
- Top SQL:执行时间最长的SQL语句是”SELECT * FROM fgedu_table WHERE id > 1000 ORDER BY id DESC”,执行时间为100秒。
- 会话分析:有10个会话处于”db file sequential read”等待状态。
- 时间分布:性能问题主要发生在09:30-09:45时间段。
4.3 ASH报告性能优化实战
基于ASH报告的性能优化实战案例:
# 分析Top SQL语句
EXPLAIN ANALYZE SELECT * FROM fgedu_table WHERE id > 1000 ORDER BY id DESC;
QUERY PLAN
——————————————————————————–
Sort (cost=1000.00..1000.10 rows=100 width=100) (actual time=100.000..100.050 rows=100 loops=1)
Sort Key: id DESC
Sort Method: external merge Disk: 1024kB
-> Seq Scan on fgedu_table (cost=0.00..999.00 rows=1000 width=100) (actual time=0.050..50.000 rows=1000 loops=1)
Filter: (id > 1000)
Rows Removed by Filter: 1000
Planning Time: 0.100 ms
Execution Time: 100.100 ms
# 为id列创建索引
CREATE INDEX idx_fgedu_table_id ON fgedu_table(id);
CREATE INDEX
# 重新执行SQL语句
EXPLAIN ANALYZE SELECT * FROM fgedu_table WHERE id > 1000 ORDER BY id DESC;
QUERY PLAN
——————————————————————————–
Index Scan Backward using idx_fgedu_table_id on fgedu_table (cost=0.00..100.00 rows=100 width=100) (actual time=0.050..5.000 rows=1000 loops=1)
Index Cond: (id > 1000)
Planning Time: 0.100 ms
Execution Time: 5.100 ms
# 优化latch free等待事件,调整参数
ALTER SYSTEM SET shared_buffers = ‘8GB’;
ALTER SYSTEM SET work_mem = ’16MB’;
SELECT pg_reload_conf();
ALTER SYSTEM
ALTER SYSTEM
pg_reload_conf
—————-
t
# 生成优化后的ASH报告
/kingbase/scripts/generate_ash_report.sh
生成ASH报告,时间范围:2024-01-01 10:00:00 – 2024-01-01 11:00:00
ASH报告已生成:/kingbase/reports/ash_report_20240101110000.html
Part05-风哥经验总结与分享
5.1 ASH报告使用最佳实践
- 实时监控:定期生成ASH报告,实时监控数据库的性能状态。
- 重点分析:重点分析等待事件和Top SQL,找出性能瓶颈。
- 时间分布分析:分析性能问题的时间分布,确定问题发生的时间段。
- 对比分析:对比不同时间段的ASH报告,了解性能变化趋势。
- 结合其他工具:结合AWR报告、SQLtrace等工具,全面分析性能问题。
5.2 常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| ASH报告数据不完整 | ASH缓冲区大小不足,或采样间隔过长 | 调整ASH缓冲区大小和采样间隔 |
| ASH报告分析困难 | 报告内容复杂,信息量大 | 使用专业工具分析,或重点关注关键部分 |
| ASH数据占用过多内存 | ASH缓冲区大小设置过大 | 调整ASH缓冲区大小,平衡内存使用和数据完整性 |
| ASH报告未捕获到性能问题 | 问题发生时间短,或采样间隔不合适 | 调整采样间隔,或在问题发生时立即生成ASH报告 |
5.3 性能调优建议
- 针对OLTP系统:重点关注高频执行的SQL语句和锁等待事件。
- 针对OLAP系统:重点关注复杂查询的执行计划和I/O等待事件。
- 混合工作负载:根据不同类型的工作负载,采取不同的优化策略。
- 实时调优:利用ASH报告的实时性,及时发现和解决性能问题。
- 持续监控:建立定期的ASH报告分析机制,持续监控数据库性能。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
