アプリケーション使用中にインデックス再構築を複数プロセスで実行する方法
これは InterSystems FAQ サイトの記事です。
%IndexBuilder クラスを使用して、複数プロセスを利用してインデックス再構築を行うことができます。
Sample.Person の Home_State(連絡先住所の州情報)カラムに対して標準インデックス HomeStateIdx を定義する目的での例で記載します。
手順は以下の通りです。
1、追加/再構築予定のインデックス名をクエリオプティマイザから隠します。
>write $system.SQL.SetMapSelectability("Sample.Person","HomeStateIdx",0)
1
1
2、新インデックスを定義するクラス定義のスーパークラスに %IndexBuilder を一番右端に追加します。
///クラス定義文は以下の通りです(一番右端に追加します)
Class Sample.Person Extends (%Persistent, %Populate, %XML.Adaptor, %Library.IndexBuilder)
Class Sample.Person Extends (%Persistent, %Populate, %XML.Adaptor, %Library.IndexBuilder)
3、クラス定義の INDEXBUILDERFILTER パラメータに再構築予定のインデックス名を登録します。
Index HomeStateIdx On Home.State;
Parameter INDEXBUILDERFILTER = "HomeStateIdx";
Parameter INDEXBUILDERFILTER = "HomeStateIdx";
4、クラスをコンパイルします。
5、%ConstructIndicesParallel() メソッドを使用して、並列処理でインデックスの再構築を行います。
set st=##class(Sample.Person).%ConstructIndicesParallel()
6、インデックス再構築が終わったら、追加したインデックスをオプティマイザに公開します。
>write $system.SQL.SetMapSelectability("Sample.Person","HomeStateIdx",1)
1
1
詳細は以下ドキュメントをご参照ください。