方言の予備的な理解[シリーズ] MySQLのInnoDBストレージエンジンアーキテクチャ設計の研究の概要

まず、ストレージエンジン

私たちの最後の祭りが来るには、SQLの実行計画を完了するために、アクチュエータアセンブリのストレージエンジンインタフェースの呼び出しです。
MySQLのデータベース管理システムは、ディスク・ファイル・ストレージエンジンと対話するためのデータのストレージに依存している:としてその後、我々は理解することができます。

MySQLのストレージエンジンは、だから何がありますか?
その上のMyISAM、InnoDBの、メモリ、およびがあります。そして今、基本的にはInnoDBストレージエンジンを使用して、インターネットには、ので、私は簡単にInnoDBストレージエンジンについての彼らの学習、InnoDBストレージエンジン内部の部品の比較的簡単な説明を要約します。

第二に、バッファプール

私たちは今、データベース内のデータがディスクファイルに格納されていることを知っています。
だから、私たちはテーブルに追加および削除のための検索を変更するたびに、その内部ディスク・ファイル操作で直接ですか?

答:いいえ!
すべての操作は、ディスク上で行われている場合は、ランダム読み取りおよび書き込みディスクファイルのパフォーマンスは、非常に貧弱であるため、その後、高性能のMySQLの文があるだろう、MySQLは高並行性をサポートすることはできません、それはインターネットでそうではないでしょう人気。

この時間はInnoDBストレージエンジンの最も重要な要素を紹介し缓冲池(Buffer Pool)、それは非常に重要なメモリ構造です。MySQLは、高い同時実行性をサポートできるように、非常に高いパフォーマンスが読み取りと書き込みのメモリでは、メモリ内部にあります。

原理を利用したプール(バッファプール):

レッツ・レビュー・プロセスのMySQLの要求が受信されました。
①、データベース接続プールへのMySQLのモニタワーカースレッド専用の接続は、接続がSQL文で接続を取得します。
②、その後、SQL文SQL 接口に対処するためには、SQLインタフェースは、プロセスの次の一連の中で行われます。
③、查询解析器MySQLが理解できるものにSQL文を解析します。
④、その後、查询优化器SQL文の最適な実行計画のセットを開発します。
⑤、执行器それは計画に従って実行ストレージ・エンジン・インターフェースの呼び出しに行きます。

上記の記事は、物事の要約で、CRUDを実行するためのストレージ・エンジン・インターフェースは、どのようにでしょうか?一例として、他の同じように操作を更新します。
まず、ストレージエンジンの更新は、最初SQLの内の行に対応するかどうかを決定する缓冲池(Buffer Pool)内部。直接の単語ならば缓冲池(Buffer Pool)返し、その後にデータを更新しては、そうでない場合は、データがディスクにファイルから読み込まれ缓冲池(Buffer Pool)、その後の動作を更新し、結果を返します。

三、アンドゥログファイル

私たちは、トランザクションがロールバックされたトランザクションでは、まで、任意の時点でのデータへの更新を提出し、すべてを知っています。だから、何をすべきかは、それに依存するのですか?

これは、依存していますundo 日志文件

原則アンドゥログファイルを使用します:

更新データの例:
あなたは、データの行ID = 100を、更新した場合は、元のカラム名「ジョン・ドウ」と「ジョン・ドウ」、そして時間意志「ID = 10」と「名前=ジョー・スミス」二つの重要なメッセージが書かれてundo 日志文件インチ
あなたの前にトランザクションのコミットはfrom'llロールバックする必要がある場合は、undo 日志文件これらのキーワードを見つけ、その後、更新操作をロールバックします。

四、REDOログ・バッファ

それが上記になると、CRUD操作のすべてが、実際にそう実際にデータの修正はありませんが、プール内で行われ、ディスクファイル内部にすぐに実装します。

そして、問題がある:ディスクブラシへのファイルバックの前にダーティデータバッファプールは、MySQLはどのように行うためにダウンしているのですか?
この時点でInnoDBストレージエンジンは、非常に重要な成分で、その提供するredo log bufferコンポーネントである。また、バッファのメモリです。

原理を用いたバッファREDOログ:

または、例えば上記のような更新動作において、データが更新されると、データは、鍵情報は、対応するREDOログは、次に書き込まれ、更新された記録redo log bufferで。

それがトップに来る、ときしかし、まだ問題があるでしょうredo log bufferが、またのメモリに。場合は、すべてのデータ・メモリが失われますので、汚れたデータとのプール以来、MySQLは、ダウンしていることをredo log bufferログがまだ失われます。
これは状況になり、クライアントは、情報の成功したアップデートを受信したが、最終的にデータベース内のデータが正常に更新されていません。

だから、redo log bufferブラシセット戦略があります。通常、トランザクションがコミットされると、なりますredo log bufferにはredo 日志それほど心配しないで、ディスクへのブラシバック、トランザクションが正常にコミットが、データは失われた更新の問題がある可能性があります。でも中に缓冲池(Buffer Pool)ディスクブラシへのダーティデータバックの前、MySQLはそれはディスクがMySQLの再起動時に失うデータをベースとすることができるないので、ダウンしているときにredo 日志すべてのダーティデータを復元する前に更新。

おすすめ

転載: www.cnblogs.com/Howinfun/p/12289860.html