innodb_file_per_tableはお勧めですか?


19

テーブルの1つだけが数百万行に成長し、残りは100万行未満になるアプリケーションがあります。それでは、innodb_file_per_tableを使用するか、1つの.ibdのままにしておくべきでしょうか。実行する結合があるときに、より多くのディスクアクセスが必要なので、私はそれと一緒に行かないと言ういくつかの記事を読みましたか?レポート生成のために、このテーブルと他のテーブルを結合します。

回答:


24

あなたが行かなければならないinnodb_file_per_tableを InnoDBテーブルの現在のインフラストラクチャでの洗浄方法は、いくつかを行う必要があります。

多くのDBホスティングクライアントがMySQLをセットアップし、InnoDBをデフォルト状態のままにしているのを見てきました。これにより、システムテーブルスペース(ibdata1として知られている)が大きく成長します。

innodb_file_per_tableに切り替えた場合でも、.ibdファイルをibdata1から抽出する必要があり、ibdataは縮小しません。たとえば、ibdata1内にmydb.mytableというテーブルがあり、2GBを占有している場合、それを抽出するには次のようにする必要があります。

ステップ01)これを/etc/my.cnfに追加します

[mysqld]
innodb_file_per_table

ステップ02) service mysql restart

ステップ03) ALTER TABLE mydb.mytable ENGINE=InnoDB;

これにより、ファイルは/var/lib/mysql/mydb/mytable.ibdになります

残念ながら、変更前にテーブルが占有していた2GBのスペースは回収できません。InnoDBのインフラストラクチャをクリーンアップする方法と理由について、過去の投稿を書きました。

この大きな変更を行ったら、innodb_open_files(デフォルトは300)を増やすことを忘れないでください。それ以外の場合、ディスクアクセスは非常に制限されます。

結合に関しては、結合基準をサポートする適切なインデックスがあることを確認してください。

更新2012-04-02 11:30 EDT

すべてのDDLはibdataの外部で実行されるため、新規インストールでinnodb_file_per_tableを使用すると、ibdata1の成長が非常に遅くなります。前述のように、InnoDBテーブルは次のように縮小できます。

ALTER TABLE mydb.mytable ENGINE=InnoDB;

更新2012-04-02 16:50 EDT

バックアップに関しては、.ibdファイルのコピーを作成する際には非常に注意してください。どうして?

すべての.ibdファイル内には、tablespace_idと呼ばれる特別な値があります。ibdata1にはtablespace_id値のリストがあります。テーブルの削除と再作成が必要なテーブルメンテナンスを実行する場合、tablespace_idは異なります。このような.ibdファイルのコピーを作成することは、ibdata1のコピーも作成する場合にのみ使用するためにデータベースに統合できます。これは、他のすべてのInnoDBテーブルのtablespace_idを危険にさらします。これを考慮すると、mysqldumpはデータの論理コピーであるため、mysqldumpバックアップを実行することをお勧めします。つまり、バックアップはibdata1の特定の時点とは無関係であり、操作性の問題なしに自由にリロードできます。


これは新しいサーバーになるので、どうすればいいですか?なぜinnodb_file_per_tableを使うのが良いと言うのですか?時間の経過とともに、このテーブルは成長します。どのような制限エラーが発生するのでしょうか。
初心者

7

彼が言及していないことについて、@ RolandoMySQLDBAに同意してください:バックアップ。

MySQLのバックアップ体制がすべて整っていて、ファイルシステムのバックアップ戦略に.ibdファイルを含めていない場合、これはそれほど重要ではありません。ただし、innodbテーブルに1バイトを追加すると、.ibdテーブルの増分バックアップが発生し、バックアップストレージがすぐに不足することがわかります。


はい、私もバックアップを実行する予定です。マスターからマスターへのバックアップが必要な場合、マスターからスレーブへの違いは何ですか?両方がお互いをバックアップしますか?設定で何を変更する必要がありますか?
初心者14

4

まさにこのような状況にあるアプリケーションがあります。いくつかの大きなテーブルといくつかの小さなテーブルです。

小さなものはそのibdata1ままにしておき、大きなものは独自のファイルに入れました。

私はそうすることでそうします innodb_file_per_tableデフォルトでオンに切り替えだけにテーブルを移動するため一時的にオフにibdata1してALTER TABLE


@gigigi ibdata1に小さなものを残し、独自のファイルに大きなものを残す方法は、このinnodb_file_per_tableを設定した場合、すべてが独自のファイルにあることを意味しますか?
初心者14

あなたの後にのみALTER TABLE。私の戦略はinnodb_file_per_table、小さなテーブルを移動しibdata1てから再びオンにするために、定期的にスイッチを入れて、カジュアルにスイッチを切ることです。
-glglgl

ここで問題ではなく、常にinnodb_file_per_tableのままにしておくことは問題ありませんか?
初心者

[OK]を、私見...しなければならない
glglgl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.