不要な古いデータを大量に削除するために、複数のテーブル/データベースで使用される Sybase ASE (15.7 に移行) データ パージ ユーティリティに取り組んでいます。毎晩午前 12:00 から午前 3:00 にスケジュールし、午前 3:00 を過ぎると、翌日の午後 12:00 にスリープおよびウェイクアップし、パージを続行することになっています。基準は、ユーザーに影響を与えないことです。
これは、次の日までバッチをスリープ状態にするために次を使用するのに適した設計ですか? それともパフォーマンスに悪影響を及ぼしますか?waitfor を呼び出す前に tran をコミットしています。
waitfor time "12:00:00"
トランザクション ログ:
- 以下のクエリを使用してトランザクション ログのサイズを見つけ、トランザクション ログの使用可能な領域が < 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