在Oracle数据库中,高水位线(High Water Mark, HWM)是一个表示数据块中数据高度的概念,它指的是数据块中已使用数据的最高点。当你插入或更新表中的数据时,高水位线会上升,以容纳新数据。如果你删除了大部分数据,高水位线仍将保持在较高的位置,这可能会导致存储效率下降。
一、查看表的高水位线
1 2 3 4 5 6 7 8 9 10
| SELECT OWNER, TABLE_NAME, (BLOCKS * 8192 / 1024 / 1024 / 1024) "高水位空间GB", (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024 / 1024) "已用空间GB", blocks * 10 / 100 * 8192 / 1024 / 1024 / 1024 "预留空间GB(pctfree)", (BLOCKS * 8192 / 1024 / 1024 / 1024) - (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024 / 1024) - (blocks * 10 / 100 * 8192 / 1024 / 1024 / 1024) "浪费空间GB" FROM DBA_TABLES WHERE table_name = 'T1';
|
二、降低高水位线
1 2 3
| alter table ADMIN.T1 enable row movement; alter table ADMIN.T1 shrink space CASCADE; alter table ADMIN.T1 disable row movement;
|
三、收集统计信息
1 2 3 4 5 6 7
| SQL> select OWNER,TABLE_NAME,PARTITIONED from dba_tables where table_name='T1';
SQL> select 'analyze table '||TABLE_NAME||' compute statistics;' from user_tables where table_name='&TABLE_NAME';
SQL> select 'analyze index '||index_name||' compute statistics;' from user_indexes where table_name='&TABLE_NAME';
SQL> analyze table ADMIN.T1 compute statistics;
|