mysql ダーティページ WAL メカニズムにより、InnoDB はステートメントを更新するときに、書き込みログと呼ばれるディスク操作 (REDO ログ) を作成します。REDO ログはメモリに書き込まれた後、クライアントに返され、更新が成功したことを示します。 メモリ内のデータをディスクに書き込む処理をフラッシュと呼びます。フラッシュ前は、REDO ログに基づいてデータが更新されたがまだ書き込まれておらず、データベースが古いため、実際のデータはデータベース内のデータと一致していません。メモリ データ ページの内容がディスク データ ページと一致していない場合、メモリ ページはダーティ ページと呼ばれます。メモリに書き込まれた後は、一貫性が保たれ、クリーン ページと呼ばれます。 MySQL の動作が時々非常に遅くなる場合は、ダーティ ページがフラッシュされている可能性があります。データベースフラッシュをトリガーするプロセス
そのため、データベースを使用するときに、ダーティ ページの処理が原因でデータベースのパフォーマンスが突然低下することがあります。 ダーティページフラッシュ制御戦略
シナリオ例: データベースが占有する領域が大きすぎるため、最大のテーブルのデータの半分が削除されますが、テーブルのサイズは変更されません。 データ削除プロセス R4 を削除する場合、InnoDB エンジンはレコード R4 のみを削除済みとしてマークします。後で ID が 300 から 600 のレコードが追加された場合、この位置は再利用されますが、ディスク ファイルのサイズは縮小されません。 データ ページ上のすべてのレコードが削除された場合、データ ページを再利用できます。 注: データ ページの再利用はレコードの再利用とは異なります。
データフローを挿入 データがインデックス順に挿入されると、インデックスはコンパクトになりますが、ランダムに挿入されると、インデックス データ ページのページングが発生します。 ページA がすでにいっぱいの場合、別のデータ行を挿入するとどうなるでしょうか? A がいっぱいなので、ID 550 のデータを挿入すると、データを保存するために新しいページ pageB が要求されます。分割が完了すると、pageA の最後に穴が残ります。 インデックスの値を更新すると、古い値が削除され、新しい値が挿入されるため、これも穴が発生します。 縮小する空間 テーブル A と同じ構造を持つ新しいテーブル B を作成します。テーブル A から主キー ID の昇順で 1 行ずつデータを読み取り、テーブル B に挿入します。テーブル B に穴がなくなり、データ ページの使用率が高くなります。テーブル B を一時テーブルとして使用する場合、テーブル A から B にデータをインポートした後、A を B に置き換えます。これにより、A も実質的に縮小されます。 DDL プロセス全体を通じてテーブル A を更新できないため、この DDL はオンラインではありません。バージョン 5.6 以降では、プロセスが変更されました。 一時ファイルを作成し、A 内のすべてのデータ ページをスキャンします。 データページ内のAのレコードを使用してB+ツリーを生成し、一時ファイルに保存します。 Aのすべての操作をログファイルに記録する 一時ファイルが生成された後、ログ ファイルの操作が一時ファイルに適用され、表 A と同じ論理データを持つデータ ファイルが得られます。 テーブルAのデータファイルを一時ファイルに置き換える アイコン 図 3 のプロセスとの違いは、ログ ファイルの記録と再生操作機能が存在するため、このソリューションでは、テーブルを再構築するプロセス中にテーブル A に対する追加、削除、および変更操作が可能になる点です。 テーブルを再構築するには、alter table A engine=InnoDB コマンドを使用します。 MySQL 5.5 より前では、このコマンドの実行プロセスは上記で説明したものと似ています。唯一の違いは、一時テーブル B を自分で作成する必要がないことです。MySQL は、データの転送、テーブル名の交換、古いテーブルの削除などの操作を自動的に完了します。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
この記事は主にインターネット上の他のチュートリアルを参考にしています。実際に操作した上でのまとめです...
以前、「MySQL でコミットされていないトランザクション情報を検索する方法」というタイトルのブログ...
目次角度成し遂げる呼び出し順序知らせイオニックionic はページのライフサイクルをどのように処理し...
任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...
jQueryを使用してフォーム検証を実装します。参考までに、具体的な内容は次のとおりです。登録.ht...
HTML 中心のフロントエンド開発は、ほぼ Web 標準の意味です。共通しているのは「分離」という考...
Fast-Linux プロジェクト アドレス: https://gitee.com/uitc/Fas...
Google Gmail ページから撮った次のスクリーンショットをご覧ください (同じ場所からスクリ...
目次1. アレイ重複排除2. 配列内のオブジェクトの重複排除3. 配列内の同じフィールドに基づいて別...
序文「High Performance MySQL」では、インデックスでは範囲フィールドの後の部分が...
サービス.xml Server.xml 構成ファイルは、コンテナー全体を構成するために使用されます。...
Kubernetes を学習するときは、Kubernetes 環境で練習する必要があります。ただし、...
目次ブラウザカーネルJavaScript エンジンV8エンジンJavaScript がどのように実行...
インターフェース全体に背景画像を表示したい場合は、当然 body に背景を追加することを考えます。コ...
問題の説明ご存知のとおり、MySQL でフィールドを昇順に並べ替える SQL は次のとおりです (i...