データベーステーブルのクリーンアップ

データベーステーブルのクリーンアップ

Alfresco では、監査エントリまたは属性エントリを削除しても、実際に関連するデータがすべて削除されるわけではありません。alf_prop_*テーブルの構造は、個々の文字列や数値のデータ要素を頻繁に再利用するように設計されており、同じ値が他の要素で参照される可能性があるため、監査エントリまたは属性エントリの削除に伴うカスケード削除は行われません。

Alfresco 4.1.9、4.2.2(Enterpriseバージョン)およびAlfresco 5.0( Community バージョン)以降、Alfrescoには、alf_prop_*テーブルのダングリングデータ(どこからも参照されていないデータ)をクリーンアップするジョブがデフォルトで組み込まれています。このCRONジョブはデフォルトでは無効になっており、実行できるようにするには再設定する必要があります。

データベーステーブルのクリーンアップスケジュールを設定する

propTablesCleanupTrigger スクリプトのスケジュールを設定するか、またはこのスクリプトを手動で起動することにより、監査値とプロパティ値のテーブル( alf_audit_ テーブルと alf_prop_ テーブル)をクリーンアップできます。

大規模なデータベース(テーブルのサイズが1,000万行を超えるものなど)に対してスケジュールされたクリーンアップジョブを実行する場合は、V2クリーンアップジョブを使用してください。これは、Content Services 6.2.1以降で使用されるデフォルトのアルゴリズムです。詳しくは、データベーステーブルのクリーンアップスケジュールを設定するための代替方法 を参照してください。

propTablesCleanupTrigger は、MonitoredCronTrigger のスクリプトです。alfresco-global.propertiesファイルまたはJMXを使用して、このスクリプトを実行するスケジュールを設定できます。

このスクリプトをスケジュールに従って実行するには、alfresco-global.properties ファイルに次の行を追加します。

attributes.propcleaner.cronExpression=* * * * * ? 2099

このプロパティはデフォルトで、Quartz Cron 式の0 0 3 ? * SATに設定されており、毎週土曜日の午前3時に実行されます。Alfresco は、必要な場合を除き、このデフォルト値を変更しないことをお勧めします。

デバッグ情報に表示される出力例を次に示します。

2020-04-14 13:22:17,493 INFO [schema.script.ScriptExecutorImpl] [DefaultScheduler_Worker-3] Processing from 0 to 100000 rows of 2 rows from table alf_audit_app. 2020-04-14 13:22:17,493 INFO [schema.script.ScriptExecutorImpl] [DefaultScheduler_Worker-3] Processing from 0 to 1 rows of 0 rows from table alf_audit_entry. 2020-04-14 13:22:17,509 INFO [schema.script.ScriptExecutorImpl] [DefaultScheduler_Worker-3] Processing from 0 to 100000 rows of 1 rows from table alf_prop_unique_ctx. 2020-04-14 13:22:17,524 INFO [schema.script.ScriptExecutorImpl] [DefaultScheduler_Worker-3] Processing from 0 to 100000 rows of 3 rows from table alf_prop_root.

デフォルトのバッチサイズは100,000行です。

注意:propTablesCleanupTrigger スクリプトは、定期的なスケジュールに従ってデータベーステーブルをクリーンアップできるように設計されています。サーバーの負荷が最小限またはゼロの時間帯に、このスクリプトを実行するようにしてください。propTablesCleanupTrigger スクリプトの実行中にサーバーに負荷がかかると、データベースの競合や関連エラーが発生することがあります。

データベーステーブルのクリーンアップスケジュールを設定するための代替方法

別のアルゴリズムを使用して、データベーステーブルをクリーンアップすることもできます。このアルゴリズムは、大規模なデータベース(テーブルのサイズが1,000万行を超えるものなど)に推奨されます。これは、Content Services 6.2.1以降で使用されるデフォルトのアルゴリズムです。

プロパティテーブルクリーナーのデフォルトの設定

V1クリーンアップジョブのデフォルトの設定を次に示します。

system.prop_table_cleaner.algorithm=V1 # Prop cleaner V2 properties system.delete_not_exists.batchsize=100000 system.delete_not_exists.delete_batchsize=1000 system.delete_not_exists.read_only=false system.delete_not_exists.timeout_seconds=-1

Content Services 6.2.1より前のバージョンを実行している場合は、以下の手順に従って、V2アルゴリズムを使用してください。

読み取り専用モードで新規ジョブを実行する

  1. alfresco-global.properties で、プロパティテーブルクリーナーのデフォルトプロパティを変更します。

    1. 新しいプロパティクリーナーアルゴリズムを有効にします。

    2. プロパティクリーナーを読み取り専用に設定します。

    3. プロパティクリーナーのタイムアウトを設定します。

  2. アプリケーションサーバーを再起動します。

  3. Webブラウザを起動します。

    1. <alfresco_ip>/alfresco/s/enterprise/admin/admin-log-settingsに移動します。

    2. デバッグログを有効にして、アルゴリズムによって削除されるデータ量を確認します。パッケージ名のログ設定をDEBUGに変更します。

  4. Webブラウザで<alfresco_ip>/alfresco/s/enterprise/admin/admin-scheduledjobsに移動し、propTablesCleanupJobDetailジョブを実行します。

  5. ログを確認し、各テーブルからどの値が削除されるかを確認します。

    次のような内容が表示されます。

新しいジョブをデフォルトで実行する

  1. alfresco-global.propertiesで、プロパティテーブルクリーナーのデフォルトプロパティを変更します。

    1. 新しいプロパティクリーナーアルゴリズムを有効にします。

    2. プロパティクリーナーを削除に設定します。

    3. プロパティクリーナーのタイムアウトを設定します。

  2. アプリケーションサーバーを再起動します。

  3. Webブラウザを起動します。

    1. <alfresco_ip>/alfresco/s/enterprise/admin/admin-log-settingsに移動します。

    2. デバッグログを有効にして、アルゴリズムによって削除されたデータ量を確認します。
      パッケージ名 org.alfresco.repo.domain.schema.script.DeleteNotExistsExecutor のログ設定を DEBUG に変更します。
      注意:いくつかのテーブルでカスケード削除が有効になっているため、アルゴリズムによって初期値以外の値が削除される可能性があります。

  4. Webブラウザを起動し、<alfresco_ip>/alfresco/s/enterprise/admin/admin-scheduledjobsに移動し、propTablesCleanupJobDetailジョブを実行します。

  5. ログを確認し、各テーブルからどの値が削除されたかを確認します。

    次のような内容が表示されます。

注目ポイント:

  • サーバーやデータベースには、お客様ごとに独自の設定が適用されていると考えられるため、タイムアウトプロパティの設定を検証するようにしてください。この設定は、システムの能力や負荷に応じて変更する必要があります。

  • このアルゴリズムは、システムの能力に応じてバッチ値を変更することで、さらに改良することができます。

注意:いくつかのテーブルでカスケード削除が有効になっているため、読み取り専用モードで実行すると、アルゴリズムにより、指定された初期値より多く削除される可能性があります。

より詳細なログを収集するには、パッケージ名org.alfresco.repo.domain.schema.script.DeleteNotExistsExecutorのログ設定をTRACEに変更します。

重要:この変更により、多くのログが生成される可能性があるため、不要な場合はデフォルトのログレベルに戻してください。

ログレベルを戻さない場合、大量のログ出力によりパフォーマンスの低下、ログ肥大化によるディスク容量不足によるシステム停止など、大きな障害が発生する可能性があります。

リックソフト株式会社 は、日本でトップレベルのAtlassian Platinum Solution Partnerです。
大規模ユーザーへの対応実績が認められたEnterpriseの認定をうけ、高度なトレーニング要件をクリアし、小規模から大規模のお客様まで対応可能な実績を示したパートナー企業です。


Copyright © Ricksoft Co., Ltd. プライバシーポリシー お問い合わせ