Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » システム・オブジェクト » システム・プロシージャ » システム・プロシージャのアルファベット順リスト

 

sa_clean_database システム・プロシージャ

データベース・クリーナを起動し、実行できる期間の最大値を設定します。

構文
sa_clean_database( [ duration ] )
引数
  • duration   クリーン操作の実行が許可される時間 (秒単位)。引数の指定がない場合、または 0 が指定された場合、データベース・クリーナは DB 領域内のすべてのページのクリーンアップが終了するまで実行を続けます。

備考

データベース・クリーナは、デフォルトのスケジュールで実行される内部タスクです。このシステム・プロシージャを使用すると、データベース・クリーナを強制的にただちに実行したり、クリーナの起動のたびにその実行時間を指定したりできます。

要求の一部を後で実行すると、スナップショット・アイソレーション・トランザクション、インデックス管理、ローの削除などのデータベース・タスクをより効率的に実行できます。このような後回しにできるアクティビティには、一般的に、削除済みエントリ、履歴エントリなどの不要なエントリをデータベース・ページから削除することによるクリーンアップや、アクセス効率を上げるためのデータベース・ページの再編成などがあります。

こうしたアクティビティを後で実行することにより、現在の要求がより高速に処理されるだけでなく、データベース・サーバの負荷が軽いときにクリーンアップを実行する余地が生まれます。不要なエントリが区別されて、他のトランザクションから認識できなくなりますが、ページ上の領域は使用しているので、いつかは削除する必要があります。

データベース・クリーナは、後回しにされたクリーンアップ・アクティビティを実行します。データベース・クリーナは、20 秒ごとに実行されるようスケジュールされています。起動されると、データベースを DB 領域全体にわたって順次読み出し、クリーンアップ可能なページを検証してクリーニングし、次のページへ移ります。データベース・クリーナは、データベース・サーバによって自動的に起動された場合は、セルフチューニング・プロセスになります。データベース・クリーナによる作業量と実行時間は、DB 領域内の未処理のクリーンアップ可能ページの割合、データベース・サーバの現在のアクティビティ量、データベース・クリーナがすでにクリーンニングに費やした時間など、いくつかの要因に左右されます。0.5 秒間実行した後に、クリーナがサーバでアクティブな要求を検出した場合、クリーナは停止し、通常の間隔で実行するよう自らをスケジュールし直します。データベース・クリーナは、サーバで実行されている要求が他にないときにページ処理を試行することで、サーバの休止時間を活用します。

データベース・クリーナの統計情報は、次の 4 つのデータベース・プロパティから取得できます。

  • CleanablePagesAdded   クリーンアップが必要なページ数を返します。

  • CleanablePagesCleaned   クリーンアップ済みのページ数を返します。

  • CleanableRowsAdded   クリーンアップが必要なロー数を返します。

  • CleanabledRowsCleaned   クリーンアップ済みのロー数を返します。

CleanablePagesAdded 値と CleanablePagesCleaned 値の差は、クリーニングが必要な残りのデータベース・ページ数を示します。

sa_clean_database システム・プロシージャを使用すると、データベース・クリーナをデータベース内のすべてのページがクリーンアップされるまで実行したり、データベース・クリーナの実行時間の上限を指定したりできます。

データベース・クリーナの動作をさらにカスタマイズするには、クリーンアップが必要なページ数やロー数が指定したしきい値を超えたらデータベース・クリーナを起動するイベントを設定します。CREATE EVENT 文を参照してください。

パーミッション

DBA 権限が必要です。

関連する動作

なし

参照

次の例では、データベース・クリーナの実行時間を 10 秒に設定します。

CALL sa_clean_database( 10 );

次の例では、データベース・クリーナを毎日実行してデータベース内のすべてのページをクリーンアップするようスケジュールされたイベントを作成します。

CREATE EVENT DailyDatabaseCleanup
SCHEDULE
   START TIME '6:00 pm'
   ON ( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday' )
   HANDLER
      BEGIN
         CALL sa_clean_database( );
      END;

次の例では、データベース内の 20% 以上のページでクリーンアップが必要になるとデータベース・クリーナを強制的に実行します。

CREATE EVENT PERIODIC_CLEANER
SCHEDULE
BETWEEN '9:00 am' and '5:00 pm'
EVERY 1 HOURS
HANDLER
BEGIN
     DECLARE @num_db_pages INTEGER;
     DECLARE @num_dirty_pages INTEGER;

     -- Get the number of database pages
     SELECT (SUM( DB_EXTENDED_PROPERTY( 'FileSize', t.dbspace_id ) - 
                     DB_EXTENDED_PROPERTY( 'FreePages', t.dbspace_id ) ))
     INTO @num_db_pages
     FROM (SELECT dbspace_id FROM SYSDBSPACE) AS t;

     -- Get the number of dirty pages to be cleaned
     SELECT (DB_PROPERTY( 'CleanablePagesAdded' ) - 
                     DB_PROPERTY( 'CleanablePagesCleaned' ))
     INTO @num_dirty_pages;

     -- Check whether the number of dirty pages exceeds 20% of
     -- the size of the database
     IF @num_dirty_pages > @num_db_pages * 0.20 THEN
       -- Start cleaning the database for a maximum of 60 seconds
       CALL sa_clean_database( 60 );
     END IF;
END;