トップ «前の日記(2010-03-06) 最新 次の日記(2010-03-08)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2010-03-07

_ truncateは非同期で動くようだ

Oracle11の話だが、次のようなスクリプトを組んでsqlplusで実行したとする。

やりたいことは、table_aを空っぽにしてから大量にインサートすると、インデックスを張ったままだとばかばかしく時間がかかるので、インサート前に空にして、インデックスも消しておこうということだ。

truncate table_a;
drop index table_a_index0;
drop index table_a_index1;
drop index table_a_index2;
insert into table_a select ...;
create index table_a_index0 on table_a (colx);
create index table_a_index1 on table_a (coly);
create index table_a_index2 on table_a (colz);

すると、drop indexが、すべてno wait指定だからビジーでエラーだよ、として弾かれる(ことがある)。

というわけで、truncateをdrop indexより後にしたのだが、sqlplusで何か投げるとすべて同期的な処理(RDBMSとの確定応答方式というか)だと考えていたので、ちょっと意外だった(もっとも、最初にインデックスをドロップしてからトランケートするほうが得な可能性があるから、いずれにしろ、あまり良い順番ではなかったとは言える)。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え