DB2 MDC 表的优化策略

合集下载

db2数据库优化方案

db2数据库优化方案

db2数据库优化方案随着企业数据量的不断增加,数据库的性能优化变得越来越重要。

在众多数据库中,DB2是一款功能强大的关系型数据库管理系统。

本文将为您介绍一些针对DB2数据库的优化方案,以提高数据库的性能和效率。

一、合理设计数据库结构良好的数据库设计是优化数据库性能的基础。

以下是一些设计数据库结构的准则:1. 使用适当的数据类型:根据数据的特性选择适当的数据类型,减小存储空间的占用,提高查询和更新速度。

2. 设计有效的主键和外键:将主键和外键应用到表的关键字段上,以确保数据的完整性和一致性,并加速查询操作。

二、合理设置数据库参数通过调整数据库参数,可以改善DB2的性能表现。

以下是一些常用的数据库参数设置建议:1. 缓冲池设置:调整缓冲池的大小,使得主要用于查询的表和索引可以被缓存,减少磁盘I/O操作。

2. 日志设置:根据业务需求设置日志的大小和数量,以平衡事务处理的性能和数据恢复的能力。

3. 并发设置:根据并发操作的需求和服务器硬件性能合理设置并发连接数和锁定策略,以提高系统的并发处理能力。

三、优化查询语句优化查询语句可以提高DB2数据库的性能和响应时间。

以下是一些优化查询语句的建议:1. 使用索引:根据查询的字段和条件创建适当的索引,加快查询速度。

2. 正确使用JOIN操作:避免使用不必要的JOIN操作,优化表之间的关联关系,减少查询的复杂性。

3. 避免全表扫描:尽量避免使用SELECT *的方式查询数据,只选择需要的字段,减少数据库的负载。

四、定期维护数据库定期维护数据库可以确保数据库的正常运行和优化性能。

以下是一些数据库维护的建议:1. 优化表和索引:根据数据库的使用情况定期重新组织表和索引,保持数据的连续性和最佳性能。

2. 清理无用数据:定期删除或归档不再使用的数据,减少数据库的存储空间占用。

3. 备份和恢复策略:制定完备的数据库备份和恢复策略,以防止数据丢失和灾难恢复。

五、硬件优化优化数据库的硬件环境可以提高系统的性能和可靠性。

DB2数据库的简单优化

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 锁管理a) 最大锁数增加MAXLOCKS参数:sql代码:UPDATE DB CFG FOR database_name USING MAXLOCKS 20 b) 锁列表大小调整LOCKLIST参数:sql代码:UPDATE DB CFG FOR database_name USING LOCKLIST 8192 并发控制a) 最大应用程序数增加MAXAPPLS参数:sql代码:UPDATE DB CFG FOR database_name USING MAXAPPLS 400 b) 代理数调整NUM_POOLAGENTS参数:sql代码:UPDATE DBM CFG USING NUM_POOLAGENTS 100统计信息收集a) 自动统计信息收集启用AUTO_RUNSTATS:sql代码:UPDATE DB CFG FOR database_name USING AUTO_RUNSTATS ON b) 统计信息采样调整统计信息采样率:sql代码:UPDATE DB CFG FOR database_name USING AUTO_SAMPLING YES 查询优化器a) 优化级别设置OPTLEVEL参数:sql代码:UPDATE DB CFG FOR database_name USING OPTLEVEL 5表空间管理a) 自动存储启用自动存储:sql代码:CREATE TABLESPACE ts_name MANAGED BY AUTOMATIC STORAGE b) 表空间扩展设置自动扩展:sql代码:ALTER TABLESPACE ts_name AUTORESIZE YES索引优化a) 索引重组定期重组索引:sql代码:REORG INDEXES ALL FOR TABLE table_name分区表对大表使用分区:sql代码:CREATE TABLE table_name (...) PARTITION BY RANGE(column_name) (...)压缩启用表压缩:sql代码:ALTER TABLE table_name COMPRESS YES并行度调整INTRA_PARALLEL参数:sql代码:UPDATE DB CFG FOR database_name USING INTRA_PARALLEL YES 监控和诊断a) 启用活动监控:sql代码:UPDATE DBM CFG USING DFT_MON_BUFPOOL ONUPDATE DBM CFG USING DFT_MON_LOCK ONUPDATE DBM CFG USING DFT_MON_SORT ONUPDATE DBM CFG USING DFT_MON_STMT ONb) 使用db2top工具实时监控性能c) 定期检查db2diag.log文件。

DB2数据库优化策略

DB2数据库优化策略

DB2数据库优化策略当涉及到DB2数据库优化时,具体的案例取决于数据库的具体情况和性能问题。

请注意,这些只是一些常见的DB2优化案例和步骤。

具体的优化策略取决于您的特定情况和需求。

在进行任何优化之前,建议先进行充分的需求分析和性能测试,以确保所选的优化策略能够真正解决您的问题并带来显著的性能提升。

一.索引优化:识别慢查询:首先,通过慢查询日志或性能监控工具识别慢查询。

分析查询:查看查询的执行计划,确定是否可以利用索引加速查询。

创建或优化索引:如果发现缺少必要的索引,创建索引;如果存在冗余或低效的索引,则进行优化或删除。

二.查询优化:重写复杂查询:将复杂的联接和子查询重写为更高效的查询方式,例如使用JOIN替代子查询。

使用合适的函数:避免在查询中使用复杂的函数,这可能会影响索引的使用和查询性能。

三.数据库设计优化:规范化:确保数据库表结构经过规范化,以减少数据冗余和潜在的更新、插入和删除异常。

反规范化:在适当的情况下,通过反规范化来提高查询性能,减少数据检索的复杂性。

四.硬件和配置优化:增加内存:提高数据库缓冲池的大小,以便数据库可以缓存更多的数据和索引。

使用更快的存储:选择高性能的硬盘或使用SSD来提高I/O性能。

调整数据库配置参数:根据数据库的工作负载和硬件资源,调整数据库的配置参数,如缓冲池大小、线程数等。

五.监控和调优:定期监控数据库性能:使用性能监控工具定期检查数据库的性能指标,如CPU利用率、磁盘I/O、查询响应时间等。

调整优化策略:根据监控结果,定期评估和调整优化策略,以保持数据库的最佳性能。

六.并发和负载管理:资源争用管理:分析并解决多个用户或应用程序之间的资源争用问题,确保数据库资源得到合理分配。

分区:使用分区技术将大型表和索引分成较小的、更易于管理的片段,以提高管理和查询性能。

七.定期维护:数据库维护:定期进行数据库维护,如重建索引、清理旧数据、更新统计信息等,以保持数据库性能和效率。

db2相关程序优化建议

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相同。

在这四种隔离级别中,CS是缺省值。

这四种隔离级别均可以保证DB2数据库在并发的环境下不会有数据丢失的情况发生。

要注意的是如果对纪录进行了修改,需要在相应的纪录上加独占类型的锁,这些独占类型的锁直到交易结束时才会被释放,这一点在四种隔离级别下都是相同的。

到这里,我们已经对DB2中的表锁,行锁,隔离级别进行了论述。

DB2数据库性能优化

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也可以固定执行计划,利用优化概要(Optimizer Guideline),和Oracle的大纲和HINT非常类似。

DB2可以通过优化概要文件或可以直接在SQl语句中加优化概要来制定自己想要的执行计划,非常方便。

但是执行计划固定之后,可能存在风险,过一段时间之后表和索引的数据量发生变化,统计信息也发生改变,可能原来固定的执行计划已经不是最优的了,这个需要自己权衡。

执行计划预期测试环境RHEL 6.8DB2 版本10.1.0我们要把如下SQL语句的执行计划固定从原来的MSJOIN改为NLJOIN项目现场的SQL语句deletefromglsfmfdtl_test tdwhere(td.acct, td.txdt, td.rcdtyp, td.ptxsq, td.page, td.numm, td.ctxsq, y) in(selecttn.acct,tn.txdt,tn.rcdtyp,tn.ptxsq,tn.page,tn.numm,tn.ctxsq,yfromglsfmfdtl_tmp_test tn)原执行计划RowsRETURN( 1)CostI/O|112DELETE( 2)796.643113/---+----\112 113^MSJOIN TABLE: DB2INST1( 3) GLSFMFDTL_TEST7.37965 Q11/----+----\113 0.99115IXSCAN FILTER( 4) ( 5)0.0359879 7.099460 1| |113 112INDEX: SYSIBM TBSCANSQL170601103652100 ( 6)Q3 7.099461|112SORT( 7)7.099271|112TBSCAN( 8)7.082641|112TABLE: DB2INST1GLSFMFDTL_TMP_TESTQ2目标执行计划RowsRETURN( 1)CostI/O|DELETE( 2)7.142271/---+----\0 0FETCH TABLE: DB2INST1( 3) GLSFMFDTL_TEST7.14227 Q11/---+----\0 0TBSCAN TABLE: DB2INST1( 4) GLSFMFDTL_TEST7.142131|SORT( 5)7.14191|^NLJOIN( 6)7.141481/-------+-------\112 0TBSCAN IXSCAN( 7) ( 8)7.08264 0.005920491 0| |112 0TABLE: DB2INST1 INDEX: SYSIBM GLSFMFDTL_TMP_TEST SQL170601103652100Q2 Q3第一种方法利用优化概要文件,把要固定的执行计划写入优化概要文件中,然后再注册到DB2中,而不去直接修改SQL语句。

(转)Db2数据库性能优化中,十个共性问题及难点的处理经验

(转)Db2数据库性能优化中,⼗个共性问题及难点的处理经验为了帮助⼤家更好地进⾏DB2的性能优化,社区组织社区专家针对⼀些共性问题及难点分享经验。

以下内容来⾃活动“Db2数据库性能优化经验交流”,主要由以下社区专家及会员分享:leilin、topzgm、岳彩波、beyondmch、yellow-fin等提醒:⽂章末尾有彩蛋,如果你是Db2达⼈,可不要错过~01如何发现性能问题?通过什么定位?1、收集信息。

2、分析3、找到问题点解决第⼀步操作系统级别性能CPU监控:ps -elf | sort +5 -rn | more 第6列代表CPU使⽤的计数器I/O使⽤率:iostat -D 收集磁盘I/O信息内存占⽤率:讨论的内存指的是虚拟内存(virtual memory),包括物理内存(physical memory)与交换空间(swap space)vmstat -> avm 当前系统中已经激活的虚拟内存页的数量(该数值不包含⽂件系统缓存)vmstat -> fre 系统中平均空闲页的数量(不能完全代表系统中可⽤的空闲内存:⽂件系统缓存驻留内存,并不会返还给空闲列表,除⾮被虚拟内存管理器盗取)svmon -> clnt与in use交叉项代表有多少内存被⽂件系统使⽤(加上free项,可以初步认为是该系统中可以被应⽤程序所使⽤的内存)第⼆步数据库级别性能1. db2grep -dump | more 查看服务器安装了⼏个DB2版本2. ps -elf | grep db2inst1 查看数据库进程的CPU计数器3. db2 get dbm cfg | grep -i dft_mon 确认快照打开4. 实例级快照,了解当前实例有多少应⽤程序在执⾏db2 get snapshot for database manager -> Remote connections & Local connections5. 数据库级快照连接数信息:applications connected currently,appls executing in db manager currently锁信息:锁总数,锁等待数量,锁等待总时间,当前数据库锁列表占⽤内存,死锁次数,锁升级次数,锁超时次数排序信息:排序是CPU杀⼿,过多的排序会造成CPU的极⼤消耗;排序溢出是说,如果排序堆⽆法容纳排序数据,就会被溢出到临时空间;排序是⼀种状态,根源在SQL语句;数据索引I/O信息:逻辑读 DB2向缓冲池请求的次数逻辑读越多,需要的物理I/O就越少物理读如果请求的数据页不在缓冲池,需要从磁盘中读取数据页的次数吞吐量或事务信息:提交/回滚事务数,执⾏动态和静态语句次数,增删改查次数( rows read / rows selected ) 是⼀个⾮常重要的性能指标,它表⽰为了检索⼀⾏数据需要读取多少⾏,该值越⼤,表⽰代价越⾼,需要的I/O 越多,可调优的余地越⼤事务⽇志信息:⽇志I/O在很⼤程度上会影响数据库整体的性能6. 应⽤程序快照在数据库快照中发现存在⼤量的逻辑读,通过应⽤程序快照可以细化到某条特定的语句7. 表空间快照在数据库快照中发现存在⼤量的逻辑读,通过表空间快照可以轻松地定位哪个表空间被频繁使⽤8. 表快照如果发现⼀个表的页数很少,但是读的⾏数⾮常多,那么可以合理地猜测该表在某些查询语句中可能处于NLJOIN的内部⼦节点9. 动态SQL快照:SQL执⾏次数,总共读的⾏数,消耗的CPU,逻辑物理读数量,排序数量等第三步内存使⽤监控1. db2pd -osinfo系统内存使⽤情况2. db2pd -dbptnmem整个实例的内存使⽤情况3. db2pd -memsets内存段使⽤情况在实例中会有多个不同的内存段,每⼀个内存段中可能有⼀个或者多个内存池ipcs -a | grep 578814120 内存段映射到操作系统共享内存IPC段FMP与trace内存段很少造成性能问题4. db2pd -mempool深⼊内存池信息5. db2pd -db <dbname> -memsets / -mempool数据库级别内存段和内存池信息02优化过程中的优先级问题?在Db2优化过程中,我已知的有如下⼿段1.索引2.sql语句优化(分析执⾏语句后重写sql)3.runstats信息收集请问优化过程中,⼊⼿的优先级顺序是什么呢,还有其他⼿段吗?这“三板斧”已经可以解决很多问题了,DB2的优化⼿段很多,如果想深⼊了解,上传⼏个⽂件供参考。

数据库_DB2数据库优化

数据库_DB2数据库优化DB2数据库是一种关系型数据库管理系统,由IBM开发和维护。

为了提高DB2数据库的性能和效率,需要进行一系列的优化操作。

下面将介绍一些常见的DB2数据库优化方法。

1.确保合适的硬件配置:DB2数据库的性能很大程度上依赖于底层硬件的性能。

因此,为了获得最佳性能,需要确保数据库运行在合适的硬件配置下。

这包括选择合适的处理器、内存和磁盘配置。

2.优化数据库设计:良好的数据库设计可以提高数据库的性能。

可以通过合理的表设计、索引设计和关联设计来减少数据的冗余和重复,从而提高查询和更新的效率。

3.数据库分区:当数据库中的数据量增加时,可以考虑对数据库进行分区,将数据划分为多个分区存储。

这样可以提高查询和更新的效率,减少锁冲突,并且可以利用多个处理器并行处理多个分区。

4.合理使用索引:索引是提高数据库查询性能的重要手段。

在创建索引时,需要根据实际情况选择合适的列和索引类型,并避免创建过多的索引,以防止影响更新操作的性能。

5.定期收集统计信息:收集数据库表的统计信息可以帮助DB2优化器生成更高效的查询计划。

可以使用DB2提供的统计信息收集工具来定期收集表的统计信息,并确保统计信息是最新的。

6.合理设置数据库参数:DB2数据库有很多参数可以进行优化配置。

这些参数包括缓冲池大小、日志文件大小和数据库连接数等。

通过合理设置这些参数,可以提高数据库的性能和响应速度。

7.优化SQL查询语句:SQL查询语句的性能直接影响数据库的性能。

可以通过使用合适的连接方式、避免使用不必要的子查询和关联查询等方式来优化查询语句。

8.避免长事务:长时间运行的事务会占用数据库资源,影响其他查询和更新操作的性能。

因此,需要尽量避免长时间运行的事务,或者使用事务分解等方式将长事务分解为多个短事务。

9.定期清理无用数据:数据库中的无用数据会占用磁盘空间,并影响查询和更新操作的性能。

因此,需要定期清理无用数据,例如删除过期的日志文件、归档数据和临时表等。

DB2数据库性能优化

DB2数据库性能优化1.设计合理的数据库结构:合理的数据库结构对于性能优化至关重要。

通过合理设计数据库的表结构、关系和索引,可以减少查询和数据操作的复杂度,提高数据库的响应速度。

2.使用合适的数据类型:选择合适的数据类型可以减少存储空间的占用,提高数据的存取速度。

例如,使用整型数据类型代替字符类型可以减少存储空间的占用和索引的大小,提高查询的效率。

3.创建适当的索引:索引是提高查询效率的重要手段。

通过创建合适的索引,可以加快查询速度和数据检索的准确性。

但是过多的索引会增加数据写入的开销,因此需要权衡索引的创建和维护的成本。

4.优化查询语句:查询是数据库操作中最常见的操作,优化查询语句可以显著提升数据库的性能。

在编写查询语句时,应尽量避免使用复杂的连接和子查询,选择合适的查询优化器,使用合适的查询计划,提高查询的效率。

5.控制事务的粒度和并发访问:合理的控制事务的粒度和并发访问可以减少锁冲突和等待,提高并发操作的效率。

通过合理设置数据库的并发模式、锁策略和事务提交的时机,可以有效提高数据库的并发性能。

6.适当的内存配置:DB2数据库可以通过内存缓存提高数据的读取和写入速度。

合理的内存配置可以减少磁盘I/O操作,提高数据库的性能。

通过调整数据库的缓存大小、内存池和高速缓存参数,可以提高数据库的性能。

7.定期维护和优化:定期维护和优化是保持数据库性能的重要手段。

通过定期进行数据库的备份和恢复、数据清理和压缩、表和索引的重组和优化等工作,可以保持数据库的健康运行和高效性能。

8.监控和调优工具的使用:DB2数据库提供了丰富的监控和调优工具,可以帮助管理员追踪和诊断数据库的性能问题。

通过使用这些工具,可以及时发现和解决数据库的性能瓶颈,提高数据库的运行效率。

总结起来,DB2数据库性能优化是一个持续改进的过程,需要综合考虑数据库结构、查询语句、系统配置和运行环境等因素。

通过合理的设计、优化和维护,可以最大限度地提升DB2数据库的性能和运行效率。

数据库管理系统DB2监控与调优技巧

数据库管理系统DB2监控与调优技巧随着现代企业对数据存储和管理的重要性越来越高,数据库管理系统已经成为了现代企业不可或缺的一部分。

DB2是IBM的一款关系型数据库管理系统,被广泛应用于企业级应用中。

在使用DB2进行数据管理时,我们需要掌握一些监控和调优技巧来保证其高效性和可靠性。

一、DB2监控技巧1. 监视系统资源使用情况在使用DB2进行数据管理时,我们需要关注系统资源的使用情况以及性能瓶颈。

可以使用IBM提供的一些监控工具来监视系统资源的使用情况,例如db2top、db2pd等工具。

通过使用这些工具,我们可以快速了解系统资源使用情况,及时发现性能瓶颈并进行调整。

2. 监视数据库活动除了监视系统资源的使用情况外,我们还需要监视数据库的活动情况。

可以使用db2diag命令查看数据库操作日志,查看数据库的活动情况并及时处理可能存在的问题。

此外,可以使用db2pd命令查看数据库锁定、响应时间等信息,也可根据情况对数据库进行调整和优化。

3. 周期性维护在长时间的数据库运行过程中,可能会产生类似磁盘碎片等问题,导致系统资源使用效率下降。

因此,我们需要定期进行数据库维护工作,例如备份和还原数据库、重建索引、收缩日志等操作,以保证数据库的高效性和可靠性。

二、DB2调优技巧1. 参数调整在使用DB2进行数据管理时,我们需要根据业务需求来调整DB2的参数,以提高数据库的性能。

例如,我们可以调整DB2的缓存大小、线程数、日志文件大小等参数,以达到更好的性能表现。

2. 建立索引索引是数据库管理中非常重要的一部分,可以大大提高数据库的查询效率。

在使用DB2进行数据管理时,我们需要针对数据库中经常查询的列建立索引,以加快查询速度。

此外,我们还需要定期检查并优化索引的性能。

3. 批量提交在进行大量数据处理时,我们可以采用批量提交的方式,以减少数据库服务器的负担。

如果逐条提交数据,会导致数据库频繁切换工作状态,从而影响数据库性能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 索引,那么支持执行延迟索引清除转出。

相关文档
最新文档