0. はじめに ibdata1 ファイルとは何ですか? ibdata1 は、innodb システム テーブルスペースを構築するために使用されるファイルです。このファイルには、innodb テーブルのメタデータ、元に戻すレコード、変更バッファ、および二重書き込みバッファが含まれています。ファイルごとのテーブル オプションがオンになっている場合、ファイルに必ずしもすべてのテーブルのデータが含まれているわけではありません。 innodb_file_per_table オプションをオンにすると、新しく作成されたテーブルのデータとインデックスはシステム テーブルスペースではなく、各テーブルの .ibd ファイルに保存されます。 当然、このファイルはどんどん大きくなります。innodb_autoextend_increment オプションは、毎回自動的に大きくなるファイルのステップ サイズを指定します。デフォルト値は 8M です。 ibdata1 ファイルがどんどん大きくなる原因は何ですか? ibdata1 はデータ、インデックス、キャッシュなどを格納しており、MYSQL の最も重要なデータです。したがって、データベースが大きくなるにつれてテーブルも大きくなりますが、これは避けられません。時間が経ってサイズが大きくなると、丸太やスペースの処理が面倒になり、どこから手を付けてよいか分からなくなります。次に、このような状況に対処し、データを別のデータベースに保存します。 InnoDB の共有テーブルスペース ファイル ibdata1 のサイズが大幅に増加した場合はどうすればよいですか? 1. 問題の背景 MySQL/InnoDB を使っている友人も困っているかもしれません。なぜか ibdata1 ファイルがどんどん大きくなっていき、30 歳を過ぎた男性のお腹のように、どうやって小さくしたらいいのかわからないのです。幸い私のお腹はまだ大きくなっていません、ほほ~ 正式に始める前に、ibdata1 ファイルが何に使用されるのかを知る必要があります。 ibdata1 ファイルは、InnoDB ストレージ エンジンの共有テーブルスペース ファイルです。このファイルには主に次のデータが格納されます。
さらに、オプション innodb_data_file_path = ibdata1:1G:自動拡張 もちろん、 2. 原因分析 InnoDB が MVCC をサポートしていることはわかっています。ORACLE と同様に、InnoDB は UNDO ログと REDO ログを使用して MVCC 機能を実装します。トランザクションでデータ行が変更されると、InnoDB はデータの古いバージョンを UNDO ログに保存します。別のトランザクションがこの時点でデータを変更する場合、データの最新の表示バージョンを UNDO ログに保存します。以下同様に続きます。データを変更するトランザクションが N 個ある場合、N 個の履歴バージョンを保存する必要があります (ORACLE とは少し異なり、InnoDB の UNDO ログは完全に物理ブロックではなく、主に論理ログです。これについては、InnoDB ソース コードまたはその他の関連資料を参照してください)。これらの UNDO ログは、トランザクションが完了するまで待機し、トランザクション分離レベルによって決定される他のトランザクションからの可視性に基づいて、これらの UNDO ログを削除できるかどうかを再度判断する必要があります。この作業をパージと呼びます (パージ作業は、期限切れの未使用 UNDO ログを削除するだけではありません。他にもさまざまな作業があります。これについては後述します)。 ここで疑問が生じます。大量のデータの履歴バージョンを読み取る必要があるトランザクションがあり、何らかの理由で今朝そのトランザクションをコミットまたはロールバックできず、トランザクションの開始後に大量のトランザクションでデータを変更する必要がある場合、これらの新しいトランザクションによって生成された UNDO ログを削除できず、結果的に蓄積されてしまいます。これが、ibdata1 ファイルのサイズが増加する主な理由の 1 つです。この状況の最も典型的なシナリオは大量のデータのバックアップであるため、バックアップ作業をマスター サーバーではなく専用のスレーブ サーバーに配置することをお勧めします。 また、ファイルI/Oパフォーマンスの低下などの理由により、InnoDBのパージ作業で、時間内に削除できるUNDOログをパージできずに蓄積されてしまうケースもあります。これもibdata1ファイルのサイズが増加する大きな原因です。このシナリオは、サーバーのハードウェア構成が比較的弱く、ビジネスの発展に追いつくために時間内にアップグレードされていない場合に発生します。 比較的まれな問題としては、32 ビット システムで実行されている初期の MySQL バージョンにバグがあるというものがあります。パージする undo ログの合計量が一定値を超えると、パージ スレッドは抵抗を放棄し、それ以上のパージを行わなくなります。この問題は、初期の 32 ビット MySQL 5.0 バージョンを使用していたときに頻繁に発生しました。このファイルが 100G を超える状況に遭遇したこともあります。その後、私たちはこれらすべてのインスタンスを 64 ビット システムに移行するために多大な労力を費やし、ついにこの問題を解決しました。 最後は、オプション innodb_data_file_path の値が最初に調整されていなかったか、非常に小さく設定されていたため、必然的に ibdata1 ファイルが増加したことです。 Percona が公式に提供している my.cnf 参照ファイルでは、この値が増加したことは一度もありません。これは不思議です。私がよく不満を言う xx のように、意図的に秘密のドアを残しておき、顧客がその後最適化しやすいようにするためでしょうか。 (心が暗すぎてダメだ〜〜) 要約すると、ibdata1 ファイルのサイズが突然増加した理由は次のとおりです。
ちょっとした補足ですが、別の人気データベースであるPostgreSQLは、各履歴バージョンのデータを元のデータテーブルスペースと一緒に保存するため、この場合の問題は発生しません。したがって、PostgreSQLトランザクションのロールバックは非常に高速になり、定期的にバキューム作業を行う必要があります(詳細については、PostgreSQLのMVCC実装メカニズムを参照してください。完全に正確ではない可能性があります)。 3. 解決策の提案 上記の問題の原因の説明を見た後、一部の学生は、これは簡単に解決できると思うかもしれません。ibdata1 ファイルのサイズを縮小し、テーブル スペースを再利用するだけです。残念なことに、現時点では、InnoDB には ibdata1 ファイルのテーブルスペースを再利用/縮小する方法がありません。ibdata1 ファイルが拡大されると、元のサイズを復元する唯一の方法は、データをバックアップして復元し、インスタンスを再初期化するか、独立した各テーブルスペース ファイルを新しいインスタンスに順番にバックアップして復元することです。これより良い方法はありません。 もちろん、この問題は予防不可能ではありません。上記の理由により、推奨される対策は次のとおりです。
要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: 同じ IP のアクセス頻度を制限するように nginx を設定する方法
1 問題の説明この記事では、確立された複合インデックスをソートし、レコード内の非インデックス フィー...
目次1. Nginx の紹介2. 画像サーバーの構築1. Nginx の紹介Nginx はリバース ...
一般的に: [重要なフラグ1つ] > [特別なフラグ4つ] > 宣言順!importan...
セルの背景画像を設定でき、任意の GIF または JPEG 画像ファイルを使用できます。基本的な構文...
データベースの統計を行う場合、多くの場合、年、月、日に基づいてデータを収集し、echart を使用し...
この記事では、Vueの簡単なコメント機能を実装するための具体的なコードを参考までに共有します。具体的...
目次1. 終了2. クロージャの使用シナリオ1.タイムアウトを設定する2. コールバック3. 手ぶれ...
今日は、データベース遅延ジャンプに関する別の典型的な問題を分析しました。このプロセスでは、参考のため...
なぜこれを使ったのか?それはポスターを作ることから始まりました。それは嵐の夜でした。 。 。さて、無...
1. はじめにpt-query-digest は、MySQL のスロー クエリを分析するためのツール...
デザイナーは世界で最も繊細で感情的な人々だと私はいつも感じています。私がこう言うときに優越感を感じる...
序文通常、h5 ページを作成するときは、WeChat、QQ、Weibo などのエコシステム内でトラフ...
1. サブクエリMySQL 4.1以降はサブクエリをサポートしていますサブクエリ:別のクエリ内にネス...
プロジェクトのテーマがすべての人の美的感覚を満足できないこともあります。このとき、スキン変更機能は非...
公式ドキュメント: https://nginx.org/en/linux_packages.html...