2012-03-16 3 views
4

大きなテーブルを分割する場合、フラグ-innodb_file_per_tableをTRUEまたはFALSEに設定することができます。 Trueは多くのファイル(パーティションごとに1つ)を作成し、ディスクの使用量を大幅に増やしますが、私は別のボリュームにパーティションを広げることができます。 FALSEはテーブルを1つの大きなファイルとして保持します。すべてのファイルを同じ論理ボリュームに保管していると仮定すると、2つのオプションの間に重大なクエリのパフォーマンスの違いがあると思いますか?あるいは、より一般的には、ディスクの使用と管理のほかに2つのオプションを選択する際に考慮すべき問題はありますか?複数ファイルと1ファイルのパフォーマンスを分割するmySQLをパーティション化するには?

いくつかの統計情報:テーブルの

  • 総数:20(ほんの数が、私はparitioningに興味があります - question私の他を参照)
  • 最大のテーブルには、100Mレコードを持っています。
  • 総DBサイズは約60Gです。
+0

あなたは少なくともあなたのテーブルがどれくらい大きいのか、そしてデータベースのテーブルの数を言うことができますか?データベースの合計サイズ? – bas

答えて

7

-innodb_file_per_tableは、1つのテーブルを1つのファイルに保存するか、複数のファイルに分割するかを決定します。

ここに、それぞれのアプローチのいくつかの賛否両論があります(必ずしも完全なリストである必要はありません)。一般的に

Single file per table     Multiple files per (partitioned) table 
-------------------------------------- -------------------------------------- 
+ System uses less filehandles   - System uses more filehandles 
+ One one fsync per second per table  - Possibly many more fsync calls (bottleneck) 
    (less fs overhead (journal etc))   (more fs overhead) 
+ Single file uses less space overall - Much larger disk space usage 
- Single file fragments badly   + Less fragmentation 
- Optimize table (et al) takes longer + You can choose to optimize just one file 
- One file = one filesystem    + You can put heavy traffic files on a fast fs 
              (e.g. on a solid state disk) 
- Impossible to reclaim disk space  + possible to emergency-reclaim disk space 
    in a hurry (truncate table takes long) fast (just delete a file) 
- ALTER TABLE can use large % of disk- + rebuilding with ALTER TABLE will use less 
    space for temp tables while rebuilding temp disk space 

私はは、複数のファイルをお勧めしません。
作業負荷が重いフラグメンテーションにつながる場合は、optimize tableが長すぎます。複数のファイルを使用すると意味があります。

スペース
を再生一部の人々はInnoDBのテーブルファイルで、常に成長し、決して縮小し、行が削除された場合に無駄なスペースにつながっているという事実についての大騒ぎをたくさん作る。忘れます
次に、空きディスク容量が足りなくなるようにそのスペースを再利用するためのスキームが用意されています。 (truncate table x)。
これは複数のファイルではるかに高速に動作しますが、データベースはほとんど常に大きくなり、(ほとんど)収縮しないので、このすべてはナンセンスです。したがって、スペースを再利用するとテーブルに多くの時間(CPUとIO)完全にロックされます(読み取りと書き込みは許可されません)。
次回のデータ追加後に、90%のフルディスク(再生後50%)が99%いっぱいになることがわかります。用心ALTER TABLEを使用している場合

は、しかし...
は、次のシナリオを検討:
を - ディスクが60%いっぱいです。
- データベースが50%、他のファイルが10%を占めます。
テーブル上にalter tableを実行すると、1つのファイルにすべてのテーブルがある場合、ディスク領域が不足します。
複数のファイルに保存している場合は、問題がないはずです(待機中のカフェインの過剰摂取を除く)。

+0

もう一度ありがとうございます。私は特にクエリのパフォーマンスについて質問しました(特にSELECTクエリとUPDATEクエリに興味があります)。あなたは、情報に基づいた推測や、そのトピックに関する考えを持っていますか?私はパーティション(http://dev.mysql.com/doc/refman/5.1/en/partitioning-list.html)をリストすることを計画しており、クエリごとに何千ものレコードに対して多くのSELECTとUPDATESを実行しますが、これらは常にオンですリスト分離されたパーティションのうちの1つまたは複数のパーティション。 – Paul

関連する問題