ロック競合時のタイムアウト設定set lock wait
0.改訂履歴
- 2004.07.15 新規作成
1.はじめに
このドキュメントでは,Sybase ASE12.5にて,指定した時間以上のロック待ちがあったら,処理を異常終了させる手順を説明する.
なお,使用しているSybaseは,Sybase Adaptive Server Enterprise 12.5で,この機能は11.9.2以降で利用できるらしい.
実験用検索キーワードとして「サーベースー」なんていれてみたりして.
また,管理者権限(SA)を保有するユーザのみ実行できる.
2.ロックウェイトのデフォルト時間を確認
- ASE12.5では,ロックウェイトを我慢できる時間を設定できる.
- 逆に,何もしなければデフォルト時間の確認を行う.
bash-2.05a$ isql -Usa -P -STESTDB -w100 -Jsjis -zjapanese 1> sp_configure "lock wait period" 2> go Parameter Name Default Memory Used Config Value Run Value Unit Type ------------------------------ ----------- ----------- ------------ ----------- -------------------- ---------- lock wait period 2147483647 0 2147483647 2147483647 seconds dynamic (1 row affected) (return status = 0) 1> |
- デフォルトは無制限となっている.
- よって,ロック待ちが発生したら,永遠に待つ設定になっている.
- 実際には68年くらいだけど.
3.ロックウェイトのデフォルト時間の変更
- サーバ全体でロック待ち時間に制限を付けたい場合は,sp_configureコマンドで設定を行う.
- 設定は動的に変更される.
1> sp_configure "lock wait period",60 2> go Parameter Name Default Memory Used Config Value Run Value Unit Type ------------------------------ ----------- ----------- ------------ ----------- -------------------- ---------- lock wait period 2147483647 0 60 60 seconds dynamic (1 row affected) 設定オプションが変更されました。オプションは動的なので、SQL Server を再起動する必要はありません。 'lock wait period' の値を変更しても、Adaptive Server で使用するメモリの量は増加しません。 (return status = 0) 1> |
- この例では,60秒に設定した.
4.セッション毎のロックウェイト時間の設定
- ロック待ち時間を短くすると,たとえばバッチ処理などで大量に処理をするような場合は時間が足りないため処理が実行できない場合がある.
- そんなときは,そのセッションだけで有効なロック待ち時間を設定することも出来る.
1> set lock wait 100 2> go 1> |
- 言い換えるならば,これで逆にあるセッションだけロック待ちを短くしたいなども可能となる.