oracle索引的並行
收到一則告警:
In DB index or table:[IDX_PAYMENT_VOUCHER] find parallel , Owner:[CC] ;please rebuild or re-create the object.和oracle的索引相關的,發現了並行,檢查發現這個表的並行為3.
select degree from dba_indexes where index_name=IDX_PAYMENT_VOUCHER;
建索引時,我們為了建索引快,會加上並行,加上並行之後,此列索引就會是並行了。訪問有並行度的索引時,CBO可能可能會考慮並行執行,這可能會引發一些問題,如在伺服器資源緊張的時候用並行會引起更加嚴重的爭用。當使用並行後,需要把並行度改回來。
alter index IDX_PAYMENT_VOUCHER noparallel;
創建索引時候開並行建議使用下列方法:
方法A:create index idx_object_id on t(object_id) parallel 8; --不科學、有隱患 方法B:create /+*parallel(5)*/ index idx_object_id on t(object_id); --建議採用 方法C:create /+*parallel 5 */ index idx_object_id on t(object_id); --效率低下
以上是三種索引並行用法,區別是什麼呢?
方法A創建方法本身不科學,它會修改索引本身並行度,導致執行計劃中產生PX並行操作,切記在OLTP系統中不要這樣使用,很容易引發性能故障。
方法B條是通過hint使用並行,效果相對而言比較高效。
方法C不僅不能提高效率,反而執行特別慢。
推薦閱讀:
※每次登錄mysql都報:無能通過 '/var/lib/mysql/mysql.sock' 登錄
※AWS 是怎麼改寫 MySQL 的?
※Mysql常用操作總結(下)
※MySQL速覽
※分散式系統架構實戰--簡易版支付系統怎麼部署?