この記事では、MySQL トランザクション分離について説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
#トランザクションの概要
トランザクションは、アトミックな SQL クエリのセット、または独立した作業です。ユニット。つまり、トランザクション内のステートメントはすべて正常に実行されるか、すべて失敗するかのどちらかです。 Mysql では、トランザクション サポートはエンジン層で実装されていますが、すべての Mysql エンジンがトランザクションをサポートしているわけではありません。たとえば、MyISAM エンジンはトランザクションをサポートしていません。これが、MyISAM が InnoDB に置き換えられた重要な理由の 1 つです。 。 トランザクションに関して言えば、間違いなく ACID を思い浮かべます。絶縁レベル
データベース内で複数のトランザクションが同時に実行されると、トランザクション分離レベルの概念により、ダーティ リード、反復不能リード、ファントム リードなどの問題が発生する可能性があります。 SQL 標準では、次の 4 つの分離レベルが定義されています。transaction-isolation を目的の分離レベルに設定することです。
mysql> show variables like 'transaction_isolation'; +-----------------------+-----------------+ | Variable_name | Value | +-----------------------+-----------------+ | transaction_isolation | REPEATABLE-READ | +-----------------------+-----------------+ 1 row in set (0.00 sec)要するに、存在は合理的です。さまざまな分離レベルはさまざまなシナリオに適しています。ビジネス シナリオに基づいて決定する必要があります。
トランザクション分離の実装
Mysql では、実際には、各レコードの更新によってロールバック操作も記録されます。 、前の状態の最新の値を取得できます。 システムは、ロールバック ログを必要とするトランザクションがなくなると、ロールバック ログが削除されると自動的に判断します。 長いトランザクションの使用が推奨されない理由: 長いトランザクションは、システム内に非常に古いトランザクション ビューが存在することを意味します。これらのトランザクションはいつでもデータベース内のあらゆるデータにアクセスできるため、このトランザクションが送信される前に、データベースで使用される可能性のあるロールバック レコードを保持する必要があります。これにより、多くのストレージ領域が占有されます。同時に、長いトランザクションもロック リソースを占有し、ライブラリ全体がダウンする可能性があります。トランザクションの開始方法
クエリの長いトランザクション:
次のステートメントは、60 秒を超えるトランザクションをクエリします。mysql> select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60; Empty set (0.00 sec)要約すると、開発プロセス中に、長いトランザクションを使用することをできるだけ少なくしてください。それが避けられない場合は、論理ログ スペースが十分な大きさであることを確認し、動的なログ スペースの増加をサポートしてください。 Innodb_trx テーブルを監視し、ロング トランザクション アラームを報告します。 推奨: 「
mysql ビデオ チュートリアル 」
以上がMySQL トランザクション分離についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。