まず、ストレージエンジン
私たちの最後の祭りが来るには、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 日志
すべてのダーティデータを復元する前に更新。