回答:
InnoDBテーブルと警告については、Markoのリンクを参照してください。
MyISAMにとって、これは非常に簡単な「これが問題のクエリです」ソリューションはありません。常にプロセスリストから始める必要があります。ただし、印刷されたクエリが切り捨てられないように、完全なキーワードを含めるようにしてください。
SHOW FULL PROCESSLIST;
これにより、現在のすべてのプロセス、それらのSQLクエリおよび状態のリストが表示されます。通常、単一のクエリが他の多くのクエリをロックしている場合は、簡単に識別できるはずです。影響を受けるクエリのステータスはにLockedなり、問題のクエリは単独で座って、一時テーブルのような集中的なものを待機する可能性があります。
明らかでない場合は、SQL推論の能力を使用して、問題のSQLのどれが問題の原因であるかを判断する必要があります。
試してくださいSHOW OPEN TABLES:
show open tables where In_Use > 0 ;
現在保持されているすべてのロックを表示できる回答はありません。
たとえば、ターミナルのmysqlでこれを行います。
start transaction;
update someTable set name="foobar" where ID=1234;
-- but no rollback or commit - just let it sit there
トランザクションはまだアクティブであるため、上記のトランザクションは明らかにロックを保持しています。ただし、クエリは現在実行されておらず、どこでも(少なくとも)ロックを待機している人はいません。
INFORMATION_SCHEMA.INNODB_LOCKSは空であり、ドキュメントを考えると意味があります。これは、トランザクションが1つしかなく、現在ロックを待機しているユーザーがいないためです。また、INNODB_LOCKSとにかく推奨されていません。
SHOW ENGINE INNODB STATUS役に立たない:someTableまったく言及されていない
SHOW FULL PROCESSLIST これは、犯人が実際に現在クエリを実行していないためです。
あなたは使用することができINFORMATION_SCHEMA.INNODB_TRX、performance_schema.events_statements_historyおよびperformance_schema.threadsに概説され、アクティブなトランザクションが過去に実行したことをクエリを抽出するために私の他の答えが、私はそれを参照するためにどのような方法に遭遇していないsomeTable上記のシナリオでロックされています。
これまでの他の回答の提案は、少なくとも助けにはなりません。
免責事項:innotopをインストールしておらず、気にしませんでした。おそらくそれでうまくいくかもしれません。
以下のスクリプトを使用できます。
SELECT 
    pl.id
    ,pl.user
    ,pl.state
    ,it.trx_id 
    ,it.trx_mysql_thread_id 
    ,it.trx_query AS query
    ,it.trx_id AS blocking_trx_id
    ,it.trx_mysql_thread_id AS blocking_thread
    ,it.trx_query AS blocking_query
FROM information_schema.processlist AS pl 
INNER JOIN information_schema.innodb_trx AS it
    ON pl.id = it.trx_mysql_thread_id
INNER JOIN information_schema.innodb_lock_waits AS ilw
    ON it.trx_id = ilw.requesting_trx_id 
        AND it.trx_id = ilw.blocking_trx_id