1

Sybase ASE を使用する複数のアプリケーションがあります (現在、15.0 から 15.7 に移行中)。不要な古いデータを消去するために、すべての ASE データベースで使用できる汎用ユーティリティを開発中です。このユーティリティは、指定されたウィンドウ (午前 12 時から午前 3 時) に実行されることになっており、他のユーザーに影響を与えたり、データベースをダウンさせたりすることなく、毎日ゆっくりとデータを削除し続けることができます。異なるパラメーターを持つ複数のテーブルが関係しているため、各トランザクションで削除される行数を決定するための最適なアルゴリズムを見つける必要があります。- 削除されたデータの量は、ユーザー キャッシュ/データ キャッシュ/ログ スペース/その他のパラメーターに基づく数式を使用して計算する必要がありますか? もしよろしければ式を教えていただけないでしょうか?- 今のところ、次のブルート フォース安全制限を使用し、削除クエリをループして、各ループ トラバーサルでコミットしています。

set rowcount 100

さらに、次のパラメータを考慮する方法はありますか? もしそうなら、これらの各パラメータにどのくらいの重みを付けるべきですか?

  1. テーブルの最大行サイズに基づいて、削除される行数を動的に修正しますか?
  2. 索引:
    • 削除基準がインデックスに一致する場合、tran 内のより多くの行を削除します (何行?)
    • 削除基準がインデックスと一致する場合は、「select for update」を使用します (ASE 15.7)
    • 指定された列基準に一致しない他のインデックスがある場合、入力基準に一致するインデックス列の値を「#temptbl に選択」してから、#temptbl を結合する削除を行う必要がありますか?
    • インデックスがまったくない場合、テーブルの最大行サイズを使用して「set rowcount」で削除される行数を設定する必要がありますか?
4

0 に答える 0