Oracleロールバックの速度を調整する
4777 ワード
パラメータfast_を介してロールバックの速度が速く遅いstart_parallel_rollbackを実装します.このパラメータは動的に調整できます.
fast_についてstart_parallel_rollbackパラメータは、ロールバック起動の並列回数を決定し、忙しいシステムやIOの性能が悪いシステムでは、ロールバック操作が大量に発生すると、システムに著しく影響し、このパラメータを調整することで影響を低減することができます.公式文書の定義は以下の通りです.
ロールバック中に、ロールバックの進行状況を表示できます.
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:ロールバックされた並列プロセス数
次は大量の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
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;
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;