2

私はphpでファイルを作成し、この下に読み取りモードでテーブルをロックするコードを書きました。そのファイルの下に同じテーブルへの挿入操作を書きましたが、読み取りロックは読み取り操作のみをサポートすることがわかっているため、テーブルの内容を表示することしかできませんが、変更することはできません。そしてそれはうまくいっています。

PROBLEM_EXIST_HERE: 同じテーブルへの同じ挿入操作を含む別のファイルを作成しました。ここでは、ロック コードではなく、挿入操作のみを記述しています。

このファイルを使用する前に、最初のファイル (ロック + 挿入を含む) 操作を使用 (RUN) し、その後、同じブラウザーで新しいタブを開き、2 番目のファイル (挿入操作のみを含む) を実行しました。

テーブルの読み取りロックが既に固定されていることがわかっているのに、なぜ挿入操作が行われるのでしょうか? テーブルが READ ロック モードであるため更新できないというエラーが表示されないのはなぜですか? この問題を解決する方法を知っている人はいますか?

  1. テーブルがmysql dbの読み取りまたは書き込み状態でロックされているかどうかを確認する方法を知っている人はいますか? これのPHPコードを教えてもらえますか?私は一日中検索しましたが、解決策はありません。簡単な言葉で簡単な解決策を書いてください。
4

2 に答える 2

0

LOCKTABLEのドキュメントを表示します。

書き込みロックは通常、更新を確実にするために読み取りロックよりも優先されます
できるだけ早く処理されます。これは、1つのセッションがREADを取得した場合を意味します
ロックしてから別のセッションがWRITEロックを要求し、その後のREADロック要求
WRITEロックを要求したセッションがロックを取得するまで待ち、
それをリリースしました。

InnoDBテーブルの場合、InnoDBにはロックモニターがあります。

InnoDB Lock Monitorは、標準のMonitorに似ていますが、広範なロックも提供します
情報。このモニターで定期的な出力を有効にするには、次の名前のテーブルを作成します
innodb_lock_monitor。

もっと:

ロックモニターは、追加のモニターが含まれていることを除いて、標準のモニターと同じです。
ロック情報。関連するを作成することにより、定期的な出力のためにいずれかのモニターを有効にする
InnoDBテーブルは同じ出力ストリームをオンにしますが、ストリームには追加のストリームが含まれます
LockMonitorが有効になっている場合の情報。たとえば、innodb_monitorを作成する場合
およびinnodb_lock_monitorテーブル。これにより、単一の出力ストリームがオンになります。ストリームには次のものが含まれます
を削除してロックモニターを無効にするまで、追加のロック情報
innodb_lock_monitorテーブル。
于 2012-10-11T13:02:40.863 に答える
0

別のクエリは、実行できるようにロックが解決されるまで長時間待機しています。現在、カウンターを直接配置する方法はありません。クエリが特定の時間のしきい値を超えたかどうかを確認するために、クエリを強制終了する必要があります。ここに与えられた特定の間接的な方法があります

テーブルがロックされているかどうかを直接知る方法はありません。特定のクエリの実行中に、MySQL がテーブルをロックすることもあります。次のクエリを実行すると、テーブルがロックされているかどうかを知ることができます。

SHOW OPEN TABLES FROM <database name> WHERE `table` = "<table_name>";

このクエリでは、in_use列の値が1の場合はテーブルがロックされ0の場合はロックされていません

編集

Information_schema のプロセスリスト情報を使用する方法がもう 1 つあります。

クエリを実行します。

SELECT * FROM information_schema.`PROCESSLIST` WHERE db="<DB name>" AND command = "Query";

結果から、"state"列のメッセージは何ですか? 何が起こっているのかをより深く理解することができます。また、 を使用してクエリを強制終了できるクエリID も提供されますKILL <Query ID>。ただし、これらすべてを実行するには、MySQL サーバーへの新しい接続を作成する必要があります。また、クエリが実行されている時間を知ることができます。

于 2012-10-11T13:20:01.177 に答える