0

解決する簡単なユースケースがあります。誰かがあなたに「ねえ、このクエリの特定のセットはトランザクションではありません!」と言ったと想像してください。あなたの仕事はその声明を否定することです。どうすればそれができますか?

仮定:

  • ユーザーは、「魔法のボタンを1つクリックする」ことでこれを再現できます。これは、次の3つと言えますINSERTs
  • mysql client私たちはすべての特権にアクセスできます
  • アプリケーションのコードベースにアクセスできないため、コードの観点からこれを検証するための統合テストはできません
  • MySQLサーバーを使用していますInnoDb
  • 必要に応じて MySQL 構成を微調整できます (低速クエリなど)。
4

1 に答える 1

0

次の出力にトランザクション セクションがあります。

SHOW ENGINE INNODB STATUS\G

これは次のようになります (これは、現在クエリを実行していないローカルの MySQL からのものです):

TRANSACTIONS
------------
Trx id counter 900
Purge done for trx's n:o < 0 undo n:o < 0
History list length 0
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started
MySQL thread id 47, OS thread handle 0x7fc8b85d3700, query id 120 localhost root
SHOW ENGINE INNODB STATUS

この情報を積極的に監視できるかどうかはわかりません。3 つの挿入操作の瞬間に正確に確認できます。おそらく、ここで最後の箇条書き (遅いクエリを使用) を使用できます...

さらに、MySQL にはコマンド カウンターがあります。このカウンターには、次の方法でアクセスできます。

SHOW GLOBAL STATUS LIKE "COM\_%"

コマンドを実行するたびに、それに関連付けられたカウンターがインクリメントされます。トランザクション関連のカウンターはCom_beginCom_commitおよびCom_rollbackであるため、コードを実行してこれらのカウンターを監視できます。

于 2012-07-03T08:54:21.213 に答える