Kesinlikle sadece RAM önemli mi?


4

Milyarlarca kaydı olan ekstra geniş bir tabloya sahip bir proje üzerinde çalışmam gerekiyor, ancak yalnızca iki alan bir tanesi kimlik diğeri metin.

Ve kimliği BIGINT ve PK olarak ayarladıysanız, sıra başına 8 + 2 (genel gider için fazladan 2 bayt) bayt indekslenirse, hesaplamada 64GB RAM en az 5 milyar kayıt endeksine sahip olacak kadar yeterli olacaktır.

Ama düşündüğüm tek faktör.

Göz önünde bulundurmam gereken başka faktörler de var mı?

Gerekirse ve RAM büyüklüğü de arttırılabilir. Ve bu tablo çok az yazı ve okuma içeren en yoğun masa olacaktır.

+1

Bu proje hakkında biraz daha bilgi isteyebilir miyim?Bu tablo ne için kullanılacak?Ne problemi çözmeye çalışıyorsun? 15 eyl. 112011-09-15 07:14:14

3

Projeniz için kullanacağınız depolama motorunu göz önünde bulundurmanız gerekir, çünkü MySQL her depolama motoru için farklı önbellekleme yapar.

MyISAM yalnızca dizin sayfalarını önbelleğe alır.InnoDB verileri ve dizin sayfalarını önbelleğe alır.

Büyük kimlikleri olan bir tablonuz olduğu göz önüne alındığında, umarım MyISAM kullanıyorsunuzdur.

En iyi key_buffer_size belirlemenize yardımcı olacak bir sorgu:

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;

Bu, mevcut veri setinizi (the query will cap the recommendation at 4G (4096M).) verilen MyISAM Anahtar Önbelleği (key_buffer_size) için Önerilen Ayarı verir, 32 bit işletim sistemi için 4 GB sınırdır, 64 bit için 8 GB

GÜNCELLEME 2011-09-16 14:49 EDT

InnoDB kullanıyorsanız, key_buffer_size öğesinin boyutlandırılması yardımcı olmaz.InnoDB and MyISAM cache differently .

InnoDB Buffer Pool'nuz için sorgunuz aynıdır:

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

İlginç bir şekilde InnoDB kullanmayı düşünüyorum çünkü yük altında daha iyi çalışıyor.Yani, cevabınızdan öğrendiğim şey, yeterli anahtar önbellek olduğu sürece.DB boyutu önemli değil mi? 16 eyl. 112011-09-16 16:56:43

  0

InnoDB kullanarak adresime cevabımı güncelledim 16 eyl. 112011-09-16 18:49:40

  0

Ancak, MyISAM için maksimum sınırın 8GB olduğunu belirttiğinizde, RAM kaynaklarının verimli kullanılmayacağı anlamına gelir.{Bu soruyu çok geç sorduğum için özür dilerim ..} 01 eki. 112011-10-01 22:14:09

+1

@Gary: Haklısın.Key_buffer_size için 8 GB'ın üzerinde ayrılmış bellek boşa harcanır.MyISAM için yalnızca dizin sayfaları önbelleğe alındığından bu çok önemlidir.Belirli MyISAM tablolarına özel anahtar önbellekleri oluşturabilirsiniz: http://dev.mysql.com/doc/refman/5.5/tr/cache-index.html 01 eki. 112011-10-01 22:41:42