DB2 MDC 表的优化策略
让DB2跑得更快——DB2内部解析与性能优化
作者简介
洪烨,毕业于湖南大学,曾在IBM担任数据库现场技术支持,为北京移动、北京联通、中国银联、中国银行、 中信银行、联想集团、国家气象局、中华联合保险、唐山商业银行等多家企业进行DB2故障诊断、技术支持以及 技术培训工作,拥有DB2开发、高级管理以及AIX管理等多项国际认证。
本书正符合优秀数据库著作的评判标准。
前言
写作背景
作为最早出现的关系型数据库,DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模 到大规模应用程序的执行能力。并且DB2以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能, 并支持多任务并行查询。近几年来,为了应对爆炸式增长的数据量,DB2也在进行推陈出新,不断推出完美应对 大数据的技术,并持续增强DB2的性能以及可用性。到本书出版之时,DB2已经推出了V10.5版本,并在该版本中 提供了列式存储功能及更加强大的性能提升。
全书分为5大篇共13章。第1篇主要对性能问题的定义、影响性能问题的因素、DB2的整体组件结构,以及对 于各种类型语句的处理机制进行详细的探讨;第2篇主要针对DB2提供的各个监控工具进行阐述,并提供了一些监 控建议;第3篇主要阐述DB2的内部运行机制及各个组件的原理;第4篇包含DB2中内部工具的优化与运行机制,以 及DB2在各个平台中需要注意的性能参数;第5篇对性能优化思路进行了概括性的总结。
db2数据库优化方案
db2数据库优化方案
随着企业数据量的不断增加,数据库的性能优化变得越来越重要。在众多数据库中,DB2是一款功能强大的关系型数据库管理系统。本文将为您介绍一些针对DB2数据库的优化方案,以提高数据库的性能和效率。
一、合理设计数据库结构
良好的数据库设计是优化数据库性能的基础。以下是一些设计数据库结构的准则:
1. 使用适当的数据类型:根据数据的特性选择适当的数据类型,减小存储空间的占用,提高查询和更新速度。
2. 设计有效的主键和外键:将主键和外键应用到表的关键字段上,以确保数据的完整性和一致性,并加速查询操作。
二、合理设置数据库参数
通过调整数据库参数,可以改善DB2的性能表现。以下是一些常用的数据库参数设置建议:
1. 缓冲池设置:调整缓冲池的大小,使得主要用于查询的表和索引可以被缓存,减少磁盘I/O操作。
2. 日志设置:根据业务需求设置日志的大小和数量,以平衡事务处理的性能和数据恢复的能力。
3. 并发设置:根据并发操作的需求和服务器硬件性能合理设置并发连接数和锁定策略,以提高系统的并发处理能力。
三、优化查询语句
优化查询语句可以提高DB2数据库的性能和响应时间。以下是一些优化查询语句的建议:
1. 使用索引:根据查询的字段和条件创建适当的索引,加快查询速度。
2. 正确使用JOIN操作:避免使用不必要的JOIN操作,优化表之间的关联关系,减少查询的复杂性。
3. 避免全表扫描:尽量避免使用SELECT *的方式查询数据,只选择需要的字段,减少数据库的负载。
四、定期维护数据库
定期维护数据库可以确保数据库的正常运行和优化性能。以下是一些数据库维护的建议:
DB2数据库的简单优化
内存配置优化
a) 缓冲池(Buffer Pool)
增加缓冲池大小以减少磁盘I/O:
sql代码:
ALTER BUFFERPOOL IBMDEFAULTBP SIZE 250000
为不同的表空间创建专用缓冲池:
sql代码:CREATE BUFFERPOOL BP_USERDATA SIZE 100000 PAGESIZE 32K b) 排序堆(Sort Heap)
调整SORTHEAP参数:
sql代码:UPDATE DB CFG FOR database_name USING SORTHEAP 1024 c) 包缓存(Package Cache)
增加PCKCACHESz参数:
sql代码:UPDATE DB CFG FOR database_name USING PCKCACHESz 640 I/O 优化
a) 预读(Prefetch)
调整PREFETCHSIZE参数:
sql代码:UPDATE DB CFG FOR database_name USING PREFETCHSIZE 32 b) 异步I/O
启用DFTDBHEAP参数:
sql代码:UPDATE DB CFG FOR database_name USING DFTDBHEAP AUTOMATIC
日志配置
a) 日志缓冲区
增加LOGBUFSZ参数:
sql代码:UPDATE DB CFG FOR database_name USING LOGBUFSZ 1024 b) 日志文件大小
调整LOGFILSIZ参数:
sql代码:UPDATE DB CFG FOR database_name USING LOGFILSIZ 16384 锁管理
DB2数据库优化策略
DB2数据库优化策略
当涉及到DB2数据库优化时,具体的案例取决于数据库的具体情况和性能问题。请注意,这些只是一些常见的DB2优化案例和步骤。具体的优化策略取决于您的特定情况和需求。在进行任何优化之前,建议先进行充分的需求分析和性能测试,以确保所选的优化策略能够真正解决您的问题并带来显著的性能提升。
一.索引优化:
识别慢查询:首先,通过慢查询日志或性能监控工具识别慢查询。
分析查询:查看查询的执行计划,确定是否可以利用索引加速查询。
创建或优化索引:如果发现缺少必要的索引,创建索引;如果存在冗余或低效的索引,则进行优化或删除。
二.查询优化:
重写复杂查询:将复杂的联接和子查询重写为更高效的查询方式,例如使用JOIN替代子查询。
使用合适的函数:避免在查询中使用复杂的函数,这可能会影响索引的使用和查询性能。
三.数据库设计优化:
规范化:确保数据库表结构经过规范化,以减少数据冗余和潜在的更新、插入和删除异常。
反规范化:在适当的情况下,通过反规范化来提高查询性能,减少数据检索的复杂性。
四.硬件和配置优化:
增加内存:提高数据库缓冲池的大小,以便数据库可以缓存更多的数据和索引。
使用更快的存储:选择高性能的硬盘或使用SSD来提高I/O性能。
调整数据库配置参数:根据数据库的工作负载和硬件资源,调整数据库的配置参数,如缓冲池大小、线程数等。
五.监控和调优:
定期监控数据库性能:使用性能监控工具定期检查数据库的性能指标,如CPU利用率、磁盘I/O、查询响应时间等。
调整优化策略:根据监控结果,定期评估和调整优化策略,以保持数据库的最佳性能。
db2执行计划
db2执行计划
DB2执行计划。
DB2执行计划是指DB2数据库系统在执行SQL语句时所采取的执行策略和步骤的详细描述。了解和分析DB2执行计划对于优化SQL语句的性能至关重要。在本文中,我们将详细介绍DB2执行计划的生成过程、执行计划中的重要信息以及如何利用执行计划来优化SQL语句的性能。
DB2执行计划的生成过程。
在DB2数据库系统中,当执行一个SQL语句时,DB2会首先对该语句进行解析和优化,然后生成执行计划。执行计划的生成过程包括以下几个步骤:
1. SQL解析,DB2首先对SQL语句进行解析,分析语法结构,确定语句中涉及的表、字段以及条件等信息。
2. SQL优化,在解析完SQL语句后,DB2会进行SQL优化,即选择最优的执行策略和访问路径,以提高SQL语句的执行效率。在
优化过程中,DB2会考虑索引、统计信息、表之间的关联关系等因素。
3. 执行计划生成,最后,DB2根据经过优化的SQL语句生成执行计划,包括访问路径、访问顺序、访问方法等信息。
执行计划中的重要信息。
执行计划中包含了丰富的信息,主要包括以下几个方面:
1. 访问路径,执行计划会显示DB2选择的访问路径,包括全表扫描、索引扫描、排序、连接方式等。
2. 访问顺序,执行计划会显示DB2选择的访问顺序,即表之间的连接顺序,以及子查询的执行顺序等。
3. 访问方法,执行计划会显示DB2选择的访问方法,包括使用哪种索引、使用哪种连接方式等。
4. 执行步骤,执行计划会详细列出DB2执行SQL语句的每个步骤,包括数据读取、排序、聚合等。
利用执行计划优化SQL语句的性能。
db2相关程序优化建议
DB2相关程序优化建议
一、程序开发建议
?注意程序锁的使用
DB2有十分严格的锁机制,存在锁升级的概念,锁也需要占用一定的缓
存空间,当程序的行级锁达到一定数量后可升级为表级锁,表锁达到一
定数量后可升级为库级锁,将整个数据库锁住。所以在写程序的时候我
们要十分关注程序锁的使用,尤其是对应并发性高的程序。
隔离级别主要用于控制在DB2根据应用提交的SQL语句向DB2数据库中
的相应对象加锁时,会锁住哪些纪录,也就是锁定的范围。隔离级别
的不同,锁定的纪录的范围可能会有很大的差别。
隔离级别分为RR/RS/CS/UR这四个级别。下面让我们来逐一论述:
1.RR隔离级别:在此隔离级别下,DB2会锁住所有相关的纪录。在
一个SQL语句执行期间,所有执行此语句扫描过的纪录都会被加上相应
的锁。具体的锁的类型还是由操作的类型来决定,如果是读取,则加共
享锁;如果是更新,则加独占锁。由于会锁定所有为获得SQL语句的
结果而扫描的纪录,所以锁的数量可能会很庞大,这个时候,索引的
增加可能会对SQL语句的执行有很大的影响,因为索引会影响SQL语句扫
描的纪录数量。
2.RS隔离级别:此隔离级别的要求比RR隔离级别稍弱,此隔离级别下
会锁定所有符合条件的纪录。不论是读取,还是更新,如果SQL语句
中包含查询条件,则会对所有符合条件的纪录加相应的锁。如果没有条
件语句,也就是对表中的所有记录进行处理,则会对所有的纪录加锁。
3.CS隔离级别:此隔离级别仅锁住当前处理的纪录。
4.UR隔离级别:此隔离级别下,如果是读取操作,不会出现任何的行
级锁。对于非只读的操作,它的锁处理和CS相同。
DB2数据库性能优化
DB2数据库性能优化
一、建立索引
(1)添加新索引
在DB2中,可以使用CREATEINDEX命令来建立索引。通过添加索引来提高SQL语句的执行效率。建议在经常使用的字段上建立索引,例如,WHERE子句中的字段,GROUPBY子句中的字段,ORDERBY子句中的字段或者连接条件中的字段。
(2)更新索引
如果表中的数据经常发生变化,则建议定期更新索引。DB2有一项特殊的REORG操作,可以重新建立表中的索引,以提高查询效率。
(3)复合索引
在DB2中,可以使用复合索引来建立索引,以便提高查询效率。复合索引可以使用多个字段,比普通索引更有效地提高查询速度。
二、查询优化
(1)使用合适的连接方式
(2)使用合适的排序方式
(3)使用子查询
(4)尽量少使用通配符
(5)尽量少使用函数
(6)查询中使用表别名
(7)使用EXISTS和NOTEXISTS
(8)使用适当的索引
三、周期性维护
(1)定期检查磁盘空间
(2)定期检查表和索引
(3)定期更新统计信息
(4)定期重新排序和重新组织表
(5)定期检查死锁
四、构造良好的数据模型
(1)正确定义数据字段
(2)使用算法优化数据存储
(3)及时删除无用的数据
(4)构造适当的表结构
五、其他
(1)设置合理的日志文件
DB2优化工具使用
DB2优化工具使用
DB2是一种关系型数据库管理系统,由IBM开发和维护。它具有高性能、高可靠性和可伸缩性的特点,被广泛应用于企业级应用程序中。
为了提高DB2数据库的性能和效率,IBM提供了一系列优化工具。这
些工具可以帮助开发人员和数据库管理员识别和解决性能问题,并提供了
一些自动化功能来优化数据库的配置和操作。
下面是一些常用的DB2优化工具:
1. db2expln:这是一个命令行工具,用于分析SQL语句的执行计划。它可以帮助开发人员识别潜在的性能问题,并提供优化建议。使用
db2expln可以确定是否需要重新设计查询或创建索引以提高性能。
2. db2exfmt:这是一个命令行工具,用于格式化和显示执行计划。
它可以帮助开发人员更好地理解查询的执行过程,包括访问路径、筛选条
件和连接方式等。通过db2exfmt,开发人员可以判断是否有必要进行优化,并根据需要进行相应的调整。
3. db2advis:这是一个命令行工具,用于生成性能优化建议。它基
于历史性能数据和配置信息分析数据库的工作负载,并提供建议以改进性能。通过db2advis,数据库管理员可以了解数据库的当前状态,并采取
相应的措施来优化性能。
4. db2pdcfg:这是一个命令行工具,用于自动配置数据库参数。通
过分析数据库的工作负载和系统资源等信息,db2pdcfg可以自动调整数
据库的参数设置,以提供最佳性能。使用db2pdcfg可以减少手动调整参
数的工作量,并提高数据库的性能。
5. db2top:这是一个命令行工具,用于实时监控数据库性能。它可以显示当前的数据库活动、查询性能和系统资源使用情况等信息。使用db2top可以及时发现性能问题,并采取相应的措施解决问题。
DB2固定执行计划---优化概要
优化概要
DB2也可以固定执行计划,利用优化概要(Optimizer Guideline),和Oracle的大纲和HINT非常类似。DB2可以通过优化概要文件或可以直接在SQl语句中加优化概要来制定自己想要的执行计划,非常方便。
但是执行计划固定之后,可能存在风险,过一段时间之后表和索引的数据量发生变化,统计信息也发生改变,可能原来固定的执行计划已经不是最优的了,这个需要自己权衡。
执行计划预期
测试环境
RHEL 6.8
DB2 版本10.1.0
我们要把如下SQL语句的执行计划固定
从原来的MSJOIN改为NLJOIN
项目现场的SQL语句
delete
from
glsfmfdtl_test td
where
(td.acct, td.txdt, td.rcdtyp, td.ptxsq, td.page, td.numm, td.ctxsq, y) in
(select
tn.acct,
tn.txdt,
tn.rcdtyp,
tn.ptxsq,
tn.page,
tn.numm,
tn.ctxsq,
y
from
glsfmfdtl_tmp_test tn
)
原执行计划
Rows
RETURN
( 1)
Cost
I/O
|
112
DELETE
( 2)
796.643
113
/---+----\
112 113
^MSJOIN TABLE: DB2INST1
( 3) GLSFMFDTL_TEST
7.37965 Q1
1
/----+----\
113 0.99115
IXSCAN FILTER
( 4) ( 5)
0.0359879 7.09946
0 1
| |
数据库_DB2数据库优化
数据库_DB2数据库优化
DB2数据库是一种关系型数据库管理系统,由IBM开发和维护。为了提高DB2数据库的性能和效率,需要进行一系列的优化操作。下面将介绍一些常见的DB2数据库优化方法。
1.确保合适的硬件配置:DB2数据库的性能很大程度上依赖于底层硬件的性能。因此,为了获得最佳性能,需要确保数据库运行在合适的硬件配置下。这包括选择合适的处理器、内存和磁盘配置。
2.优化数据库设计:良好的数据库设计可以提高数据库的性能。可以通过合理的表设计、索引设计和关联设计来减少数据的冗余和重复,从而提高查询和更新的效率。
3.数据库分区:当数据库中的数据量增加时,可以考虑对数据库进行分区,将数据划分为多个分区存储。这样可以提高查询和更新的效率,减少锁冲突,并且可以利用多个处理器并行处理多个分区。
4.合理使用索引:索引是提高数据库查询性能的重要手段。在创建索引时,需要根据实际情况选择合适的列和索引类型,并避免创建过多的索引,以防止影响更新操作的性能。
5.定期收集统计信息:收集数据库表的统计信息可以帮助DB2优化器生成更高效的查询计划。可以使用DB2提供的统计信息收集工具来定期收集表的统计信息,并确保统计信息是最新的。
6.合理设置数据库参数:DB2数据库有很多参数可以进行优化配置。这些参数包括缓冲池大小、日志文件大小和数据库连接数等。通过合理设置这些参数,可以提高数据库的性能和响应速度。
7.优化SQL查询语句:SQL查询语句的性能直接影响数据库的性能。可以通过使用合适的连接方式、避免使用不必要的子查询和关联查询等方式来优化查询语句。
db2重组表结构命令
DB2中重组表结构的命令是 `REORG TABLE`。
这个命令用于重构表的行,以消除分段数据和压缩信息。在分区表上,可以对单个分区进行重组。使用`REORG TABLE`命令时,需要具备以下权限之一:SYSADM、SYSCTRL、SYSMAINT、DBADM、SQLADM或表模式上的SCHEMAADM,以及对表的CONTROL特权。
以下是`REORG TABLE`命令的基本语法:
```sql
REORG TABLE table-name [, ...] [IN [SCHEMA] schema-name] [INDEX INCLUDING | INDEX EXCLUDING | INDEX ALL | INDEX NONE] [RECLAIM EXTENTS]
```
其中:
1. `table-name`:指定要重组的表的名称,该表可以位于本地数据库或远程数据库中。
2. `[IN [SCHEMA] schema-name]`:可选参数,指定表所在的模式名称。如果省略模式名称,将使用默认模式。
3. `INDEX INCLUDING | INDEX EXCLUDING | INDEX ALL | INDEX NONE`:可选参数,指定是否包括索引的重组。
4. `RECLAIM EXTENTS`:按列组织的表支持的参数,用于回收未使用的空间。
需要注意的是,对于类型表,指定的表名必须是层次结构的根表的名称。对于多维集群(MDC)或插入时间集群(ITC)表的重组,不能指定索引。
DB2数据库性能优化
DB2数据库性能优化
1.设计合理的数据库结构:合理的数据库结构对于性能优化至关重要。通过合理设计数据库的表结构、关系和索引,可以减少查询和数据操作的
复杂度,提高数据库的响应速度。
2.使用合适的数据类型:选择合适的数据类型可以减少存储空间的占用,提高数据的存取速度。例如,使用整型数据类型代替字符类型可以减
少存储空间的占用和索引的大小,提高查询的效率。
3.创建适当的索引:索引是提高查询效率的重要手段。通过创建合适
的索引,可以加快查询速度和数据检索的准确性。但是过多的索引会增加
数据写入的开销,因此需要权衡索引的创建和维护的成本。
4.优化查询语句:查询是数据库操作中最常见的操作,优化查询语句
可以显著提升数据库的性能。在编写查询语句时,应尽量避免使用复杂的
连接和子查询,选择合适的查询优化器,使用合适的查询计划,提高查询
的效率。
5.控制事务的粒度和并发访问:合理的控制事务的粒度和并发访问可
以减少锁冲突和等待,提高并发操作的效率。通过合理设置数据库的并发
模式、锁策略和事务提交的时机,可以有效提高数据库的并发性能。
6.适当的内存配置:DB2数据库可以通过内存缓存提高数据的读取和
写入速度。合理的内存配置可以减少磁盘I/O操作,提高数据库的性能。
通过调整数据库的缓存大小、内存池和高速缓存参数,可以提高数据库的
性能。
7.定期维护和优化:定期维护和优化是保持数据库性能的重要手段。
通过定期进行数据库的备份和恢复、数据清理和压缩、表和索引的重组和
优化等工作,可以保持数据库的健康运行和高效性能。
8.监控和调优工具的使用:DB2数据库提供了丰富的监控和调优工具,可以帮助管理员追踪和诊断数据库的性能问题。通过使用这些工具,可以
调优DB2的最佳实践
简介
性能是关系到随需应变型应用程序成功与否的关键。当那些应用程序使用IBM® DB2 Universal Database™作为数据存储时,至关重要的是,从一开始就应该知道有关如何在 DB2 UDB 上取得尽可能好的性能的基础知识。在本文中,我将给出关于调优 DB2 UDB V8 系统的一些比较深入的建议。
我们将谈论这一过程中自始至终存在的性能问题。您可以遵循从创建一个新数据库到运行应用程序这之间的流程。通过本文可以看到如何使用 DB2 自动配置实用程序来初始配置数据库管理器和数据库环境。接着,我将讨论创建缓冲池、表空间、表和索引的最佳实践。另外,您可能还想改变一些重要配置参数的初始值,以便更好地支持应用程序,因此我们还将简介这些配置参数。
我们将论述基于监视器(monitor)细节输出的调优,从而展示如何使用快照监视(snapshot monitoring)帮助调优 SQL、缓冲池和各种不同的数据库管理器以及数据库配置参数。接着,我们将进一步研究应用程序发送给 DB2 的 SQL。通过使用 Explain,可以生成 SQL 采用的访问计划(access plan),并寻找可以进一步优化的机会。我们将考察 Design Advisor 这样一个工具,它可以根据所提供的 SQL 负载推荐出新的索引,或者评估现有的索引。最后,我们还将讨论一些 DB2 SQL 选项。
此外,持续(on-going)维护对于维持最佳性能非常重要。所以我们将讨论一些可以帮助我们进行持续维护的实用程序。对于那些正使用 DB2 ESE Database Partitioning Feature (DPF) 的读者,我会用一节的篇幅谈论为使数据库高效运行而应该考虑的一些问题。有时候可能会存在某种外在的瓶颈(来自 DB2)而使您无法达到性能目标,本文列出了一些常见的瓶颈,以及用于监视这些瓶颈的实用程序。最后,本文列出了一些有价值的 IBM 资源,以帮助您发现有价值的DB2 信息。
数据库管理系统DB2监控与调优技巧
数据库管理系统DB2监控与调优技巧
随着现代企业对数据存储和管理的重要性越来越高,数据库管
理系统已经成为了现代企业不可或缺的一部分。DB2是IBM的一
款关系型数据库管理系统,被广泛应用于企业级应用中。在使用
DB2进行数据管理时,我们需要掌握一些监控和调优技巧来保证
其高效性和可靠性。
一、DB2监控技巧
1. 监视系统资源使用情况
在使用DB2进行数据管理时,我们需要关注系统资源的使用情况以及性能瓶颈。可以使用IBM提供的一些监控工具来监视系统
资源的使用情况,例如db2top、db2pd等工具。通过使用这些工具,我们可以快速了解系统资源使用情况,及时发现性能瓶颈并进行
调整。
2. 监视数据库活动
除了监视系统资源的使用情况外,我们还需要监视数据库的活
动情况。可以使用db2diag命令查看数据库操作日志,查看数据库
的活动情况并及时处理可能存在的问题。此外,可以使用db2pd
命令查看数据库锁定、响应时间等信息,也可根据情况对数据库
进行调整和优化。
3. 周期性维护
在长时间的数据库运行过程中,可能会产生类似磁盘碎片等问题,导致系统资源使用效率下降。因此,我们需要定期进行数据库维护工作,例如备份和还原数据库、重建索引、收缩日志等操作,以保证数据库的高效性和可靠性。
二、DB2调优技巧
1. 参数调整
在使用DB2进行数据管理时,我们需要根据业务需求来调整DB2的参数,以提高数据库的性能。例如,我们可以调整DB2的缓存大小、线程数、日志文件大小等参数,以达到更好的性能表现。
2. 建立索引
索引是数据库管理中非常重要的一部分,可以大大提高数据库的查询效率。在使用DB2进行数据管理时,我们需要针对数据库中经常查询的列建立索引,以加快查询速度。此外,我们还需要定期检查并优化索引的性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DB2 MDC 表的优化策略
如果创建多维集群 (MDC) 表,那么可以提高许多查询的性能,这是因为优化器可
以应用附加的优化策略。这些策略主要依赖于块索引效率有所提高,但根据多个维进行集群这一优点还能提高数据检索速度。
MDC 表优化策略还可以利用分区内并行性和分区间并行性的性能优点。请考虑MDC 表的下列具体优点:
∙维块索引查找操作可以标识表的所需部分,并且能够快速地仅扫描所需的块。
∙因为块索引小于记录标识(RID)索引,所以查找速度更快。
∙可以在块级别执行索引 AND 和 OR 运算,并可以将这些运算与 RID 相结合。
∙保证在扩展数据块内集群数据,这有助于提高检索速度。
∙如果可以使用转出方法,那么删除行的速度将更快。
请考虑名为 SALES 的 MDC 表的以下简单示例,这个表对 REGION 和 MONTH 列
定义了维:
select * from sales
where month = 'March' and region = 'SE'
对于此查询,优化器可以执行维块索引查找操作,以寻找月份为三月且地区为 SE
的块。然后,它可以只扫描那些块,以便快速地访存结果集。
转出删除
当条件允许使用转出方法来进行删除时,将使用这种从 MDC 表中删除行的更高效
方法。必需的条件包括:
∙该 DELETE 语句是搜索型 DELETE,而不是定位型 DELETE(该语句不使用 WHERE CURRENT OF 子句)。
∙没有 WHERE 子句(将删除所有行),或者 WHERE 子句只包含应用于维的条件。
∙定义表时,未指定 DATA CAPTURE CHANGES 子句。
∙该表不是引用完整性关系中的父表。
∙未对该表定义 ON DELETE 触发器。
∙未在任何立即刷新的 MQT 中使用该表。
∙如果级联删除操作的外键是该表的维列的子集,那么它可能适合于转出。
∙在由 CREATE TRIGGER 语句的 OLD TABLE AS 子句指定的触发 SQL 操作之前,该 DELETE 语句不能出现在对临时表执行并标识了受影响行集的
SELECT 语句中。
在转出删除期间,不会记录所删除的记录。而是,将通过重新格式化页的某些部分使包含这些记录的页表现为空页。将会记录对重新格式化的部分所作的更改,但不会记录这些记录本身。
立即清除转出这一缺省行为是指,在删除时清除 RID 索引。还可以通过将注册表
变量 DB2_MDC_ROLLOUT 设为 IMMEDIATE,或者通过对 SET CURRENT MDC ROLLOUT MODE 语句指定 IMMEDIATE 来指定此方式。与标准删除操作相比,
索引更新的日志记录没有变化,因此,性能提高取决于 RID 索引的数目。RID 索
引越少,性能就越好,衡量标准是总时间和日志空间所占的百分比。
可以使用以下公式来估算可以节省的日志空间量:
S + 38*N - 50*P
其中,N是已删除的记录数,S是已删除的记录的总大小(包括空指示符和VARCHAR 长度之类的开销),P是包含已删除的记录的块中的页数。此数值是
实际日志数据的缩减量。节省的所需活动日志空间量是此值的两倍,这是因为,还将节省为回滚操作保留的空间。
另外,在落实事务之后,可以使用延迟清除转出方法来更新 RID 索引。还可以通
过将注册表变量 DB2_MDC_ROLLOUT 设为 DEFER,或者通过对 SET CURRENT MDC ROLLOUT MODE 语句指定DEFERRED 来指定此方式。在延迟转出方式下,将在删除操作落实后在后台以异步方式清除 RID 索引。在删除任务非常大型或者
已对表定义大量RID 索引的情况下,使用这种转出方法可以非常快速地执行删除。整体清除操作的速度也有所提高,这是因为,执行延迟索引清除时将以并行方式清除索引,而执行立即索引清除时将逐行清除索引中的每一行。并且,DELETE 语
句的事务日志空间需求显著降低,这是因为,索引按索引页而不是按索引键来更新异步索引清除日志。
注:延迟清除转出操作需要更多内存资源,这些内存资源将从数据库堆中获取。
如果数据库管理器无法分配它所需的内存结构,那么延迟清除转出操作将失败,并将一条消息写入管理通知日志。
何时使用延迟清除转出方法
如果删除性能对于您而言是最重要的因素,并且已对表定义 RID 索引,那么应使
用延迟清除转出方法。注意,在进行索引清除之前,对已转出的块进行基于索引的扫描会稍微降低性能,这取决于已转出的数据量。在决定执行立即索引清除操作
和延迟索引清除操作时,还应该考虑下列问题:
删除操作的规模
对于非常大型的删除任务,请选择延迟清除转出方法。在对许多小型 MDC 表频繁发出维 DELETE 语句的情况下,异步清除索引对象所产生的开销要
比删除操作期间节省的时间的价值更高。
∙索引的数目和类型
如果表包含大量 RID 索引,并且需要对这些索引执行行级别处理,那么应
使用延迟清除转出方法。
∙块可用性
如果您希望由删除操作释放的块空间在 DELETE 语句落实后立即可用,那
么请使用立即清除转出方法。
∙日志空间
如果日志空间有限,那么应对大型删除任务使用延迟清除转出方法。
∙内存约束
对于所有已暂挂延迟清除操作的表,延迟清除转出操作将耗用更多的数据库堆空间。
要在删除期间禁止转出行为,请将 DB2_MDC_ROLLOUT 注册表变量设为 OFF,或者对 SET CURRENT MDC ROLLOUT MODE 语句指定 NONE。
注:在 DB2® V9.7 及更高版本的发行版中,不支持对具有分区 RID 索引的数据分区 MDC 表执行延迟清除转出。仅支持 NONE 和 IMMEDIATE 方式。如果
DB2_MDC_ROLLOUT 注册表变量设为 DEFER,或者 CURRENT MDC ROLLOUT MODE 专用寄存器设为 DEFERRED 以覆盖 DB2_MDC_ROLLOUT 设置,那么清除转出类型将为 IMMEDIATE。
如果 MDC 表仅存在非分区 RID 索引,那么支持执行延迟索引清除转出。