45を話す-MySQLオタクリアルタイム

1.インフラストラクチャ:どのようにSQLクエリ文が実行されますか?

一般的に、MySQLサーバは二つの部分層及びストレージエンジンの層に分けることができます。
すべてのクロスストレージエンジン、コネクタなど、クエリキャッシュ、解析、最適化、アクチュエータなど、MySQLの中核サービス機能のほとんどをカバーするだけでなく、(例えば、日付、時間、数学と暗号化機能など、など)組み込み関数のすべてのサーバー層関数は、ストアドプロシージャ、トリガ、および他のビューとして、この層に実装されています。
ストレージエンジン層は、データ記憶および検索のために責任があります。そのアーキテクチャモデルは、プラグイン、InnoDBは、MyISAMテーブル、メモリ、およびその他のストレージエンジンのためのサポートです。今、最も一般的に使用されるストレージエンジンInnoDBは、MySQLの5.5.5最初からそれのバージョンでは、デフォルトのストレージエンジンになりました。

2.ロギングシステム:SQLステートメントを更新するために、どのように実行されますか?

クエリ処理は、更新プロセスは、2つの重要なログモジュールを必要とする、の主人公たちは、今日の話をしたい正確に何である、同じではありません:REDOログ(REDOログ)とバイナリログ(アーカイブログ)
のレコードがある場合には、具体的に更新する必要がある、InnoDBエンジンは、第1内側(ピンクシート)をREDOログに書き込まれ、そしてメモリを更新記録し、この時間は、アップデートは完了です。同時に、InnoDBエンジンは、適切な時期に、この操作は、内部のディスクへの記録を更新しますが、これは多くの場合、それが実行する会計を閉じた後のようなものだ、システムにもっと自由な時間を更新するために行われます。
などの固定サイズののInnoDB REDOログは、この「ピンクシートは、」記録動作4GBの合計となり、各ファイルが1ギガバイトであり、4つのファイルのセットとして構成することができます。次の図に示すようにゼロから書かれて、それは、バックライト・サイクルの開始に最後に書き込まれます。

重要なログモジュール:binlogの
以前の私たちは、全体としてのMySQL、について話しましたが、実際には、二つがあります:1は主に行うサーバー層、ある物事のMySQLの機能レベルであり、エンジン層があり、特定のストレージ関連の責任問題。私たちの上にInnoDBエンジンがログに固有であり、かつサーバー層は、バイナリログ(アーカイブ・ログ)と呼ばれる独自のジャーナルを、持っているREDOログ・ピンクのプレートに話し
、次の両方の違いを記録します。
InnoDBエンジンをログ1.redoはユニークであり、ビンログは、MySQLサーバー層の実装である、すべてのエンジンを使用することができます。
物理ログ・レコードをログ2.redoする「ページ変更のデータがなされた」であり、バイナリログ論理ログが文の元のロジックを記録し、そのようなラインのID = 2 Cに適用される「フィールドとして1. "
3.redoログは循環で書かれている、一定のスペースが不足します。ビンログが書かれて追加することができます。「追加の書き込みは、」次へと切り替わります特定のサイズに書かれたバイナリログファイルを参照し、以前のログが上書きされることはありません。

3.トランザクションの隔離:なぜ私はあなたが変更を見ることができませんか?

単離と分離レベル
のトランザクションを述べ、あなたはACID(原子性、一貫性、独立、確かに思うだろう耐久性、 すなわち原子性、一貫性、独立性、耐久性)が、今日は、我々はIここで、それは、「単離することであることを懸念していますセックス。 "

同時に、データベース上で実行複数のトランザクションがある場合、それはこれらの問題を解決するために、ダーティ・リード(ダーティ・リード)、非反復可能読み取り(非反復可能読み取り)、ファントムリード(ファントムリード)問題が表示されることがあり、「あります分離レベルの概念」。

分離レベルの話をする前に、まずあなたがよりタイト、低い効率を分離することを知っている必要があります。非常に多くの時間が、我々は2つの間のバランスを見つける必要があります。SQL標準のトランザクション分離レベルであって、非コミット読み取り(コミットされていない読み取り)、コミット読み取り(コミット読み取り)、反復可能読み取り(反復可能読み取り)と、シリアライズ(直列化可能)。私はあなたのために一つ一つを説明しましょう:
1.トランザクションが提出されていない未コミットの手段を読んで、それを見ることができるの変更は、他のトランザクションを実行します。
トランザクションがコミットした後、2読書の提出は、それが他のトランザクションによって変更見られるん、いい。
トランザクションの実行中に3つの反復可能読み取り手段は、あなたがデータが一致している起動時に常にこの取引に参照、データを表示します。もちろん、反復可能読み取り分離レベルの下で、他のトランザクションのコミットされていない変更は表示されません。
4.シリアライズ、名前が示すように、同じ行のレコードで、「書き込みロック」を追加します「書き込み」、「ロックをお読みください。」が追加されます「読み取り」読み書きロックの競合が発生したときに完了したトランザクションの実行の訪問を進めることができない前に、トランザクションが待機しなければなりません。

私たちは、異なる戻り結果を持って、トランザクションに異なる分離レベルを見て、だけでなく、はい何であったかのV1、V2、V3の戻り値内の数値です。
分離レベルが「非コミット読み取り」の場合+、V1の値は2です。この時間トランザクションBは、けれども、まだ提出されていないが、結果はA.を見てきました したがって、V2、V3も2です。
+分離レベルは「コミット読み取り」である場合、1がV2は、2の値であり、V1です。A.を提出した後に見られるために、Bの更新トランザクション したがって、V3の値は2です。
+分離レベルが"反復可能読み取り"である場合、V1、V2はV3が2であり、1です。V2または1は、この要件が続いている理由:前と見ての実行中のトランザクションの後にデータが一致している必要があります。
分離レベルは+「シリアライズ」である場合、トランザクションはB.にロックされたときに「2 1へ」のプロセス 取引後まで提出は、トランザクションBは継続することができます。したがって、ビューAの点から、V1、V2はV3が2であり、値は1です。

おすすめ

転載: www.cnblogs.com/chenbensheng/p/11566823.html