キャッシュメンテナンスタスク¶
「キャッシュメンテナンスタスク」は以下の処理を実行します。
各ビューのキャッシュデータを保持しているテーブルから無効な行または期限切れの行を削除します。
ユーザーが行を無効化するステートメントを実行すると、その行は Virtual DataPort によって無効とマークされます。つまり
ALTER TABLE CACHE INVALIDATE...
またはSELECT ... CONTEXT('cache_invalidate'...)
を実行した場合です。行は、有効時間が経過すると期限切れになります。
無効とマークされるか、有効時間が経過した行は、実際にデータベースから削除されるわけではありません。行はキャッシュに存在していますが、ビューに対してクエリを実行しても、その行はキャッシュから取得されません。ただし、無効な行や期限切れの行が多すぎると、キャッシュをヒットするクエリのパフォーマンスに影響を及ぼす可能性があるため、キャッシュメンテナンスタスクを定期的に実行することが重要です。
CREATE TEMPORARY TABLE
ステートメントの結果として作成されて、期限が切れたテーブルを削除します。一時テーブルのデフォルトの有効期間は 48 時間です。一時テーブルの詳細については、『VQL ガイド』の「 一時テーブル 」を参照してください。期限切れの「クエリパターン」を削除します。クエリパターンは、キャッシュデータベースの
vdb_cache_querypattern
テーブルに保存されています。
注釈
本番環境では、[Maintenance] オプションを [Off] に設定して、定期的にキャッシュメンテナンスタスクを実行しないようにすることが強く推奨されます。代わりに、Denodo Scheduler を使用して、サーバーとキャッシュデータベースの負荷が高くないことが予想される時間帯に CLEAN_CACHE_DATABASE
を実行するようにプログラムします。
このタスクは、実行されるたびに、デフォルトでキャッシュデータベースの各テーブルから最大 1,000 万行を削除します。その際、1 回の DELETE
ステートメントで削除するのではなく、複数回の DELETE
ステートメントをループで実行します。各キャッシュテーブルに対して DELETE
ステートメントを 1 回実行し、最大 10 万行を削除します。さらに多くの行が存在する場合、同じステートメントを最大で 100 回繰り返し実行します。
1 回の DELETE
ステートメントですべての行を無効化しないのは、データベースのトランザクションログがいっぱいになるのを避けるためです。このタスクでテーブルから大量の行を削除する必要がある場合、トランザクションログがいっぱいになる可能性があります。
このタスクを 1 回実行したときに各テーブルから削除する行数を増やすには、各テーブルで実行する DELETE
ステートメントの回数を増やします。これを行うには、VQL シェルを開いて、以下を実行します。
SET 'com.denodo.vdb.util.tablemanagement.blockDelete.loopSize' = '1000';
このコマンドは、このタスクでテーブルあたり最大 1 億行 (100,000 行 * 1,000 回) を削除するようにします。
各繰り返しで削除する行の数を変更するには、以下を実行します。
SET 'com.denodo.vdb.util.tablemanagement.blockDelete.blockSize' = '2000';
デフォルトでは、このタスクは定期的に実行されるようにスケジュールされています ([Server configuration] またはデータベースのキャッシュ構成の [Cache] ダイアログで [Maintenance] オプションが [On] に設定されています)。
さらに、このタスクは管理者が CLEAN_CACHE_DATABASE
プロシージャを呼び出した場合にも実行されます。このプロシージャを呼び出す方法、およびこのプロシージャから返される情報については、『VQL ガイド』の「 CLEAN_CACHE_DATABASE 」を参照してください。
ビューのキャッシュを無効にすると (ビューの [Cache Mode] を [Off] に設定)、キャッシュデータベースのテーブルの行は無効とマークされます。キャッシュメンテナンスタスクの次回実行時に無効な行は削除されますが、テーブルは削除されません。テーブルが削除されるのは、ユーザーがビューを削除したときのみです。
基盤となるデータベースのメンテナンス¶
Virtual DataPort サーバーから「キャッシュメンテナンスタスク」を実行する以外にも、データベース管理者はパフォーマンス低下を回避するため、キャッシュデータベースに対していくつかのタスクを実行する必要があります。
インデックスの断片化を防止します。
多くのデータベースでは時間の経過に伴い、ビューの更新と削除によって、単独では新しいデータを格納できない小容量の孤立した空き領域が生じます。これを断片化した空き領域と呼びます。断片化した領域が自動的に解消されないデータベースの場合は、データベース管理者が定期的に解消を行ってください。
現在の使用量に対応できる十分な空き領域がデータベースに存在することを確認します。
...