Db2

如何確定何時需要使用 LONGLOBDATA 進行 REORG (DB2)

  • January 14, 2019

REORGCHK 僅標識何時需要對正常(非 LOB)數據的空間回收進行重組。有沒有辦法確定由於邏輯刪除的 LONG 和 LOB 數據而浪費了多少頁面,從而表明使用 LONGLOBDATA 進行重組會是有益的?

管理表 ADMINTABINFO 準確地標識了包含 LOBDATA 的頁數,但沒有指明該數據中有多少是“真實”數據,以及有多少已被邏輯刪除。

例如。在 REORG 與 LONGLOBDATA 列 LOB_OBJECT_P_SIZE/32 之前顯示 35328 頁。重組後顯示 2176 頁。可觀的節省。但在實際執行重組之前,我無法知道我會節省這麼多。

似乎沒有可以使用的特定指標,但間接地是 FPAGES 與 NPAGES 的高比率,如果您有索引,INDCARD 到 NDEL 會告訴您有大量邏輯刪除的行。不幸的是,這不適用於行已更新但未刪除的表,因此我想您只想對定期修改 LOB 列的表執行定期重組。

確定可以使用 LONGLOBDATA Reorg 命令選項回收的空間。

這種相對簡單的分析是通過執行以下操作來執行的:

a) 確定表中的 LONG/LOB 列

db2 describe table <table_schema>.<table_name>

查找具有 LONG 和 LOB 數據類型的列。這也可以通過查詢 SYSCAT.COLUMNS 表來完成。

b) 確定表中目前活動行中 LONG/LOB 列的目前磁碟需求

db2 select sum(decimal(length(<column_name>))) from <table_schema>.<table_name>

結果將以字節為單位。如果有多個列是 LONG/LOB,則需要將此選擇修改為對每一列求和,然後將這些值相加以獲得整個表的 LOB 磁碟要求:

db2 select sum(decimal(length(<column_name_1>)) + decimal(length(<column_name_2>))) from <table_schema>.<table_name>

c) 確定表中 LONG/LOB 數據的目前磁碟使用情況

db2pd -d <dbname> -tcbstat|grep -p LobSize|grep -e LobSize -e <table_name>  

然後查找 LobSize(以頁為單位)並將 PAGESIZE 乘以該表所在的表空間。

c) 和 b) 之間的差異表示可以通過使用 LONGLOBDATA 選項重新組織表來回收的空間。

引用自:https://dba.stackexchange.com/questions/82523