厳密にはRAMだけが重要ですか?


4

何十億ものレコードを持つ余分な大きなテーブルを持つプロジェクトで作業しなければならないが、2つのフィールドだけがidで、もう1つはテキストです。

IDはBIGINTとPKに設定され、1行あたり8 + 2(オーバーヘッドの場合は2バイト余分)バイトが索引に使用される場合、64GB RAMは少なくとも50億レコードの索引を保持するのに十分でなければなりません。

しかし私が考えている唯一の要素です。

他にも考慮すべき要素があると思いますか?

また、必要に応じてRAMサイズを増やすこともできます。 そのテーブルは、書き込みがほとんどなく、読み込みが多い最もビジーなテーブルです。

+1

私はこのプロジェクトについて、もう少し情報を求めることができますか?この表は何のために使用されるのですか?どのような問題を解決しようとしていますか? 15 9月. 112011-09-15 07:14:14

3

MySQLはストレージエンジンごとにキャッシュが異なるため、プロジェクトに使用するストレージエンジンを検討する必要があります。

MyISAMはインデックスページのみをキャッシュします。 InnoDBはデータページとインデックスページをキャッシュします。

大規模なIDを持つテーブルがあるとすれば、MyISAMを使用していることを願っています。ここで

あなたが最良のkey_buffer_sizeはの決定を支援するためのクエリです:

SELECT CONCAT(ROUND(KBS/POWER(1024, 
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999), 
SUBSTR(' KMG',IF(PowerOf1024<0,0, 
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) 
recommended_key_buffer_size FROM 
(SELECT LEAST(POWER(2,32),KBS1) KBS 
FROM (SELECT SUM(index_length) KBS1 
FROM information_schema.tables 
WHERE engine='MyISAM' AND 
table_schema NOT IN ('information_schema','mysql')) AA) A, 
(SELECT 2 PowerOf1024) B; 

これはあなたの現在のデータセット(32ビットOSの場合the query will cap the recommendation at 4G (4096M).、4ギガバイト与えられた推奨のMyISAMキーキャッシュ(key_buffer_sizeは)のための設定を行いますあなたはkey_buffer_sizeはが助けにはなりませんサイズ、InnoDBテーブルを使用している場合、制限が64ビットの場合、8ギガバイト

UPDATE 2011-09-16 14:49 EDT

です。InnoDB and MyISAM cache differently

ここでは、クエリと同じ種類のは、あなたのInnoDBのバッファプールのサイズにある:

SELECT CONCAT(ROUND(KBS/POWER(1024, 
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999), 
SUBSTR(' KMG',IF(PowerOf1024<0,0, 
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size 
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables 
WHERE engine='InnoDB') A, 
(SELECT 2 PowerOf1024) B; 
  0

興味深いことに、私はInnoDBを使用することを考えています。だから、私があなたの答えから学んだのは、十分なキーキャッシュがある限りです。 DBのサイズは関係ありませんか? 16 9月. 112011-09-16 16:56:43

  0

私はInnoDBを使ってアドレスを返すように更新しました 16 9月. 112011-09-16 18:49:40

  0

しかし、最大容量はMyISAMの最大容量が8GBだと言いましたが、それはRAMリソースが効率的に利用されないことを意味しますか? {遅すぎるこの質問を申し訳ありません..} 01 10月. 112011-10-01 22:14:09

+1

@Gary:あなたは正しいです。 key_buffer_sizeのために8GBを超えて割り当てられたメモリは無駄になります。 MyISAMではインデックスページだけがキャッシュされるため、これは重要です。特定のMyISAMテーブル専用のキーキャッシュを作成することができます:http://dev.mysql.com/doc/refman/5.5/en/cache-index.html 01 10月. 112011-10-01 22:41:42