MySQL'in bellek kullanımını nasıl optimize edebilirim?


9

KURULUMUM ( örnek )

Aşağıdaki özelliklere sahip bir Amazon Yüksek CPU Ekstra Büyük EC2 örneğinde Linux çalıştırıyorum:

  • 7 GB bellek
  • 20 EC2 Bilgi İşlem Birimi (her biri 2,5 EC2 Bilgi İşlem Birimi ile 8 sanal çekirdek)
  • 1690 GB yerel bulut depolama alanı
  • 64 bit platform

MyISAM depolama motorunda çalışan iki büyük MySQL veritabanım var. Biri 2GB, diğeri 500MB. MySQL'in sorgu hızlarını en üst düzeye çıkarmak için olabildiğince fazla RAM kullandığından emin olmak istiyorum. MySQL bellek yapılandırma seçenekleri gibi bir sürü olduğunu biliyorum key_buffer_sizeve MyISAM_sort_buffer_size,ama bunları optimize bilmiyorum.

SORULARI

  1. MySQL'in şu anda bir Linux sisteminde hangi belleği kullandığını nasıl kontrol edebilirim?
  2. MySQL bellek kullanımını nasıl en üst düzeye çıkarır / optimize eder?
  3. Sorgularımın ve şemamın optimize edildiğini varsayarsak, başka hangi değişiklikleri düşünmeliyim?

htop programı ile kontrol edebilirsiniz.
neworld

Bellek kullanımını en üst düzeye çıkarmak veritabanının tamamını belleğe dönüştürmez. RAM tabanlı bir dosya sistemine sahip olmalısınız ...

4
RAM tabanlı dosya sistemi güvensizdir. Sunucu
çökerse

Yanıtlar:


7

Bu zor bir konu. Burada cevap verilemez, bununla ilgili tüm kitaplar yazılmıştır . İnnodb_buffer_pool_size'nizi yeterince büyütmenizi öneririm. Myisam tabloları kullanıyorsanız key_buffer_size'yi kontrol edin. Ayrıca table_cache ve max_connections dikkate alınmalıdır.

İşte size yardımcı olabilecek bir şey:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- performans-optimizasyon-temelleri / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

DÜZENLE:

@ Drew010 dediği gibi DB kullanım türünü dikkate almak önemlidir. Ağır bir okuma DB için tunning, ağır bir yazma daha çok farklıdır. Ayrıca, diğer stratejileri de düşünebilirsiniz. Memcached, nosql veritabanları vb.


2
Anlaştıkça, nispeten küçük konuşan veritabanlarıdır. Bir ton veritabanı okuma erişimi bekliyorsanız, uygulamanızın veritabanına isabetlerini azaltmak için veritabanından değerleri depolamak için kullanabileceği memcached gibi bir tür önbellek sistemini düşünebilirsiniz. Çoğunlukla ekler yapıyorsanız, disk çok önemli bir faktör olacaktır. Bir dereceye kadar soru, kullanım durumlarınızın ne olduğuna bağlıdır. Veriler çok fazla değişmiyorsa, mysql sorgu önbelleği de daha hızlı sorgularla çok yardımcı olacaktır. Ayrıca dizinlerinizin / birincil anahtarlarınızın iyi olduğundan emin olun.
drew010

+1 haklısın kardeşim. Ben temel tunning istiyordu, ama DB ve diğer şeylerin kullanımını düşünmek önemlidir. Yine burada tartışılamaz, sanırım.
santiago.basulto

1

MySQL'in ihtiyaç duyduğu tüm belleği kullandığından emin olmanız gerekiyorsa, InnoDB'ye geçmelisiniz. MySQL FULLTEXTarama yeteneklerini kullanmadığınız sürece ciddi bir sorun olmayacaktır.

MyISAM durumunda, dahili MySQL anahtar arabellekleri ve sistem önbelleği de dahil olmak üzere bir dizi önbellek kullanılır. En iyi performansı istiyorsanız, her iki önbellek için de alan bırakmanız gerekir, ancak yine de özellikle veritabanlarınız yazma ağırsa MyISAM'ı bu amaçla önermiyorum: MyISAM yazma sırasında tüm tabloyu kilitlerken, InnoDB yalnızca etkilenen satırları kilitler.

Tüm veritabanlarınızı belleğe koysanız bile, yetersiz dizinler veya diğer nedenlerden dolayı yavaş çalışan sorgulara sahip olabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.