MySQLでロックされたテーブルを検出する方法はありますか? LOCK TABLE table WRITE/READ
コマンドによってロックされたテーブルを意味します。
(namedGET_LOCK
で取得したロックの検出に関心のある読者は、 get_lockからの現在のロックをすべて表示 を読む必要があります)
SHOW OPEN TABLES
は、各テーブルのステータスとそのロックを表示します。
名前付きロックの場合は、 get_lockの現在のロックをすべて表示
つかいます SHOW OPEN TABLES
: http://dev.mysql.com/doc/refman/5.1/en/show-open-tables.html
このようなことができます
SHOW OPEN TABLES WHERE `Table` LIKE '%[TABLE_NAME]%' AND `Database` LIKE '[DBNAME]' AND In_use > 0;
データベース内のロックされたテーブルをチェックします。
SHOW OPEN TABLES
を使用して、各テーブルのロック状態を表示できます。コマンドのドキュメントページの詳細は here です。
最も簡単な方法は次のとおりです。
SHOW OPEN TABLES WHERE In_use > 0
現在のデータベースのロックされたテーブルのみを取得します。
GET_LOCK(lockName、timeOut)を使用して独自のロックを作成できます。
テーブルをロックする前にタイムアウトが0でGET_LOCK(lockName, 0)
を実行し、それに続いてRELEASE_LOCK(lockName)
を実行すると、GET_LOCK()
を実行する他のすべてのスレッドは値が0の場合、ロックが別のスレッドによって保持されていることを通知します。
ただし、テーブルをロックする前にGET_LOCK()
を呼び出すすべてのスレッドがない場合、これは機能しません。テーブルをロックするためのドキュメントは here です
お役に立てば幸いです!
この 記事 は、ロックされたMySQLリソースに関する情報を取得する方法を説明しています。 mysqladmin debug
も役に立つかもしれません。
Performance_schemaから関連するすべての詳細を取得することもできます。
SELECT
OBJECT_SCHEMA
,OBJECT_NAME
,GROUP_CONCAT(DISTINCT EXTERNAL_LOCK)
FROM performance_schema.table_handles
WHERE EXTERNAL_LOCK IS NOT NULL
GROUP BY
OBJECT_SCHEMA
,OBJECT_NAME
これは次のように機能します
show open tables WHERE In_use > 0