日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 大规模 delete,update 操作 注意事项

發(fā)布時(shí)間:2023/12/9 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 大规模 delete,update 操作 注意事项 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

.? 說(shuō)明

?????? 如果對(duì)大表進(jìn)行大規(guī)模的delete update,那么可以注意一下如下說(shuō)明:

?????? 1 查看執(zhí)行計(jì)劃,如果說(shuō)刪除的記錄很多,走索引的成本會(huì)比全表掃描更大,因?yàn)楦聰?shù)據(jù)時(shí)還需要做一些約束校驗(yàn)和創(chuàng)建index entry。而且對(duì)于多CPU 情況,全表掃描還可以使用并行的特性。

????????????? Oracle Parallel Execution(并行執(zhí)行)

????????????? http://blog.csdn.net/tianlesoftware/archive/2010/09/01/5854583.aspx

?????? 2)如果表上有索引,B-Tree 索引可以unusable索引,函數(shù)索引則disable 索引,等操作結(jié)束之后在rebuild索引。

?????? 3)如果是大規(guī)模的delete,那么可能還需要注意一下高水位的問(wèn)題,在允許的情況下,可以用alter table move 來(lái)降低高水位,同時(shí)注意rebuild 索引。

?????? ?????? Oracle 高水位(HWM: High Water Mark) 說(shuō)明

?????? ?????? http://blog.csdn.net/tianlesoftware/archive/2009/10/21/4707900.aspx

?

如果是OLTP的生產(chǎn)環(huán)境,對(duì)于禁用索引和高水位處理的操作要慎重。

?

?

. 相關(guān)測(cè)試

?

--查看表中記錄數(shù)

SYS@dave2(db2)> select count(*) from dave;

? COUNT(*)

----------

?? 3080115

?

--查看索引信息

SYS@dave2(db2)> select index_name from dba_indexes where table_name='DAVE';

?

INDEX_NAME

------------------------------

IDX _PRCODE

IDX _STATE

IDX _INSERT

SYS_C005469

?

--創(chuàng)建一個(gè)備份表,下次使用

SYS@dave2(db2)> create table dave1 as select /*+parallel(t,3)*/ * from dave t;

Table created.

?

--查看執(zhí)行計(jì)劃

SYS@dave2(db2)> explain plan for delete from dave where time_insert<to_date('2011-5-1','yyyy-mm-dd');

?

?

SYS@dave2(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_insert"<to_date('2011-05-01 00:00:00', 'yyyy-mm-dd????????????? hh24:mi:ss'))

?

15 rows selected.

?

--查看走執(zhí)行計(jì)劃的大規(guī)模update 操作

SYS@dave2(db2)> explain plan for update dave d set getcard_code=10 where state=2;

?

?

Explained.

?

SYS@dave2(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("STATE"=2)

?

14 rows selected.

?

--禁用索引

SYS@dave2(db2)> alter index idx_state unusable;

Index altered.

?

SYS@dave2(db2)> select status from dba_indexes where index_name='IDX_STATE';

STATUS

--------

UNUSABLE

--如果是對(duì)進(jìn)行delete 操作,那么相關(guān)的索引要全部禁用才起作用。

?

?

--更新數(shù)據(jù)

SYS@dave2(db2)> update dave d set? state=10 where state=2;

101837 rows updated.

?

SYS@dave2(db2)> commit;

Commit complete.

?

--rebuild 索引

SYS@dave2(db2)> alter index idx_state rebuild;

Index altered.

?

Oracle alter index rebuild 說(shuō)明

http://blog.csdn.net/tianlesoftware/archive/2011/06/12/6538928.aspx

?

?

-- 查看高水位

SYS@dave2(db2)> select num_rows,blocks,empty_blocks from dba_tables where table_name='DAVE';

? NUM_ROWS???? BLOCKS EMPTY_BLOCKS

---------- ---------- ------------

?? 3080115????? 35350??????????? 0

?

num_rows 的值只有做過(guò)統(tǒng)計(jì)信息收集之后才有,如果該值與count(*) 差距太大,就說(shuō)明需要重新進(jìn)行收集了。

?

empty_blocks 參數(shù)只有使用analyze 收集統(tǒng)計(jì)信息才有,使用dbms_stats 收集不到這個(gè)參數(shù)的信息。 如果empty_blocks 較多,就說(shuō)明有高水位了。

?

?

SYS@dave2(db2)> analyze table dave compute statistics;

Table analyzed.

?

SYS@dave2(db2)> select num_rows,blocks,empty_blocks from dba_tables where table_name='DAVE';

? NUM_ROWS???? BLOCKS EMPTY_BLOCKS

---------- ---------- ------------

?? 3080115????? 35350???????? 4585

?

有關(guān)統(tǒng)計(jì)信息更多內(nèi)容參考:

?????? Oracle Statistic 統(tǒng)計(jì)信息 小結(jié)

?????? http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668723.aspx

?

--處理高水位

SYS@dave2(db2)> alter table dave move;

Table altered.

?

--move 會(huì)使所有索引失效,需要重新rebuild

SYS@dave2(db2)> select index_name,status from dba_indexes where table_name='DAVE';

INDEX_NAME???????????????????? STATUS

------------------------------ --------

IDX_PRCODE???????????????????? UNUSABLE

IDX_STATE ?????????????????????UNUSABLE

IDX_INSERT???????????????????? UNUSABLE

SYS_C005469??????????????????? UNUSABLE

?

--rebuild 索引

SYS@dave2(db2)> alter index IDX_PRCODE rebuild;

Index altered.

?

SYS@dave2(db2)> alter index IDX_STATE rebuild;

Index altered.

?

SYS@dave2(db2)> alter index idx_insert rebuild;

Index altered.

?

SYS@dave2(db2)> alter index SYS_C005469 rebuild;

Index altered.

?

SYS@dave2(db2)> select index_name,status from dba_indexes where table_name='DAVE';

?

INDEX_NAME???????????????????? STATUS

------------------------------ --------

IDX_PRCODE???????????????????? VALID

IDX_STATE????????????????????? VALID

IDX_INSERT???????????????????? VALID

SYS_C005469??????????????????? VALID

?

-- 使用analyze 分析表

SYS@dave2(db2)>? analyze table dave compute statistics;

Table analyzed.

?

SYS@dave2(db2)> select num_rows,blocks,empty_blocks from dba_tables where table_name='DAVE';

?

? NUM_ROWS???? BLOCKS EMPTY_BLOCKS

---------- ---------- ------------

?? 3080115????? 35487???????? 4448

?

因?yàn)槲疫@里沒(méi)有進(jìn)行大量的delete 操作,效果很有限。

?

?

?

?

-------------------------------------------------------------------------------------------------------

Blog http://blog.csdn.net/tianlesoftware

Email: dvd.dba@gmail.com

DBA1 群:62697716(滿);?? DBA2 群:62697977(滿)?? DBA3 群:62697850(滿)??

DBA 超級(jí)群:63306533(滿);? DBA4 群: 83829929? DBA5群: 142216823???

DBA6 群:158654907? 聊天 群:40132017?? 聊天2群:69087192

--加群需要在備注說(shuō)明Oracle表空間和數(shù)據(jù)文件的關(guān)系,否則拒絕申請(qǐng)

轉(zhuǎn)載于:https://www.cnblogs.com/spring3mvc/archive/2011/06/25/2414594.html

總結(jié)

以上是生活随笔為你收集整理的Oracle 大规模 delete,update 操作 注意事项的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。