アプリケーションの一部として、Jackrabbit (1.6.4) を使用してドキュメントを保存しています。アプリケーションによって取得された各ドキュメントは、存在しない場合は作成される Jackrabbit のフォルダー構造に配置されます。
当社の DBA は、Jackrabbit スキーマを保持する Oracle (11.2.0.2.0) データベースに対して次のクエリが頻繁に実行されていることに気付きました。実際、これは経過時間に対する IO の点で上位 5 つの SQL ステートメントの 1 つです (97% IO)。
select BUNDLE_DATA from VERSION_BUNDLE where NODE_ID = :1
データベースを見ると、このテーブルには最初は 1 つのレコードしか含まれていないことがわかります。このレコードはnode_id
、値を持つ (データ型 RAW) キーとBLOB 列DEADBEEFFACEBABECAFEBABECAFEBABE
の数バイトで構成されています。bundle_data
後で、追加のデータを含むレコードが追加されます。
テーブルの SQL は次のようになります。
CREATE TABLE "VERSION_BUNDLE"
(
"NODE_ID" RAW(16) NOT NULL ENABLE,
"BUNDLE_DATA" BLOB NOT NULL ENABLE
);
次の質問があります。
- Jackrabbit がこのテーブルに頻繁にアクセスするのはなぜですか?
- これを高速化する Jackrabbit のチューニング オプションはありますか?
- 値は
BUNDLE_DATA
Jackrabbit によってまったく変更されますか?それとも、リポジトリへのアクセスごとに読み取られるだけですか? - このシナリオをより適切に処理できるようにデータベース スキーマを調整する方法はありますか?
更新: テーブルには最初は 1 つのレコードしか含まれていません。追加のレコードは、Jackrabbit によって内部的に決定されたように、時間の経過とともに追加されます。挿入または更新ステートメントが高い数で実行されていると報告されていないため、ほとんどの場合、アクセスは依然として読み取り専用のようです。