跳到主要内容

DB2 REORG(重组)的主要目的包括:

1. 消除碎片

  • 删除和更新操作会在表和索引中产生碎片空间
  • REORG 重新组织数据页,消除这些碎片,提高存储效率

2. 提升查询性能

  • 重新排列数据行,使其物理存储顺序更符合聚集索引顺序
  • 减少 I/O 操作次数,加快数据扫描和检索速度
  • 改善缓冲池命中率

3. 优化索引结构

  • 重建索引,消除索引页碎片
  • 平衡索引树结构,减少索引层级
  • 提高索引查找效率

4. 回收空间

  • 释放因删除操作而产生的未使用空间
  • 减少表和索引占用的物理存储空间
  • 降低存储成本

5. 改善数据聚集度

  • 按照聚集索引(Clustering Index)重新排列数据
  • 提高数据的物理聚集度(Cluster Ratio)
  • 使相关数据存储在相邻页面

何时需要执行 REORG?

典型触发条件:
  • OVERFLOW 值较高
  • NPAGES 与 FPAGES 差异较大
  • 聚集比率(Cluster Ratio)低于 80%
  • 频繁的插入、删除、更新操作后

DB2数据库ISIMDB增长到了500G,索引文件大小也500G。

db2 connect to ISIMDB

1.进行REORGCHK,看看哪些表数据多,有白空间可以释放

db2 "REORGCHK CURRENT STATISTICS ON TABLE ALL" > reorgchk_out

Table statistics:

F1: 100 * OVERFLOW / CARD < 5

F2: 100 * (Effective Space Utilization of Data Pages) > 70

F3: 100 * (Required Pages / Total Pages) > 80

SCHEMA_NAME CARD OV NP FP ACTBLK TSIZE F1 F2 F3 REORG

2.进行在线REORG,整理白空间
db2 REORG TABLE ISIMUSER.ACTIVITY INPLACE ALLOW WRITE ACCESS
db2 REORG TABLE ISIMUSER.PROCESSLOG INPLACE ALLOW WRITE ACCESS
db2 REORG TABLE ISIMUSER.PROCESS INPLACE ALLOW WRITE ACCESS
db2 REORG TABLE ISIMUSER.AUDIT_MGMT_OBLIGATION_ATTRIB INPLACE
db2 REORG TABLE ISIMUSER.AUDIT_EVENT INPLACE ALLOW WRITE ACCESS

过程中可以执行以下命令查看输出:

db2pd -db isimdb -reorg index -repeat 5

INDEX索引重建状态

注意:在执行过程中,

db2 reorg indexes all for table isimuser.audit_event allow write access

需要确保事务日志相关参数调大,不然会报错:

SQL0964C The transaction log for the database is full. SQLSTATE=57011。

db2 update db cfg for ISIMDB using LOGSECOND 50

db2 update db cfg for ISIMDB using LOGPRIMARY 200

db2 update db cfg for ISIMDB using LOGFILSIZ 50000

db2 force application all

db2stop

db2start

db2 connect to ISIMDB

$ ls -l /data/db2inst1/isimdb/db2inst1/NODE0000/SQL00001

3. 在REORG过程中,会写入大量的归档日志,要定期删除,避免磁盘空间不足。

/data/db2inst1/isimarc/db2inst1/ISIMDB/NODE0000/LOGSTREAM0000/C0000009/

释放白空间的命令

db2 ALTER TABLESPACE ENROLE_DATA LOWER HIGH WATER MARK

DB20000I The SQL command completed successfully.

db2 "ALTER TABLESPACE ENROLE_DATA REDUCE (ALL CONTAINERS 10G)"

DB20000I The SQL command completed successfully.

数据占的表空间大小从500G降低到了130G。

查看索引的表空间

db2 "LIST TABLESPACE CONTAINERS FOR 4 SHOW DETAIL"

Tablespace Containers for Tablespace 4

Container ID = 0

Name = /data/db2inst1/db2inst1/NODE0000/SQL00001/enrole_indexes
Type = File
Total pages = 16777216
Useable pages = 16777184
Accessible = Yes
Container ID = 1
Name = /data/db2inst1/isimdb/enrole_indexes2025
Type = File
Total pages = 32768
Useable pages = 32736
Accessible = Yes

db2 "ALTER TABLESPACE ENROLE_INDEXES REDUCE (FILE '/data/db2inst1/db2inst1/NODE0000/SQL00001/enrole_indexes' 40G)"

DB20001I The SQL command completed successfully.

索引占的表空间从500G降到了170G。

留下回复