Bu cevabı aşağıdaki Rolando'nun cevabına tamamlayıcı bilgi olarak sunuyorum.
Sunucu üretilmeden önce
İnnodb_buffer_pool_size değerini MySQL tarafından en sık kullanılan tablolara göre hesaplayın. En büyük tabloları veritabanındaki boyutlarına göre tanımlamak için bu komut dosyasını kullanabilirsiniz:
select table_schema, table_name, round(data_length/1024/1024,2) as size_mb
from information_schema.tables where table_schema like 'my_database'
order by size_mb desc;
+--------------+-------------------------+---------+
| table_schema | table_name | size_mb |
+--------------+-------------------------+---------+
| heavybidder | user | 522.55|
| heavybidder | bid | 121.52|
| heavybidder | item_for_sale | 10.52|
| heavybidder | account_user | 5.02 |
| heavybidder | txn_log | 4.02 |
| heavybidder | category | 0.02 |
+--------------+-------------------------+---------+
Veritabanımızdaki en büyük tabloların hangileri olduğunu bildiğimize göre, hangilerinin en sık kullanıldığını belirlememiz gerekiyor. Bunu yapmak için, en çok hangi tablolara erişildiğine bakmak için Jet Profiler (JP) gibi bir profil oluşturma programı kullanırdım. JP, hangi tablolara en sık erişildiğini gösterir. İşte JP'deki bu bölümden bir ekran görüntüsü
Bunu göz önünde bulundurarak, artık kullanıcı ve teklif tablolarının yaklaşık 640 MB disk alanı aldığını biliyorum, JP'ye göre çok sık kullanılıyorlar ve bu da MySQL'in dizinlerini ve verilerini Rolando olarak tampon havuzunda saklayacağı anlamına geliyor. yorumlarında aşağıda bahsedilmektedir.
MySQL'in en büyük ve en sık kullandığım tablolarım için veri depolamak için yeterli belleğe sahip olduğundan emin olmak için, innodb_buffer_pool_size'yi 640MB'de tanımlarım.
Bazı ek noktalar da vardır, ancak innodb_buffer_pool_size için geçerli değildir.
Bu 32Bit mi yoksa 64 bit mi? 32Bit sistemde, PAE'yi etkinleştirmediğiniz sürece 4 GB ile sınırlandırılırsınız. Windows'da bu, Windows Enterprise veya Datacenter sürümlerini çalıştırmak anlamına gelir.
Sisteminizde çalışan diğer işlemlerin ne kadar belleğe ihtiyacı var? Özel bir MySQL sunucusunda, işletim sistemi için% 5 ile% 10 arasında bırakacağım. Windows'da, bellek kullanımını analiz etmek için İşlem Gezgini'ni kullanabilirsiniz. Linux'ta sysstat, free, htop, top ve vmstat var.
Veritabanı sadece Innodb tablolarından mı yoksa Innodb ve MyISAM'ın bir karışımından mı oluşuyor? Bu ikisinin bir karışımı ise, key_cache, birleştirme değişkenleri, sorgu önbelleği vb. İçin bellek ayırırım. Daha sonra sunucu üretildikten sonra MyISAM isabet oranınızı hesaplayabilirsiniz.
Sunucu üretildikten sonra
Innodb için şu anki isabet oranı nedir?
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests).
Anahtar Önbellek İsabet Oranı nedir
1 - (Key_reads / Key_read_requests)
Oranı mümkün olduğunca% 100'e yaklaştırmaya çalışırım.
Tablolarınız tampon havuzuna ne kadar iyi uyuyor?
Tablo verilerinin buffer_pool'unuza ne kadar iyi uyduğuna da bakabilirsiniz. ve bellekteki dizin sığdırma yüzdesi nedir (fit_pct). " Yalnızca Percona sunucusu için geçerlidir
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/