本文的 第 1 部分对 DB2® Performance Expert (DB2 PE) 进行了简介,它是一个可以简化 DB2 UDB 服务器的监视和管理任务的工具。现在,本文的第 2 部分将向您展示几个实践场景,从而展示如何使用该工具来分析直接影响数据库性能的因素,以及如何查找问题。
您需要详细分析使您能够对 DB2 和 DB2 应用程序进行控制和调优的一些关键性能因素吗?您希望提前诊断性能和可用性问题吗?或者您曾在运用 DB2 服务器时遭遇某一问题,但却无法使用当前的快照判断造成该问题的原因,因此希望使用历史的监视数据?IBM DB2 Performance Expert 就是一个能够帮助您完成这些任务的工具。
下面这些使用场景可以展示如何分析和解决各种性能问题,并在 DB2 Performance Expert V2.1 的帮助下完成故障检修任务:
- 确定索引是否可以改进性能
- 重新回顾排序的性能
- 检查对表进行重构的需要
- 确保有足够的 DB2 代理可以处理工作负载
- 解决锁冲突的问题
- 使用 cache 包中提供的 SQL 语句经常检查数据库
- 分析缓冲池
- 监视系统的健康状况
- 在 System Overview 面板中选择 Application Summary。
图 1. System Overview - 在 Application Summary 视图中选择适当的应用程序(在本例中是 db2bp.exe)。
图 2. Application Summary - 在 Application Details 视图中选择 SQL Activity。
图 3. Application Details
图 3中给出的 SQL Activity 界面显示了有关应用程序执行的语句的信息,其中包括任务单元(UOW)、光标、读取的行、选择的行等等。要判断我们是否需要索引,需要查看读取的行与选择的行的比率。
|
DB2 读取了 99,145 行,但只选择了 2,000 行。这就是说,它读取了整个表的内容,却只选择了 2,000 行。因此,创建索引可能会提高性能。
- 在 System Overview 面板中选择 Application Summary。
- 在 Application Summary 视图中选择适当的应用程序(在本例中是 db2bp.exe)。
- 在 Application DetailsSelect 视图中选择 Sort,如 图 4 所示。
图 4. Application Details
Sort 界面中显示了有关排序操作的详细信息,其中包括所有排序、所有排序时间、排序溢出、hash 连接等。
|
在出现排序溢出的情况时,可能会造成额外的开销,因为如果要将数据写入磁盘,那么排序就会需要一个合并阶段,这可能需要更多的 I/O。为了避免出现这种溢出,可以增加排序堆的大小,并对查询进行分析,以确定查询是否需要使用索引。
- 在 System Overview 面板中选择 Statistic Details。
图 5. System Overview - 在 Statistic Details 视图中选择 Tables,并选中 Receive table information。
图 6. Statistic Details
Statistic Details 中的 Table 视图给出了有关表的详细信息,其中包括表名、数据库名、写入的行数、读取的行数、溢出的行数、表的文件 id、表的类型、页面重构等。
|
对太多页进行重构可能会导致性能比优化插入方式的性能还要低。如果您有大量的页面需要重构,可以使用 REORG TABLE 工具对表进行重构,并消除数据碎片。
现在,您的目标是确保有足够多的 DB2 代理来处理工作负载。
- 在 System Overview 面板中选择 Statistic Details。
- 在 Statistic Details 视图中选择 Instance Information,如 图 7 所示。
图 7. Statistic Details
Statistic Details 中的 Instance Information 视图给出了有关当前实例的详细信息,其中包括实例名、当前的连接数、已注册的代理数、已注册最大代理数、等待令牌的代理数、从缓冲池中分配的代理数、已窃取的代理数等。
|
如果您发现有"等待令牌的代理" 或 "已窃取的代理",就增大数据库管理程序中可用代理的个数(MAXAGENTS 和/或 MAX_COORDAGENTS)。
- 在 System Overview 面板中选择 Locking Conflicts。
图 8. System Overview - 在 Locking Conflicts 视图中选择适当的锁冲突。
图 9. Locking Conflicts - 要分析等待某个锁的应用程序,请选择 Waiter(等待锁的)应用程序。
图 10. 锁冲突的应用程序 —— waiter 应用程序 - 在 Application Details 视图中选择 SQL Statement and Package。
图 11. waiter 应用程序的 SQL Statement and Package - 在 Application Details 视图中选择 Locks。
图 12. waiter 应用程序的 Locks - 为了对持有锁的应用程序进行分析,请选择一个 Holder(持有锁的) 应用程序。
图 13. 锁冲突中的应用程序 —— holder 应用程序 - 在 Application Details 视图中选择 SQL Statement and Package。
图 14. holder 应用程序的 SQL Statement and Package - 在 Application Details 视图中选择 Locks。
图 15. holder 应用程序的 Locks - 要找到哪个用户正在运行 holder 应用程序,可以选择 Application Details 视图中的 Identification。
图 16. holder 应用程序的 User Identification
在 System Overview 面板中选择 Applications in Lock Conflicts,显示锁冲突所设计的所有应用程序,当您选择 Locking Conflicts时,这些应用程序都与一个特殊的资源相关联。
Application in Lock Conflicts 面板显示了 holder 和 waiter 应用程序,其中包括应用程序的状态、锁的模式、锁等待时间等。
Application Details 视图中的 SQL Statement and Package 展示了加锁的应用程序的 SQL 语句。
Application Details 视图中的 Locks 显示了详细的加锁信息,例如应用程序所持有的锁、检测到的死锁、锁升级、等待锁的代理等。
Application Details 视图中的 Identifcation 显示了有关正在运行该应用程序的用户的详细信息。
|
检查 waiter 和 holder 应用程序的 SQL 语句,确定诸如应用程序中频繁进行提交操作而导致释放锁或检查应用程序使用的隔离级别之类的操作。当执行很多更新时,在更新之前,要在整个事务的持续时间内锁定整个表。虽然这样可以只使用一个锁,同时还可以防止其他锁妨碍更新操作,但是这样做会减少数据对于其他用户的并发能力。
- 在 System Overview 面板中选择 Statistic Details。
- 在 Statistic Details 视图中选择 Dynamic SQL Statements。
图 17. Dynamic SQL Statements - 下拉滚动条,查看语句的详细资料。
图 18. 语句的详细资料
Statistic Details 中的 Dynamic SQL Statements 视图给出了有关 SQL 语句的详细信息,其中包括访问的数据库、执行次数、已经过去的执行时间、最差和最佳的准备时间、排序,以及在选中 Receive statement cache information时每条语句占用的 CPU 时间等。
通过点击如 图 17所示的标题中的 Executions列,可以按照执行次数对 SQL 语句进行降序排列,这样就可以看到执行最频繁的 SQL 语句。
|
这个执行监视元素可以您帮助判断系统中执行最频繁的 SQL 语句。在本例中,某个查询运行了 500 次,并且进行了 500 次排序。这是进行查询优化的很好的一个选择,可以检查排序值,并验证是否需要创建新的索引。
- 在 System Overview 面板中选择 Buffer Pool Analysis。
图 19. System Overview - 在 Buffer Analysis 中选择 File-> Generate new report。
图 20. 缓冲池分析
图 21显示了缓冲池跟踪报告的结果。
图 21. 缓冲池跟踪报告 - 下拉滚动条,查看缓冲池分析的详细内容。
图 22. 缓冲池分析的详细内容
Buffer Pool Analysis 中提供了缓冲池跟踪报告,它以 HTML 的格式显示,或者以可选的图形交互式报告格式显示。
|
缓冲池命中率大于 80% 被认为是理想的。对于 OLTP 系统来说,该值的理想情况是尽可能接近于 100% (索引命中率更是如此)。
要提高缓冲池的命中率,可以增加缓冲池的大小,也可以考虑分配多个缓冲池,可以为每个经常访问的具有自己的表空间的大型表使用一个缓冲池,也可以为一组小型表使用一个缓冲池。
- 在 System Overview 面板中选择 System Health。
图 23. System overview - 在导航器中选择 Data View。
图 24. Data view - 右击 Open Predefined Data View。
图 25. Open Predefined Data View - 选择您要监视的数据库。
图 26. Open Predefined Data View - 选择数据库 - 图 27给出了系统健康状况视图的一个例子。
图 27. System Health View
System Health 视图以图形化的方式在数据视图中显示了很多重要的性能计数器。您可以使用预定义的数据视图,也可以定制自己的数据视图。
System Health 是一个理想的图形化监视重要性能指标的工具。一旦定义之后,它们就可以用来在 System Overview 面板中显示系统性能数据。
本系列文章的 第 1 部分对 DB2 Performance Expert 进行了简介,第 2 部分又展示了可以用来简化数据库调优任务和系统管理工作的具体方法。您可以使用 DB2 PE 来帮助理解影响性能的多个因素,例如索引、缓冲池的使用、语句缓存、锁、重构要求等等。另外,它还可以用来存储性能数据,供以后分析,并根据您定义的各种因素产生警报。
特别感谢 IBM 开发实验室的 DB2 性能专家 Ute Baumbach,是他审校了这篇文章;感谢 IBM 美国高级技术支持中心的 Cintia Y Ogura,是他为本文提供了教学材料。
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
- DB2 Performance Expert Homepage给出了关于 DB2 Performance Expert V2.1 的介绍。
- DB2 UDB Performance Expert for Multiplatforms V1: A Usage Guide (Redbook, June 2003) 为对多平台使用这种新的 DB2 UDB Performance Expert 工具提供了指南。
- DB2 Performance Expert - Documentation。
Werner Schuetz 是一名 IBM 认证的 IT 专家,同时也是 IBM 认证的高级数据库管理员和 IBM 认证的 DB2 UDB V8 应用程序开发人员。他在德国斯图加特的 IBM Innovation Center 担任 DB2 技术顾问,并在测试 DB2 解决方案、执行性能和调优以及运行竞争性数据库移植方面为独立软件开发商提供支持。 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15082138/viewspace-534778/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15082138/viewspace-534778/