Oracleロールバックの速度を調整する

4777 ワード

パラメータfast_を介してロールバックの速度が速く遅いstart_parallel_rollbackを実装します.このパラメータは動的に調整できます.
fast_についてstart_parallel_rollbackパラメータは、ロールバック起動の並列回数を決定し、忙しいシステムやIOの性能が悪いシステムでは、ロールバック操作が大量に発生すると、システムに著しく影響し、このパラメータを調整することで影響を低減することができます.公式文書の定義は以下の通りです.
FAST_START_PARALLEL_ROLLBACK specifies the degree of parallelism used when recovering terminated transactions. Terminated transactions are transactions that are active before a system failure. If a system fails when there are uncommitted parallel DML or DDL transactions, then you can speed up transaction recovery during startup by using this parameter.

Values:

    FALSE

    Parallel rollback is disabled

    LOW

    Limits the maximum degree of parallelism to 2 * CPU_COUNT

    HIGH

    Limits the maximum degree of parallelism to 4 * CPU_COUNT

If you change the value of this parameter, then transaction recovery will be stopped and restarted with the new implied degree of parallelism.

ロールバック中に、ロールバックの進行状況を表示できます.
V$FAST_START_TRANSACTIONSは
SQL> select usn, state, undoblocksdone, undoblockstotal, CPUTIME, pid,xid, rcvservers from v$fast_start_transactions;
       USN STATE            UNDOBLOCKSDONE UNDOBLOCKSTOTAL    CPUTIME        PID XID              RCVSERVERS
---------- ---------------- -------------- --------------- ---------- ---------- ---------------- ----------
       454 RECOVERED                110143          110143        210            01C600210027E0D9          1
       468 RECOVERED                   430             430         17            01D40000001F3A36        128
       
USN:トランザクション対応undoセグメント
STATE:取引の状態、オプションの値(BE RECOVERED,RECOVERED,or RECOVERING)
UNDOBLOCKSDONE:完了したundoブロック
UNDOBLOCKSTOTAL:合計undoデータブロック
CPU TIME:ロールバックされた時間、単位は秒
RCVSERVERS:ロールバックされた並列プロセス数
  ,           
sys@MS4ADB3(dtydb5)> select  undoblockstotal "Total", undoblocksdone "Done", undoblockstotal-undoblocksdone
  2    "ToDo",decode(cputime,0,'unknown',to_char(sysdate+(((undoblockstotal-undoblocksdone)
  3       / (undoblocksdone / cputime)) / 86400),'yyyy-mm-dd hh24:mi:ss'))
  4      "Estimated time to complete",to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
  5      from v$fast_start_transactions;

 Total  MB       Done       ToDo Estimated time to complete             TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
---------- ---------- ---------- -------------------------------------- --------------------------------------
    36,767      36767          0 2014-03-19 16:59:19                    2014-03-19 16:59:19
     7,209       7209          0 2014-03-19 16:59:19                    2014-03-19 16:59:19
     3,428       3428          0 2014-03-19 16:59:19                    2014-03-19 16:59:19
    34,346       1604      32742 2014-03-19 17:25:31                    2014-03-19 16:59:19

次は大量のwait for a undo record待機イベントの処理手順です.
1、あるユーザーはplsqlを使ってあるinsert操作異常を実行して、表空間が絶えず増加して、そこで手作業killはロールバックして止まって、killの後で大量のwait for a undo record、約100余り
2,v$fast_のクエリstart_transactionsビュー、fast_start_parallel_rollbackパラメータはHIGHに設定され、cpuは32個であるため、並列プロセスは32×3=128
SQL> select usn, state, undoblocksdone, undoblockstotal, CPUTIME, pid,xid, rcvservers from v$fast_start_transactions;

       USN STATE            UNDOBLOCKSDONE UNDOBLOCKSTOTAL    CPUTIME        PID XID              RCVSERVERS
---------- ---------------- -------------- --------------- ---------- ---------- ---------------- ----------
       454 RECOVERING                26922          464160        103       3744 01C600210027E0D9        128
       468 RECOVERED                   430             430         17            01D40000001F3A36        128       
       
SQL> SHOW parameter ROLLBACK

NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
fast_start_parallel_rollback         string                           HIGH

SQL> show parameter cpu

NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
cpu_count                            integer                          32

3,推定103/(26922/464160)=30分で完了するため、システム性能への影響を低減するために、関連テーブルにtruncateを行った(ビジネステーブルのデータは不要)
SQL> truncate table user1.JT_t1_20140318;
4,truncateの場合、短時間でrow cache lock異常待ちが発生し、約数十秒後、正常に戻り、truncat操作でundoロールバック操作を終了できますか?5,実はundoの影響を減らすためにfast_を設定することができますstart_parallel_rollback、オンラインで変更できます.すぐに有効になります.
alter system set fast_start_parallel_rollback= FALSE;