深圳购物商城网站设计,大型交流论坛平台有哪些,2020电商网站排行榜,旅游电子商务网站的建设一. 说明 如果对大表进行大规模的delete 和update#xff0c;那么可以注意一下如下说明#xff1a; #xff08;1#xff09; 查看执行计划#xff0c;如果说删除的记录很多#xff0c;走索引的成本会比全表扫描更大#xff0c;因为更新数据时还需要做一些约束校验和创… 一. 说明 如果对大表进行大规模的delete 和update那么可以注意一下如下说明 1 查看执行计划如果说删除的记录很多走索引的成本会比全表扫描更大因为更新数据时还需要做一些约束校验和创建index entry。而且对于多CPU 情况全表扫描还可以使用并行的特性。 Oracle Parallel Execution(并行执行) http://blog.csdn.net/tianlesoftware/archive/2010/09/01/5854583.aspx 2如果表上有索引B-Tree 索引可以unusable索引函数索引则disable 索引等操作结束之后在rebuild索引。 3如果是大规模的delete那么可能还需要注意一下高水位的问题在允许的情况下可以用alter table move 来降低高水位同时注意rebuild 索引。 Oracle 高水位(HWM: High Water Mark) 说明 http://blog.csdn.net/tianlesoftware/archive/2009/10/21/4707900.aspx 如果是OLTP的生产环境对于禁用索引和高水位处理的操作要慎重。 二. 相关测试 --查看表中记录数 SYSdave2(db2) select count(*) from dave; COUNT(*) ---------- 3080115 --查看索引信息 SYSdave2(db2) select index_name from dba_indexes where table_nameDAVE; INDEX_NAME ------------------------------ IDX _PRCODE IDX _STATE IDX _INSERT SYS_C005469 --创建一个备份表下次使用 SYSdave2(db2) create table dave1 as select /*parallel(t,3)*/ * from dave t; Table created. --查看执行计划 SYSdave2(db2) explain plan for delete from dave where time_insertto_date(2011-5-1,yyyy-mm-dd); SYSdave2(db2) select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Plan hash value: 2615685836 --------------------------------------------------------------------------- | id | operation | name | rows | bytes | cost (%cpu)| time | --------------------------------------------------------------------------- | 0 | delete statement | | 1369k| 26m| 7916 (3)| 00:01:35 | | 1 | delete | dave | | | | | |* 2 | table access full| dave | 1369k| 26m| 7916 (3)| 00:01:35 | --------------------------------------------------------------------------- Predicate Information (identified by operation id): PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- --------------------------------------------------- 2 - filter(time_insertto_date(2011-05-01 00:00:00, yyyy-mm-dd hh24:mi:ss)) 15 rows selected. --查看走执行计划的大规模update 操作 SYSdave2(db2) explain plan for update dave d set getcard_code10 where state2; Explained. SYSdave2(db2) select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Plan hash value: 3706120077 ------------------------------------------------------------------------------- | id | operation | name | rows | bytes | cost (%cpu)| time | ------------------------------------------------------------------------------- | 0 | update statement | | 96254 | 469k| 2533 (1)| 00:00:31 | | 1 | update | dave | | | | | |* 2 | index range scan| idx_state | 96254 | 469k| 194 (2)| 00:00:03 | ------------------------------------------------------------------------------- Predicate Information (identified by operation id): PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- --------------------------------------------------- 2 - access(STATE2) 14 rows selected. --禁用索引 SYSdave2(db2) alter index idx_state unusable; Index altered. SYSdave2(db2) select status from dba_indexes where index_nameIDX_STATE; STATUS -------- UNUSABLE --如果是对进行delete 操作那么相关的索引要全部禁用才起作用。 --更新数据 SYSdave2(db2) update dave d set state10 where state2; 101837 rows updated. SYSdave2(db2) commit; Commit complete. --rebuild 索引 SYSdave2(db2) alter index idx_state rebuild; Index altered. Oracle alter index rebuild 说明 http://blog.csdn.net/tianlesoftware/archive/2011/06/12/6538928.aspx -- 查看高水位 SYSdave2(db2) select num_rows,blocks,empty_blocks from dba_tables where table_nameDAVE; NUM_ROWS BLOCKS EMPTY_BLOCKS ---------- ---------- ------------ 3080115 35350 0 num_rows 的值只有做过统计信息收集之后才有如果该值与count(*) 差距太大就说明需要重新进行收集了。 empty_blocks 参数只有使用analyze 收集统计信息才有使用dbms_stats 收集不到这个参数的信息。 如果empty_blocks 较多就说明有高水位了。 SYSdave2(db2) analyze table dave compute statistics; Table analyzed. SYSdave2(db2) select num_rows,blocks,empty_blocks from dba_tables where table_nameDAVE; NUM_ROWS BLOCKS EMPTY_BLOCKS ---------- ---------- ------------ 3080115 35350 4585 有关统计信息更多内容参考 Oracle Statistic 统计信息 小结 http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668723.aspx --处理高水位 SYSdave2(db2) alter table dave move; Table altered. --move 会使所有索引失效需要重新rebuild SYSdave2(db2) select index_name,status from dba_indexes where table_nameDAVE; INDEX_NAME STATUS ------------------------------ -------- IDX_PRCODE UNUSABLE IDX_STATE UNUSABLE IDX_INSERT UNUSABLE SYS_C005469 UNUSABLE --rebuild 索引 SYSdave2(db2) alter index IDX_PRCODE rebuild; Index altered. SYSdave2(db2) alter index IDX_STATE rebuild; Index altered. SYSdave2(db2) alter index idx_insert rebuild; Index altered. SYSdave2(db2) alter index SYS_C005469 rebuild; Index altered. SYSdave2(db2) select index_name,status from dba_indexes where table_nameDAVE; INDEX_NAME STATUS ------------------------------ -------- IDX_PRCODE VALID IDX_STATE VALID IDX_INSERT VALID SYS_C005469 VALID -- 使用analyze 分析表 SYSdave2(db2) analyze table dave compute statistics; Table analyzed. SYSdave2(db2) select num_rows,blocks,empty_blocks from dba_tables where table_nameDAVE; NUM_ROWS BLOCKS EMPTY_BLOCKS ---------- ---------- ------------ 3080115 35487 4448 因为我这里没有进行大量的delete 操作效果很有限。 ------------------------------------------------------------------------------------------------------- Blog http://blog.csdn.net/tianlesoftware Email: dvd.dbagmail.com DBA1 群62697716(满); DBA2 群62697977(满) DBA3 群62697850(满) DBA 超级群63306533(满); DBA4 群 83829929 DBA5群 142216823 DBA6 群158654907 聊天 群40132017 聊天2群69087192 --加群需要在备注说明Oracle表空间和数据文件的关系否则拒绝申请转载于:https://www.cnblogs.com/spring3mvc/archive/2011/06/25/2414594.html