これまで Caché のリソースアクセスを制御する方法が存在するかどうかを疑問に思っていた方の悩みを解決しました。 バージョン 2014.2 では、開発者がセマフォを操作できるようにする特別なクラスが追加されました。
特定の問題をエレガントまたは異常な方法で解決するためのInterSystems テクノロジーの一連の経験。
これまで Caché のリソースアクセスを制御する方法が存在するかどうかを疑問に思っていた方の悩みを解決しました。 バージョン 2014.2 では、開発者がセマフォを操作できるようにする特別なクラスが追加されました。
これは InterSystems FAQ サイトの記事です。
INFORMATION_SCHEMA スキーマを使用して取得できます。
INFORMATION_SCHEMA はシステム用スキーマのため、デフォルトでは管理ポータルの SQL メニューに表示されません。
表示させる方法は以下の通りです。
.png)
指定のテーブル(Test.Person)に対するID、フィールド名(COLUMN_NAME)、データタイプ(DATA_TYPE)、説明(DESCRIPTION)を取得するSQLは以下の通りです。
SELECT ID,COLUMN_NAME,DATA_TYPE,DESCRIPTION
FROM INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA='Test' AND TABLE_NAME='Person'関連するFAQトピックもご参照ください:「プログラムから、クラス定義に記述されたプロパティ定義を取得する方法はありますか?」
これは InterSystems FAQ サイトの記事です。
SYS.ApplicationError クラスの ErrorList クエリを使用します。
注意1:%SYS ネームスペースで実行します。
注意2:ストアド化していないユーティリティのため %SQL.Statement ではなく %ResultSet クラスを利用します。
コマンド実行例は以下の通りです。
USER>set $namespace="%SYS" //または zn "%SYS"
%SYS>set rset=##class(%ResultSet).%New()
%SYS>set rset.ClassName="SYS.ApplicationError"
%SYS>set rset.QueryName="ErrorList"
// クエリの第1引数はネームスペース名、第2引数は日付を指定します(形式:MM/DD/YYYY)
%SYS>do rset.Execute("USER","08/17/2020")
// 画面に結果を表示させる場合は %Display()メソッドを実行します。
%SYS>do rset.これは InterSystems FAQ サイトの記事です。
永続クラス(=テーブル)定義に提供される %BuildIndices() メソッドの引数に、インデックスを再構築したい ID の開始値と終了値を指定することにより、その範囲内のインデックスのみが再構築できます。
例えば、Sample.Person クラスにある NameIDX インデックスと ZipCode インデックスを ID=10~20 のみ再構築する場合は、以下のように実行します(ID の範囲は、第5引数、第6引数に指定してます)。
set status = ##class(Sample.Person).%BuildIndices($LB("NameIDX","ZipCode"),1,,1,10,20) $LB() は $ListBuild() 関数で、%BuildIndices() メソッドでは、インデックス名を指定するために使用しています。
インデックスの再構築方法については、ドキュメントもご参照ください。
2018.1 以下はこちらのドキュメントをご参照ください。
これは InterSystems FAQ サイトの記事です。
※ ここで説明するバックアップ方法は、外部バックアップ(##class(Backup.General).ExternalFreeze()を使用する方法)ではご利用いただけません。
その1(差分)
毎週日曜日1時にフルバックアップ、月曜日~土曜日の1時に差分バックアップを取得しているとします。
差分バックアップは、前日の1時に取得したバックアップからの更新ブロックが含まれるバックアップです。
.png)
その2(累積)
毎週日曜日1時にフルバックアップ、月~火曜日の1時に差分バックアップ、水曜日1時に累積バックアップ、木~土曜日の1時に差分バックアップを取得するとします。
累積バックアップは、前回のフルバックアップからの更新ブロックが含まれるバックアップで、水曜日に累積バックアップを取得した場合、月曜日と火曜日の差分バックアップは水曜日に累積バックアップに含まれるため、累積バックアップ成功後、月曜日と火曜日に差分バックアップは破棄できます。
.png)
オンラインバックアップ詳細については「データベースのバックアップ方法について」や、下記ドキュメントをご参照ください。
これは InterSystems FAQ サイトの記事です。
管理ポータル:システムオペレーション > データベース にあるオプションボタン(ラジオボタン)「空き容量ビュー」で表示される内容は、システムクラス SYS.Database のFreeSpace クエリで取得可能です。
次のようなコードでクエリを実行します。
例:
(%SYSネームスペースにて作成、実行します)
/// ZISJ.mac
Set stmt=##class(%SQL.Statement).%New()
Set status=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
Set rs=stmt.%Execute()
While rs.%Next() {
Write !
For i=1:1:9 {
Write rs.%GetData(i),","
}
}
もしくは、以下のようにも行えます。
/// ZISJ.mac
Set stmt=##class(%SQL.Statement).%New()
Set status=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
Set rs=stmt.%Execute()
Do rs.これは InterSystems FAQ サイトの記事です。
%SYS.ProcessQuery クラスの AllFields クエリを使用すると取得できます。
詳細は、ドキュメント「プロセス(ジョブ)について【IRIS】 / プロセス(ジョブ)について」もご参照ください。
ターミナルでの実行例は以下の通りです。
USER>set stmt=##class(%SQL.Statement).%New()
USER>set st=stmt.%PrepareClassQuery("%SYS.ProcessQuery","AllFields")
USER>write st // 1が戻ったら%Execute()を実行できます
1
USER>set rset=stmt.%Execute()
// Job番号-PID-OSユーザ名-カレントデバイス-ルーチン-状態-ユーザ名 を表示しています。
USER>while rset.%Next() { write rset.%Get("JobNumber"),"-",rset.%Get("Pid"),"-",rset.%Get("OSUserName"),"-",rset.%Get("CurrentDevice"),"-",rset.%Get("Routine"),"-",rset.%Get("State"),"-",rset.これは InterSystems FAQ サイトの記事です。
データベースキャッシュおよびルーチンキャッシュをモニターし、最適値を調べる方法をご紹介します。
(1) データベースキャッシュ
現状の設定値で問題ないかは、^GLOSTAT ユーティリティ のCache Efficency値(キャッシュ効率)でモニターします。
Cache Efficiency 値は大きければ大きいほど良いですが、目安として100 以上であれば、設定サイズは問題ありません。
実行例)
これは InterSystems FAQ サイトの記事です。
「特権ルーチンアプリケーション」を使用し、コード中に $system.Security.AddRoles()メソッドを使用してロールを付与する仕組みを利用します。
※ロールベースで必要な特権を付与するため、予め特定の特権を持ったロールを作成する必要があります。
詳細は、以下ドキュメントをご参照ください。
特権ルーチン・アプリケーション【IRIS】
特権ルーチン・アプリケーションについて
例えば、特定ルーチン(またはクラスメソッド)実行時のみデータベースの更新を許可するための設定は、以下のとおりです。
(接続するデータベースに対してはREAD許可だけを持ち、あるルーチン実行時のみデータベースに対するREAD/WRITE許可を持つように設定します。)
1) データベース:Aのリソース定義を確認する
データベース:Aのリソースに %DB_%DEFAULT が設定されている場合は、独自リソースを作成します。
これは InterSystems FAQ サイトの記事です。
以下例のクラスメソッド getLatestID() のように ObjectScript のクラスメソッドを用意します。
返したい値を戻り値に指定し、SQLストアドプロシージャ(SqlProc)キーワードを指定するだけで値が返せます。
ClassMethod getLatestID() As %Integer [ SqlName = getLatestID, SqlProc ]
{
set latestID=$Order(^ISJ.TestClass1D(""),-1)
quit latestID
}操作を試す場合は、以下のクラス定義をご準備ください。
Class ISJ.TestClass1 Extends (%Persistent, %Populate)
{
Property name As %String;
ClassMethod getLatestID() As %Integer [ SqlName = getLatestID, SqlProc ]
{
set latestID=$Order(^ISJ.これは InterSystems FAQ サイトの記事です。
XMLファイルの内容を格納する永続クラス定義を作成し、%XML.Adaptor を追加で継承します。
例は以下の通りです(右端の %XML.Adaptorクラスを追加で継承します)。
Class ISJ.Class1 Extends (%Persistent, %Populate, %XML.Adaptor)次に、%XML.Reader クラスを使用して格納先のインスタンスへ、タグとクラスの関連付け(Correlate())を行い、reader.Next() でXMLを取り込みます。
set sc=reader.OpenFile(filename)
do reader.Correlate(tag,class)
while reader.Next(.x,.sc) { do x.%Save() } サンプルコードは以下の通りです。
Class ISJ.Class1 Extends (%Persistent, %Populate, %XML.これは InterSystems FAQ サイトの記事です。
システムのパフォーマンスが低下した場合、OSやインターシステムズ製品の様々なツールを使用して情報収集を行い
”通常時と比較して、どこがどの程度変わっているか”
を確認することで、問題のある箇所を特定できます。
(逆に、通常時の状況が不明な場合、パフォーマンス問題点の切り分けが非常に困難となる場合もあります。)
いざ という時に備え、通常時のパフォーマンスを確認することは、大変重要な情報となります。
収集情報詳細は、以下のドキュメントをご参照ください。
ガイド内でご紹介しているサンプルは、https://github.com/Intersystems-jp/performance-sample からダウンロードいただけます。
パフォーマンス低下時の情報収集ツールについては、以下の関連FAQトピックをご参照ください。
これは InterSystems FAQ サイトの記事です。
※こちらの方法は、ミラーリング、シャドウイング、またはその他のメカニズムを使用して複製したデーターベースを比較したい場合に利用します。
グローバル変数の比較には、DATACHECKユーティリティを利用できます。以下ドキュメントをご参照ください。
DataCheckの概要【IRIS】
DATACHECK ユーティリティの実行サンプルは、添付のPDFをご覧ください。
***
ルーチンの比較は、システムルーチン %RCMP か、管理ポータルを使用します。
以下は、管理ポータルでの使用方法になります。
例えば、以下ルーチンがUSERネームスペースにあるとします。
以下ルーチンがUSER2ネームスペースにあるとします。
以下は、USERネームスペースに接続したターミナルで %RCOM を実行した結果になります。
※ Compare: にルーチン名を記述し、 with: に比較したいルーチン名を記載します。
別ネームスペースにあるルーチンを指定する場合は |"ネームスペース名"|ルーチン名.MAC で指定します。
これは InterSystems FAQ サイトの記事です。
%SYS.Journal.File クラスの ByTimeReverseOrder クエリ と %SYS.Journal.Record クラスの List クエリを使用して検索することができます。
それぞれのクエリの役割は以下の通りです。
ジャーナルファイル名を取得できます。ジャーナルファイル名の降順で結果が返ります。
USER>set stmt=##class(%SQL.Statement).%New()
USER>set status=stmt.%PrepareClassQuery("%SYS.Journal.File","ByTimeReverseOrder")
USER>set rs=stmt.%Execute()
USER>while rs.%Next() { write rs.%Get("Name"),! }
c:\intersystems\irishcom\mgr\journal\20230725.002
c:\intersystems\irishcom\mgr\journal\20230725.これは InterSystems FAQ サイトの記事です。
システム提供の %SYS.GlobalQueryクラス の Size クエリーを使用することで取得できます。
2026/3/31 更新:%SQL.Statementクラスの利用方法を追加+サブスクリプトのサイズ取得方法を追記しました。
使用例は、以下のサンプルコードをご参照ください。
※カラムやパラメータの指定はクラスリファレンスをご確認ください。
%SQL.Statementクラス(推奨方法)を利用して実行する例は以下の通りです。
set dir="/usr/irissys/mgr/user" // データベースディレクトリ
set stmt=##class(%SQL.Statement).%New()
set status=stmt.%PrepareClassQuery("%SYS.GlobalQuery","Size")
write status // 1が戻れば実行できます。
set rset=stmt.%Execute(dir)
while rset.%Next() {
write rset.%Get("Name"),"-",rset.%Get("Used MB"),!デバッガーは使わないという人はいますか? 最後に使ったのはいつだったか、記憶にないですね。 それは、嫌いだからではなくて、単に必要ないからなんです。 その一番の理由は、ある種の開発手法を使っているおかげで、バグの発生を少なく抑えたり、単体テストのレベルで発見したり、バグをとても簡単に追跡できたりするからです。
以下にいくつかヒントを紹介します...
1. 独自の COS チートシートを作成する。
これは主に COS の初心者が対象になります。 バグを引き起こす大きな原因の一つとして、特定のコマンドや関数の動作を理解していないということがあります。 時間をかけて言語を学び、そのすべてのバリエーションを試すことをおすすめします。 それから独自のチートシートを作成することで、知識が固まり、さっと使えるレビューツールも出来上がります。 生産性アップにつながるほか、避けられるはずのバグをうっかり書いてしまう頻度を確実に減らすことができます。
2. スタジオで「変数の追跡」をオンにする
まだオンにしていない方は、スタジオの 「 ツール 」「 オプション 」メニューにて、「 環境」フォルダの「クラス」と順に移動し、「変数を追跡する」のチェックボックスにチェックを入れてください。 宣言時に初期化されていない変数を使用する場合は、その変数の下に波線が引かれます。
これは InterSystems FAQ サイトの記事です。
$ZSTRIP() 関数を使用します。
この関数を使用すると、指定文字列から、文字のタイプと文字を削除できます。
下記の例のように、第2引数で、"<"、">"、"<>"を指定することにより、SQLのLTRIM、RTRIM、TRIM関数と同等の処理が可能になります。
これは InterSystems FAQ サイトの記事です
Web サービス(SOAP)またはREST で IIS を経由してクライアントにエラー応答する際、既定では IISが生成するデフォルトのエラーページ( HTTP 500 エラー)が返されます。
SoapFaultなど、サーバ側で出力したエラーの詳細情報は返されません。
IIS7 以降、WebクライアントがWeb サービスの障害の詳細情報を取得するための設定オプションが追加されました。
HTTP ステータスコードがエラーの場合に、既存の応答をどうするかを existingResponse 属性で指定することができます。
こちらの値を、既定の Auto から PassThrough に変更することで、エラーの詳細情報が返されるように変更できます。
※設定変更後、IISの再起動が必要です。
詳細や設定手順については、以下ドキュメントをご参照ください。
Microsoft IIS 7 以降の設定手順について【IRIS】
※web.config ファイルの手動編集よりも、IIS マネージャに組み込まれている構成エディタ を使用する方法がエラーが少なく安全です。
これは InterSystems FAQ サイトの記事です
揮発性テーブル(多数のINSERT、DELETEが行われるテーブル)では、ビットマップ・インデックス用ストレージは徐々に効率が低下する可能性があります。
例えば、以下の定義からなるデータが数千件あり、一定期間保持した後 TRUNCATE TABLE で一括削除を行うオペレーションが繰り返し行われているとします。
Class MyWork.MonthData Extends (%Persistent, %Populate)
{
/// 満足度
Property Satisfaction As %String(VALUELIST = ",満足,やや満足,やや不満,不満,");
/// 年齢
Property Age As %Integer(MAXVAL = 70, MINVAL = 20);
Index AgeIdx On Age [ Type = bitmap ];
}INSERT によってできたビットマップ・インデックスのストレージのイメージ(一部)は以下の通りです。
【INSERT時】
^MyWork.MonthDataI("AgeIdx",20,1) = $zwc(401,120,4,75,102,10,<省略> 958)/*$bit(5,76,103,107・・・
^MyWork.これはInterSystems FAQ サイトの記事です。
選択性(または Selectivity)の数値とは、カラムに対するユニークデータの割合を示す数値です。
例) Person テーブルの個別値である PID カラム、住所のうち都道府県名が入る Pref カラム
Pref カラムの選択性 = 約 2%
PID カラム(ユニーク属性のカラム)の選択性 = 1
InterSystems製品のクエリオプティマイザは、クエリ実行経路(プラン)とインデックスの選択を決定するため、エクステントサイズ(テーブル内のレコード数)と選択性の数値を使用します。
詳細は下記ドキュメントページをご参照ください。
なお、選択性の数値は、テーブル単位に計算するまで設定されていません。
計算方法については関連トピックをご参照ください。
【関連情報】(コミュニティ/FAQトピックをリンクしています)
Windows と Mac で InterSystems IRIS 2019.1 (および 2018.1.2) の SSL/TLS 設定に認証局 (CA) の証明書を簡単に追加する新しい方法ができました。 IRIS にオペレーティングシステムの証明書ストアを使用することを要求するために、
%OSCertificateStore
を "信頼された証明書機関 X.509 証明書を含むファイル" のフィールドに入力します。 以下はポータルでそれを実行する方法を示した画像です。

また、これについて説明したドキュメントへのリンクはこちらです。 "信頼された証明書機関の証明書を含むファイル" のオプションの中を探してください。
必要な操作はこれだけです! これで、OS 証明書ストアに載っているすべての CA の証明書をこの設定に使用することができます。
今回は、InterSystems IRIS に特有のことではなく、職場で Windows 10 Pro または Enterprise を搭載した PC またはノートパソコンがサーバーとして使用されている環境で Docker を使用する場合に重要と思われる点について触れたいと思います。
ご存知かと思いますが、コンテナテクノロジーは基本的に Linux の世界で生まれ、最近では Linux のホストで使用されており、その最大のポテンシャルを伺わせています。 Windows を普段から使用するユーザーの間では、Microsoft と Docker 両社によるここ数年の重大な試みにより、Windows のシステムで Linux イメージを基にコンテナを実行することがとても簡単になったと理解されています。しかし、生産システムでの使用がサポートされておらず、それが大きな問題となっています。特に、Windows と Linux のファイルシステムに大きな違いがあるため、安心してホストシステム内でコンテナの外に持続データを保管するということができないのです。 ついには、コンテナを実行するために、_Docker for Windows _自体で Linux の小さな仮想マシン (MobiLinux) が使用されるようになり、Windows ユーザーに対しては透過的に実行されます。また、先ほど述べたように、データベースの存続がコンテナよりも短くて構わないのであれば、パーフェクトに動作します。
では、何が言いたいかというと、問題を回避して処理を単純化するには、完全な Linux システムが必要になるが、Windows ベースのサーバーを使用していると、仮想マシンを使用する以外に方法がない場合が多い、ということです。 少なくとも、Windows の WSL2 がリリースされるまでの話ですが、それはまた別の機会に触れたいと思います。もちろん、十分堅牢に動作するまでは時間がかかるでしょう。
この記事では、必要に応じて、Windows サーバーの Ubuntu システムで Docker コンテナを使用できる環境をインストールする方法について分かりやすく説明します。 それでは、始めましょう。
これはInterSystems FAQ サイトの記事です。
%SYSTEM.SQL クラスの Purge* メソッドを使用して削除することが可能です。
※各メソッドの詳細は、以下ドキュメントをご参照ください。
①システム内のすべてのクエリキャッシュを削除する場合
Do $SYSTEM.SQL.PurgeAllNamespaces()
②ネームスペース内のクエリキャッシュを削除する場合
// ネームスペース内のすべてのクエリキャッシュを削除する
Do $SYSTEM.SQL.Purge()
// 日付指定してクエリキャッシュを削除する場合
// 以下は、過去30日間に使用されていないクエリキャッシュを削除
Do $SYSTEM.SQL.Purge(30)
③クエリキャッシュを指定して削除する場合
Do $SYSTEM.SQL.PurgeCQClass("%sqlcq.USER.cls13")
④特定テーブルのクエリキャッシュを削除する場合
Do $SYSTEM.SQL.PurgeForTable("MedLab.Patient")
これはInterSystems FAQ サイトの記事です
%ZSTARTルーチンを インスタンス開始時に起動しないように構成設定用ファイルを手動で変更します。
【注意】
インスタンスの起動環境の変更は、通常管理ポータルで行うものなので、以下に説明する方法は、%ZSTART の SYSTEM ラベルの動作を無効化する方法以外では利用しないようにしてください(別のパラメータを誤って修正してしまった場合、起動できなくなる可能性がありますのでご注意ください)。
1. インスタンス のインストールディレクトリ以下にある構成設定用ファイル(cache.cpf/iris.cpf)をテキストエディタで開きます。
※構成ファイルは、事前にバックアップ(コピー)していただくことを推奨します。
2. [Startup]セクションにあるSystemStartの値を0に変更し、保存します。
3. ファイル変更後、一旦 インスタンスを通常の方法で停止し、再度開始してください。
SystemStart パラメータの詳細については、下記ドキュメントについてもご参照ください。
パラメータ・ファイル・リファレンス_SystemStart【IRIS】
これは、InterSystems FAQサイトの記事です。
$SYSTEM.Process.TerminalPrompt() を使用してターミナルのプロンプトを変更できます。
プロンプトの表示形式は、以下情報の組み合わせで指定できます。
例えば、Do $SYSTEM.Process.TerminalPrompt(1,3) ではホスト名と構成名をターミナルのプロンプトとして表示します。
*実行例は、ホスト名="HOST1"、構成名="IRIS"*
USER>Do $SYSTEM.Process.TerminalPrompt(1,3) HOST1:IRIS>
これは、InterSystems FAQサイトの記事です。
SELECT ... FOR UPDATE は明示的な行ロック取得の方法として多くの RDBMS で実装されているため、この機能を使われているケースも多いと思います。
このシンタックスは InterSystems 製品ではエラーにはなりませんが、期待されるような行ロックの取得は行われません。
この記事では同等の機能を実現する方法をご紹介します。
DECLARE CURSOR C1 IS SELECT Name FROM Person WHERE Name LIKE 'A%' FOR UPDATE OPEN C1 LOOP FETCH C1 INTO name ... name を表示 ... 終了ならLOOPをEXIT END LOOP CLOSE C1
上記のようなSQL文は、下記のSQL文で代替可能です。
これはInterSystems FAQ サイトの記事です。
InterSystemsの製品には同時ユーザー数でライセンスの容量を決定する製品とサーバーのCPUコア数で容量を決定する製品の2種類があります。
同時ユーザー数ライセンスタイプの場合、CPUコア数により使用可能なライセンスのグレードに制限があります。
物理サーバーの場合には、そのサーバーが保持しているCPUコア数の総数をカウントします。
そして、その総数が該当グレードの最大CPUコア数を超えている場合には、その上位グレードを使用しなければなりません。
サーバー仮想化ソフトウェア(VMWare、Hyper-Vなど)を利用する場合には、その仮想サーバーに割り当てられたCPUコア数をカウントします。
同様にその総数が該当グレードの最大CPUコア数を超えている場合には、その上位グレードを使用しなければなりません。
CPUコア数ライセンスタイプの場合、コア数によりライセンスの容量が決まります。
CPUコア数の数え方は、同時ユーザーライセンスタイプと同じです。
物理サーバーの場合は、そのサーバーが保持しているCPUコア数の総数をカウントします。
サーバー仮想化ソフトウェアを利用する場合には、その仮想サーバーに割り当てられたCPUコア数をカウントします。
これは、InterSystems FAQサイトの記事です。
以下に当てはまる場合、差分バックアップではなくフルバックアップが取られます。
・リストの中に1つでもフルバックアップを取っていないデータベース(DB)が含まれるとき
・リストの中に読み込み専用のDBが含まれるとき
→読込専用DBはバックアップが取れないため、対象リストのDBは毎回フルバックアップが取られます
ReadOnlyマウントしたDBをバックアップしようとすると、以下のようなログが出力されます。
WARNING - the following directories could not be backed up c:\intersystems\ensemble\mgr\xxx\ (Database is readonly)
読込専用DBはバックアップリストから除く必要があります。
もし、読込専用DBをバックアップする場合は、別途バックアップする必要があります。
これは InterSystems FAQ サイトの記事です。
管理ポータルから行う手動のパージ(Purge)と、タスクを利用する方法があります。
データを手動でパージするには、[Interoperability] > [管理] > [管理データの削除] ページを使用します。
(このページではバックグラウンド・ジョブとしてパージを実行しますので、ページがタイムアウトしても問題ありません。)
タスクでパージする場合は、[システムオペレーション] > [タスクマネージャ] > [新しいタスク] の画面でInteroperabilityプロダクションのネームスペースを指定し、タスクタイプに「Ens.Util.Tasks.Purge」を指定します。
タスクの場合は、「TypesToPurge」の項目で以下のパージ対象タイプを選択できます(図参照)。
.png)
詳細は、以下のドキュメントをご参照ください。
これはInterSystems FAQ サイトの記事です。
インデックスが複数定義されているクラス/テーブルへ csv 形式等のシーケンシャルファイルから大量データをデータベースに登録する際、推奨される登録方法として、データ登録時インデックスを生成させず、登録完了後に一括でインデックスを生成する 方法があります。
この方法は、新規に大量のレコードを一括登録する際に最も有効な手段となります。
<メモ>
大量のデータを追加登録する際には、既存のデータ量と新規データ量のバランスにより、この手法が有効でないケースもあります。その場合は、インデックスの再構築を範囲指定で行うこともできます。
説明に使用するクラス定義例は以下の通りです。
Class ISJ.