データベースのロックの問題を診断するために、ロックされているローの内容を調べると役に立つ場合があります。データベースで現在保持されているロックを確認するには、sa_locks システム・プロシージャ、または Sybase Central の [テーブル・ロック] タブを使用します。どちらの方法でも、ロックを保持している接続、ロックの期間、ロックの種類などの必要な情報を得ることができます。
データベースのロックは一時的なものであるため、Sybase Central で参照できるローや sa_locks システム・プロシージャによって返されるローは、クエリの完了時にはすでに存在しません。
ロックは Sybase Central で表示できます。左ウィンドウ枠のデータベースを選択し、右ウィンドウ枠の [テーブル・ロック] タブをクリックします。このタブでは、それぞれのロックに対する接続 ID、ユーザ ID、テーブル名、ロック・タイプ、ロック名が表示されます。
sa_locks システム・プロシージャの結果セットには、ロックが参照するテーブルのローを識別できる row_identifier カラムが含まれます。ロックされたローに格納されている実際の値を判断するために、ジョイン述部でテーブルの rowID を使用して、sa_locks システム・プロシージャの結果を特定のテーブルにジョインできます。次に例を示します。
SELECT S.conn_id, S.user_id, S.lock_class, S.lock_type, E.* FROM sa_locks() S JOIN Employees E WITH( NOLOCK ) ON RowId(E) = S.row_identifier WHERE S.table_name = 'Employees'; |
NOLOCK テーブル・ヒントを指定する必要はない場合があります。ただしクエリが 0 以外の独立性レベルで発行された場合、ロックが解放されるまでこのクエリがブロックされることがあり、この確認方法の便利さは低下してしまいます。
sa_locks システム・プロシージャの詳細については、sa_locks システム・プロシージャを参照してください。
NOLOCK テーブル・ヒントの詳細については、FROM 句を参照してください。
ROWID 関数の詳細については、ROWID 関数 [その他]を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |