1

不要な古いデータを大量に削除するために、複数のテーブル/データベースで使用される Sybase ASE (15.7 に移行) データ パージ ユーティリティに取り組んでいます。毎晩午前 12:00 から午前 3:00 にスケジュールし、午前 3:00 を過ぎると、翌日の午後 12:00 にスリープおよびウェイクアップし、パージを続行することになっています。基準は、ユーザーに影響を与えないことです。

  1. これは、次の日までバッチをスリープ状態にするために次を使用するのに適した設計ですか? それともパフォーマンスに悪影響を及ぼしますか?waitfor を呼び出す前に tran をコミットしています。

    waitfor time "12:00:00"
    
  2. トランザクション ログ:

    • 以下のクエリを使用してトランザクション ログのサイズを見つけ、トランザクション ログの使用可能な領域が < some% になるまで待機しています。これは良いアプローチですか?
    • また、私の一般的なシナリオを考えると、待機する前に確認する必要がある最適なトランザクション ログ使用 %limit は何ですか? -「ダンプトランザクション」を使用する必要がありますか? 本番システムでは「トランザクションの切り捨てのみをダンプ」を使用すべきではないことを読みました。別の方法で使用する必要がありますか?私のシナリオについて何か提案してもらえますか?

      select @tlogPctUsed = ceiling(100 * (1 - 1.0 * lct_admin("logsegment_freepages",d.dbid) / sum(case when u.segmap in (4, 7) then u.size end)))
        from master..sysdatabases d, master..sysusages u
       where u.dbid = d.dbid
         and d.dbid = db_id()
         and d.status != 256
      group by d.dbid
      
      while (@tlogPctUsed > @tlogPctLimit)
      begin
          waitfor delay @10Seconds
          select @tlogPctUsed = ceiling(100 * (1 - 1.0 * lct_admin("logsegment_freepages",d.dbid) / sum(case when u.segmap in (4, 7) then u.size end)))
            from master..sysdatabases d, master..sysusages u
           where u.dbid = d.dbid
             and d.dbid = db_id()
             and d.status != 256
          group by d.dbid
      end
      
4

3 に答える 3

0

ASE Job Schedulerは、 waitforの代わりにパージを実行するためのより安定した方法です。

*truncate_only* を使用したトランザクションのダンプが本番システムに推奨されない理由は、回復可能性への影響です。プロセスの一部としてトランザクション ログをファイルにダンプすることで、この問題を回避できます。そうすれば、ログがいっぱいになる問題に対処できるだけでなく、データベースに障害が発生した場合にシステムを回復する機能を維持することもできます。

トランザクション ログのダンプの詳細については、Sybase ASE 15.7 リファレンス マニュアル: コマンドを参照してください。

また、sp_thresholdaction を設定して、トランザクション ログが特定のしきい値に達したときに自動的にダンプすることもできます。Sybase ASE 15.7 Reference Manual: Proceduresにその例があります。

于 2013-04-01T04:44:24.620 に答える