高水位线

当表随着数据的增加,会使用越来越多的块,HWM会升高,当删除一些数据后,可能会产生很多空块(不包含数据的块),但它们仍在HWM之下。为了降低高水位线,有必要对表进行重组 (reorganization):
ALTER TABLE T ENABLE ROW MOVEMENT;
ALTER TABLE T SHRINK SPACE;

CREATE TABLE t ( id NUMBER, n1 NUMBER, n2 NUMBER, pad VARCHAR2(4000) ); execute dbms_random.seed(0) INSERT INTO t SELECT rownum AS id, 1+mod(rownum,251) AS n1, 1+mod(rownum,251) AS n2, dbms_random.string('p',255) AS pad FROM dual CONNECT BY level <= 10000 ORDER BY dbms_random.value; REM REM 收集表t的统计信息 REM BEGIN dbms_stats.gather_table_stats( ownname => user, tabname => 'T', estimate_percent => 100, method_opt => 'for all columns size skewonly', cascade => TRUE ); END; / REM REM 将当前session的statistics_level设置为all,以使用v$sql_plan_statistics查看逻辑读信息 REM ALTER SESSION SET statistics_level = all; REM REM 全表扫描t,显示的逻辑读信息为439 REM SELECT /*+ full(t) */ * FROM t WHERE n2 = 19; SELECT last_output_rows, last_cr_buffer_gets, last_cu_buffer_gets FROM v$session s, v$sql_plan_statistics p WHERE s.prev_sql_id = p.sql_id AND s.prev_child_number = p.child_number AND s.sid = sys_context('userenv','sid') AND p.operation_id = 1; LAST_OUTPUT_ROWS LAST_CR_BUFFER_GETS LAST_CU_BUFFER_GETS ---------------- ------------------- ------------------- 40 439 0 REM REM 删除大部分行并重新测试,显示逻辑读信息仍然为439,因为许多无用的空块被访问 REM DELETE t WHERE n2 <> 19; SELECT /*+ full(t) */ * FROM t WHERE n2 = 19; SELECT last_output_rows, last_cr_buffer_gets, last_cu_buffer_gets FROM v$session s, v$sql_plan_statistics p WHERE s.prev_sql_id = p.sql_id AND s.prev_child_number = p.child_number AND s.sid = sys_context('userenv','sid') AND p.operation_id = 1; LAST_OUTPUT_ROWS LAST_CR_BUFFER_GETS LAST_CU_BUFFER_GETS ---------------- ------------------- ------------------- 40 439 0 REM REM 重组织表t,并重新测试,显示的逻辑读为7 REM (this works in Oracle Database 10g only) REM ALTER TABLE t ENABLE ROW MOVEMENT; ALTER TABLE t SHRINK SPACE; SELECT /*+ full(t) */ * FROM t WHERE n2 = 19; SELECT last_output_rows, last_cr_buffer_gets, last_cu_buffer_gets FROM v$session s, v$sql_plan_statistics p WHERE s.prev_sql_id = p.sql_id AND s.prev_child_number = p.child_number AND s.sid = sys_context('userenv','sid') AND p.operation_id = 1; LAST_OUTPUT_ROWS LAST_CR_BUFFER_GETS LAST_CU_BUFFER_GETS ---------------- ------------------- ------------------- 40 7 0 DROP TABLE t;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值