Runstats,Reorgchk,Reorg,Rebind
Posted dahaoran
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Runstats,Reorgchk,Reorg,Rebind相关的知识,希望对你有一定的参考价值。
Runstats:收集统计信息,为DB2优化器提供最佳路径选择。
runstats命令只能针对单表执行。命令格式:db2 runstats on table schema.tabname
runstats选项默认为allow write access,DB2在runstats的表上加IN锁,可以读取和修改表数据。指定allow read access会在runstats的表上加S锁,只能读取数据,无法修改。
runstats统计结果存在系统表中,syscat.tables保存表统计信息,syscat.indexes保存索引统计信息。
可以查看syscat.tables的stat_time字段,表是否有收集统计信息。db2 "select substr(tabname,1,20) as tabname,stats_time from syscat.tables where stats_time is null"
另外可以使用db2look的mimc选项抽取统计数据。这样可以在测试机器上模拟生产环境的数据,进行测试。 db2look -d sample -m > db2look_stat.out
---------------------------------------------------------------------------------
Reorgchk:重组检查,是否需要重组。
判断表或索引是否需要重组,有2种方法:
1.通过reorgchk工具
reorgchk工具利用8个公式(3个表公式,5个索引公式),如果表统计结果F1,F2或F3标记为*,则改表需要重组。如果索引统计结果F4-F8有*标记,则索引需要重组。
db2 reorgchk on schema SYSTOOLS
Table statistics:
F1: 100 * OVERFLOW / CARD < 5
F2: 100 * (Effective Space Utilization of Data Pages) > 70
F3: 100 * (Required Pages / Total Pages) > 80
Index statistics:
F4: CLUSTERRATIO or normalized CLUSTERFACTOR > 80
F5: 100 * (Space used on leaf pages / Space available on non-empty leaf pages) > MIN(50, (100 - PCTFREE))
F6: (100 - PCTFREE) * (Amount of space available in an index with one less level / Amount of space required for all keys) < 100
F7: 100 * (Number of pseudo-deleted RIDs / Total number of RIDs) < 20
F8: 100 * (Number of pseudo-empty leaf pages / Total number of leaf pages) < 20
2.通过sysibmadm.snaptab管理视图(只能检查表,索引的检查仍需要reorgchk)。(需要打开实例监控器开关 update dbm cfg using dft_mon_table on,重启实例生效)
如果发现overflow_access与rows_read比例高于3%,则需要对表进行重组。
db2 "select substr(TABNAME,1,18) as TABNAME,ROWS_READ,OVERFLOW_ACCESSES from sysibmadm.snaptab where (ROWS_READ>999) and ((OVERFLOW_ACCESSES*100)/(ROWS_READ+1)>3)"
TABNAME ROWS_READ OVERFLOW_ACCESSES
------------------ -------------------- --------------------
T1 10004 3864
对所有表和索引执行reorgchk:
db2 reorgchk current statistics on table all
调用函数对所有表或索引执行reorgchk:
db2 "call SYSPROC.REORGCHK_TB_STATS(‘T‘,‘ALL‘)"| grep "*" | awk ‘{print $1, $2}‘ > reorgchk.out
db2 "call SYSPROC.REORGCHK_IX_STATS(‘T‘,‘ALL‘)"| grep "*" | awk ‘{print $1, $2}‘ >> reorgchk.out
------------------------------------------------------------------
reorg:重组,减少表和索引在物理存储上的碎片。
reorg重组分为表重组和索引重组。表重组支持:离线重组和在线重组。
离线表重组:
也称classic reorg,支持allow read access(默认选项),表示重组时其他应用可以读取数据。allow no access选项,表示重组过程中不允许访问改表。
离线表重粗采用影子拷贝方法,即创建一份原始数据的副本,在影子拷贝中进行数据reorg,reorg结束后替换源表数据。默认情况下,数据拷贝会在原表空间进行,也可以指定USE选项,在指定临时表空间进行。reorg过程中,会记录事务日志,当出现异常时可以通过日志进行恢复。离线reorg最多包含4个阶段:
a.scan-sort:根据reorg指定的索引对表数据进行扫描,排序 (如果没指定索引,表数据重组时不关心顺序)
b.build:根据第一阶段的结果进行表数据构建
c.replace:用于新数据替换原有数据
d.index rebuild:基于新数据,重建索引
可以用多种方式检查reorg是否完成:
1.通过sysibmadm.snaptab检查(要求dft_mon_table实例监控器开关打开)
db2 "select substr(tabname,1,15) as tabname,substr(tabschema,1,15) as tabschema,substr(reorg_type,1,50) as reorg_type,reorg_status,reorg_completion,dbpartitionnum from sysibmadm.snaptab_reorg"
TABNAME TABSCHEMA REORG_TYPE REORG_STATUS REORG_COMPLETION DBPARTITIONNUM
--------------- --------------- -------------------------------------------------- ------------ ---------------- --------------
STAFF DB2INST2 RECLUSTER+OFFLINE+ALLOW_READ+TABLESCAN+DATAONLY COMPLETED SUCCESS 0
2.通过db2 get snapshot for tables on sample进行reorg监控:
Reorg Index = 1
Reorg Tablespace = 1
Start Time = 08/14/2014 12:19:32.574580
Reorg Phase = 4 - Index Recreate
Max Phase = 4
Phase Start Time = 08/14/2014 12:19:33.026445
Status = Completed
Current Counter = 0
Max Counter = 0
Completion = 0
End Time = 08/14/2014 12:19:33.315408
3.通过db2pd reorg选项获得当前正在执行和近期完成的重组信息:
db2pd -d sample -reorg
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 02:23:38 -- Date 2014-08-14-12.28.09.413756
Table Reorg Information:
Address TbspaceID TableID PartID MasterTbs MasterTab TableName Type IndexID TempSpaceID
0x00007F98399BA328 2 15 n/a n/a n/a STAFF Offline 1 1
Table Reorg Stats:
Address TableName Start End PhaseStart MaxPhase Phase CurCount MaxCount Status Completion
0x00007F98399BA328 STAFF 08/14/2014 12:19:32 08/14/2014 12:19:33 08/14/2014 12:19:33 4 IdxRecreat 0 0 Done 0
4.通过list history reorg all for sample获得表或索引重组信息:
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
-- --- ------------------ ---- --- ------------ ------------ --------------
G T 20140814121932 F S0000001.LOG S0000002.LOG
----------------------------------------------------------------------------
Table: "DB2INST2"."STAFF"
----------------------------------------------------------------------------
Comment: REORG INDEX 1 USE 1
Start Time: 20140814121932
End Time: 20140814121933
Status: A
----------------------------------------------------------------------------
EID: 6
以上是关于Runstats,Reorgchk,Reorg,Rebind的主要内容,如果未能解决你的问题,请参考以下文章
db2中,若变更了表结构和约束,都要进行啥操作啊?为啥我在reorg和r