7

「SHOW ENGINE INNODB STATUS;」の応答の数行を次に示します。


TRANSACTIONS
------------
Trx id counter 58EC54C6
Purge done for trx's n:o < 58EC54C3 undo n:o < 0
History list length 2420
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 58EC51E6, not started
MySQL thread id 520131, OS thread handle 0x7f0db930e700, query id 24011015 108.89.56.87 xyz
---TRANSACTION 58EC527E, not started
MySQL thread id 520061, OS thread handle 0x7f0dbb596700, query id 24011370 108.89.56.87 xyz
---TRANSACTION 58EC53AC, not started
MySQL thread id 520065, OS thread handle 0x7f0dbb28a700, query id 24012094 108.89.56.87 xyz
---TRANSACTION 58EC50CE, not started
MySQL thread id 520109, OS thread handle 0x7f0dbba69700, query id 24010431 108.89.56.87 xyz    ---TRANSACTION 58EC51E8, not started
MySQL thread id 520123, OS thread handle 0x7f0dbb4d3700, query id 24011016 108.89.56.87 xyz    ---TRANSACTION 58EC51D0, not started
MySQL thread id 520072, OS thread handle 0x7f0db865c700, query id 24010944 108.89.56.87 xyz
---TRANSACTION 58EC5184, not started
MySQL thread id 520058, OS thread handle 0x7f0db8c74700, query id 24010807 108.89.56.87 xyz

この「Transaction transId, not started」の意味を知りたいですか? 実行に失敗したクエリはありますか?

私はinnodbを使用しています。また、手動でトランザクションを開始していません。大量のデータを持つテーブルに対して更新クエリを発行しているため、自動トランザクションを検討しています。そして、この単一のテーブルに対して 5 ~ 10 分で何百もの mysql 更新クエリが取得されます。

「トランザクションが開始されていません」の正確な意味を教えてください。失敗したクエリまたは通常のログを示していますか?

前もって感謝します!

4

2 に答える 2

15

スレッド (~connection) がトランザクション中にデータをロックする必要があるのは初めてで、トランザクション「オブジェクト」(~context) が作成されます。トランザクション「オブジェクト」は、トランザクションの終了時に破棄されません。同じスレッドによって新しいトランザクションが開始された場合に再利用されます。

各トランザクションは、現在トランザクション内にない (より正確には、トランザクションの個別のコンテキストを維持する必要がない)not startedスレッドが所有するトランザクション「オブジェクト」として表示されます。

thread idIdを発行したときに列に表示されるものですSHOW PROCESSLIST

これは心配する必要はありません。実際、これは正常な動作です。

于 2012-06-28T12:15:38.333 に答える
2

私はインターネットでこれを見つけました:

Innodb はいつトランザクションを開始しますか?

2011 年 1 月 11 日 ピーター・ザイツェフ

9 コメント

Innodb はいつトランザクションを開始しますか? 「BEGIN」コマンドを発行すると、答えは明らかです。ただし、これはあなたのエンジンポイントからの間違った答えです。「SHOW INNODB STATUS」を実行すると、トランザクション リストに「未開始」ステータスが表示されます。

ここから

MySQL の接続ごとに、この接続にアクティブな Innodb トランザクションがない場合は、ether not started 状態になり、トランザクションがアクティブな場合は ACTIVE になります。接続が「スリープ」段階にある場合でも、トランザクションがアクティブになる可能性があることに注意してください-複数ステートメントトランザクションの場合。Innodb は、OS の thread_id とプロセス ID も出力します。これは、gdb を使用して、トラブルシューティングや同様の目的で実行中の mysqld に接続する場合に役立ちます。また、トランザクションのステータスも報告されます。これは、基本的にトランザクションが行っていることであり、「行のフェッチ」、「更新」、およびその他の値のカップルである可能性があります。

ソース_

于 2012-06-28T12:44:51.400 に答える