http://www.searchdatabase.com.cn/ShowContent_17217.htm
本文先对DB2提供的几种用于提高查询性能的相关工具和命令进行介绍,然后根据笔者的工作经验介绍一些常用的技巧和方法来提高查询性能。主要集中于如何创建和维护索引、改写查询以及改变查询的实现方式,相关内容都将通过实例加以说明。
简介
随着DB2应用的逐渐增多,越来越多的数据库开发人员在项目开发过程中都会遇到查询过于复杂,导致性能难以接受的问题。本文将主要从一个数据库开发者的角度介绍几种常用的方法来提高 DB2查询的性能,而并不讨论如何通过配置DB2的各项参数以及调整服务器环境等方式来提高整个数据库性能的方法。系统配置等工作属于 DBA 的工作范畴,在一般的项目开发中,这对于开发人员都是透明的。本文先对 DB2 提供的几种用于提高查询性能的相关工具和命令进行介绍,然后根据笔者的工作经验介绍一些常用的技巧和方法来提高查询性能。主要集中于如何创建和维护索引、改写查询以及改变查询的实现方式,相关内容都将通过实例加以说明。
DB2提供的几种相关工具和命令
我们将着重介绍如何使用 Visual Explain 和 db2expln 查看动态查询的存取计划。读者可以查阅 DB2 Info Center获得有关查看静态查询存取计划的内容。
DB2 Visual Explain
DB2 提供了非常直观有效的方法来查看查询的存取计划。DB2 Visual Explain 能够获得可视化的查询计划,而 db2expln 命令则可以获得文本形式的查询计划。有了查询计划,我们就可以有针对的对查询进行优化。根据查询计划找出代价最高的扫描 ( 表扫描,索引扫描等 ) 和操作 (Join,Filter,Fetch 等 ),继而通过改写查询或者创建索引消除代价较高的扫描或操作来优化查询。
DB2 提供了多种方法来得到可视化查询计划。
1. 通过 DB2 Control Center 获得可视化查询计划。如图1:
图1. 可视化查询计划
可视化查询计划
点击”Explain SQL”后输入要进行分析的查询语句以及查询标号和标签,点击 Ok 按钮便可得到可视化的查询计划。此时,查询计划会被存储在系统的 Explain 表中。用户可以通过图 1 中的”Show Explained Statements History”命令获得存储在 Explain 表中的所有查询计划。
2. 通过 Command Editor( 在 DB2 8.2 版本之前叫做 Command Center) 获得可视化的查询计划。如图 2:
图2. 获得可视化的查询计划
获得可视化的查询计划
在主窗口输入查询并连接数据库后,点击图中所示的按钮即可得到可视化的查询计划,如图 3:
图3. 查询计划结果
查询计划结果
在图 3 所示的查询计划中,还可以点击图示中的每个节点来察看详细的统计信息。譬如双击节点”FETCH(13) 21,959.75” 后将会弹出如图 4 所示的对话框:
图4. 详细的统计信息
详细的统计信息
图 4 中的统计信息主要包括此 FETCH 操作的总代价,CPU,I/O 以及获得结果集中的第一行的代价。在这里,timerons 是结合了 CPU 和 I/O 代价的成本单位。此外,图 4 中还收集了其他相关信息。譬如此操作读取了哪个表的哪些列,每个谓词的选择度 (selectivity),使用了多少 buffer 等等。
db2exfmt
db2exfmt 命令能够将 Explain 表中存储的存取计划信息以文本的形式进行格式化输出。db2exfmt 命令将各项信息更为直观的显示,使用起来更加方便。命令如清单 1 所示:
清单1. db2exfmt 命令
db2exfmt -d <db_name> -e <schema> -g T -o <output> -u <user> <password> -w <timestamp> Example: db2exfmt -d test_db -e user -g T -o D:\temp\sql_1_result_db2exfmt.txt -u user password -w l Query: sql_1.txt(附件中) Results: sql_1_result_db2exfmt.txt(附件中) |
db2expln
db2expln 是命令行下的解释工具,和前面介绍的 Visual Explain 功能相似。通过该命令可以获得文本形式的查询计划。命令如清单 2 所示:
清单2. db2expln 命令
db2expln -d <db_name> -user <user> <password> -stmtfile <sql.file> -z @ -output <output> -g Example: db2expln -d test_db -user user password -stmtfile D:\temp\sql_1.txt -z @ -output D:\temp\sql_1_result_db2expln.txt –g Query:
sql_1.txt(附件中) Results: sql_1_result_db2expln.txt(附件中)
|
db2expln将存取计划以文本形式输出,它只提供存取计划中主要的信息,并不包含每一个操作占用多少 CPU、I/O、占用 Buffer 的大小以及使用的数据库对象等信息,方便阅读。但是 db2expln 也会将各项有关存取计划的信息存入 Explain 表中,用户可以使用 db2exfmt 察看详细的格式化文本信息。
db2advis
db2advis是DB2提供的另外一种非常有用的命令。通过该命令DB2可以根据优化器的配置以及机器性能给出提高查询性能的建议。这种建议主要集中于如何创建索引,这些索引可以降低多少查询代价,需要创建哪些表或者 Materialized Query Table(MQT) 等。命令如清单 3 所示:
清单3. db2advis 命令
db2advis -d <db_name> -a <user>/<password> -i <sql.file> -o <output> Example: db2advis -d test_db -a user/password -i D:\temp\sql_2.txt > D:\temp\sql_2_result_db2advis.txt Query: sql_2.txt(附件中) Results: sql_2_result_db2advis.txt(附件中) |
通过 -i 指定的 SQL 文件可以包含多个查询,但是查询必须以分号分隔。这与db2expln命令不同,db2expln可以通过-z参数指定多个查询之间的分隔符。用户可以把某一个 workload 中所使用的所有查询写入 SQL 文件中,并在每个查询之前使用”--#SET FREQUENCY <num>”为其指定在这个workload中的执行频率。db2advis会根据每个查询在这个 workload 的频率指数进行权衡来给出索引的创建建议,从而达到整个workload的性能最优。
db2batch
前面介绍的工具和命令只提供了查询的估算代价,但有些时候估算代价和实际的执行时间并不是完全呈线形关系,有必要实际执行这些查询。db2batch就是这样一个 Benchmark工具,它能够提供从准备到查询完成中各个阶段所花费地具体时间,CPU时间,以及返回的记录。命令如清单4 所示:
清单4. db2batch命令
db2batch -d <db_name> -a <user>/<password> -i <time_condition> -f <sql.file> -r <output> Example: db2batch -d test_db -a user/password -i complete -f D:\temp\sql_3.txt -r d:\temp\sql_3_result_db2batch.txt Query: sql_3.txt(附件中) Results: sql_3_result_db2batch.txt(附件中) |
对于执行db2batch时一些详细的设置可以通过-o参数指定,也可以在SQL文件中指定,譬如本例中在SQL文件中使用了下面的配置参数 :
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
其中ROWS_FETCH和ROWS_OUT定义了从查询的结果集中读取记录数和打印到输出文件中的记录数,PERF_DETAIL设置了收集性能信息的级别,DELIMITER则指定了多个查询间的间隔符。
分享到:
相关推荐
DB2高性能最优方法是数据库管理员和IT专业人员在管理和优化大型数据库...对DB2性能优化的深入理解和实践,是IT专业人士不可或缺的技能。在实际工作中,结合具体环境和需求,灵活运用这些方法,才能最大化DB2的潜力。
DB2数据库是IBM公司开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。...《DB2数据库性能调整和优化(第2版).pdf》这本书应该会提供更详尽的指导和案例分析,是学习和提升DB2性能优化技能的重要资源。
### DB2 通用数据库性能调整的常用方法 #### 统计值更新——runstats 在DB2数据库中,保持统计信息的最新状态是确保查询优化器能够做出最佳决策的关键。统计信息反映了数据库中数据分布的特性,如表的行数、各列值...
《DB2性能调优之SQL执行监控》 在数据库管理领域,DB2作为一款强大的关系型数据库管理系统,其性能调优是一项至关重要的任务。本文将深入探讨如何通过监控SQL执行来提升DB2的性能,帮助数据库管理员更好地理解和...
3.2 提高 DB2 查询性能的常用方法 DB2的优化包括使用索引、优化查询语句、启用并行执行、设置合适的统计信息等。例如,通过调整SQL语句的JOIN顺序,可以显著降低查询成本。 4. 性能分析和调优的命令和工具 4.1 ...
本文档主要针对DB2 UDB在AS/400上的应用,重点介绍如何进行数据性能优化和查询优化,旨在帮助用户提高数据库运行效率,减少响应时间,提升用户体验。 #### 二、关键概念与术语 1. **AS/400**: IBM推出的一种集成化...
Linux 下 DB2 常用命令 DB2 是一个 relation database management system(关系数据库管理系统),广泛应用于企业级的数据存储和管理中...这些命令可以帮助用户快速管理和维护 DB2 数据库,提高数据库的性能和安全性。
### DB2性能安全知识点概述 #### 一、SERV_ID等常用字段的长度为何需要统一? 在实际生产环境中,为了确保数据的一致性和查询效率,DBA常常会规范某些常用字段(如`SERV_ID`)的长度。这样做主要是为了减少因字段...
### 提高DB2存储过程性能和健壮性的关键策略 在数据库管理与优化领域,DB2作为IBM的一款高性能关系型数据库管理系统,其存储过程的优化是确保应用响应速度与数据处理效率的关键。以下是对如何提高DB2存储过程性能和...
这有助于提高基于`column1`查询时的速度。 #### 7. 运行统计分析 ```sql runstatsontable<> for index <> shrlevel reference; ``` 此命令用于运行统计分析,它针对表`<>`及其索引`<>`执行,并设置共享级别为`...
在DB2中,`RUNSTATS`是一个重要的实用程序,用于收集表和索引的统计信息,这些信息对优化查询计划和提高查询性能至关重要。当数据库的大小或数据分布发生变化时,运行`RUNSTATS`可以确保数据库管理系统(DBMS)拥有...
### DB2常用命令集 #### 1. 停止 DB2 实例 - **命令**: `db2stop` - **描述**: 该命令用于停止正在运行的DB2实例。 - **注意事项**: 如果实例中有未完成的事务或连接,`db2stop`会等待这些事务完成或超时后自动...
### DB2性能优化与监控详解 #### 一、引言 在现代企业的信息化建设中,数据库作为核心的数据存储和管理工具扮演着至关重要的角色。IBM DB2作为一款高性能的企业级数据库管理系统,在诸多领域都有广泛的应用。为了...
例如,分区功能允许将大型表分散到多个物理设备上,以提高查询性能。 文档"03_DB2 V8数据库基础.doc"可能涵盖了DB2 v8的基础架构、安装步骤、实例创建和管理、安全性配置等内容。而"02_DB2 常用命令.doc"则详细解释...
根据提供的标题、描述和部分内容,我们可以总结出关于“DB2数据库调整数据库性能”的一系列关键知识点。下面将详细探讨这些知识点: ### 一、DB2数据库调整数据库性能的重要性 DB2数据库作为IBM公司的一款高性能...
"关于DB2中的存储过程.doc"则深入讲解了DB2存储过程的编写和使用,存储过程是数据库中一组预编译的SQL语句,能够提高性能并简化复杂的操作。 "DB2从实例到数据库的创建20070316.doc"详细阐述了如何从零开始设置和...
2. SQL性能优化:"高性能SQL"和"提高DB2查询性能的常用方法"着重讨论如何通过调整SQL语句、索引优化、查询计划分析等方式提升DB2数据库的运行效率。这包括使用EXPLAIN分析查询计划,避免全表扫描,以及正确使用JOIN...
`db2 create index <索引名> on <表名>(<字段名>)`:为表创建索引,提高查询速度。 `db2 drop index <索引名> on <表名>`:删除已有的索引。 8. **权限管理** `db2 grant <权限> on <对象> to <用户>`:赋予用户...
缓冲池是 DB2 中的一个重要概念,用于提高数据库的性能。下面是创建缓冲池的命令: `create bufferpool ibmdefault8k IMMEDIATE SIZE 5000 PAGESIZE 8 K ;` `create bufferpool ibmdefault16k IMMEDIATE SIZE 5000...
- 重新组织表可以提高查询性能,运行统计信息有助于优化查询计划。 #### 十、导出数据 **命令:** - `db2 export to <file_path> of del select * from <table_name>`:将数据导出到指定文件。 **注意事项:** - `...