MySQL'de table_cache ayarlama (ve anlama)


18

Mükemmel MySQL performans ayarlama komut dosyasını çalıştırdım ve öneriler üzerinden çalışmaya başladım. Karşılaştığım biri

TABLO CACHE
Geçerli table_cache değeri = 4096 tablo Toplam 1073 tablonuz var. 3900 açık masanız var. Geçerli table_cache isabet oranı% 2, masa önbelleğinizin% 95'i kullanımda. Muhtemelen table_cache dosyanızı artırmalısınız

Ben table_cache okumaya başladı ama MySQL belgeleri oldukça eksik buldum . Onlar table_cache"anılarınız varsa" artırmak için söylüyorlar . Ne yazık ki table_cachedeğişken "Tüm evreler için açık tablo sayısı" olarak tanımlanmıştır.

Bu değişkeni arttırırsam, MySQL tarafından kullanılan bellek nasıl değişir? Bunu ayarlamak için iyi bir değer nedir?

Yanıtlar:


16

Gönderen MySQL belgelerinde

Örneğin, 200 eşzamanlı çalışan bağlantı için, en az 200 × N tablo önbellek boyutuna sahip olmalısınız; burada N, yürüttüğünüz sorguların herhangi birinde birleştirme başına maksimum tablo sayısıdır. Ayrıca geçici tablolar ve dosyalar için bazı ekstra dosya tanımlayıcıları ayırmanız gerekir.

Uygulamanızda 4 tabloyu birleştiren bir sorgu varsa ve 200 eşzamanlı bağlantıyı işleyebilmek istiyorsanız, bu ifadeye dayanarak en az 800 table_cache olmalıdır.

Bildiğim kadarıyla bellek kullanımına göre, bu numaralara sahip değilim, önbelleğe alındığı tablolarınızın boyutuna bağlı olduğundan şüphelenirim.


İşaretçi için teşekkürler. RAM kullanımının nasıl değişeceğini bilmeden table_cache numaramı arttırmaktan biraz korkuyorum. Makinenin RAM'i zaten dolu.
jotango

Belleğin gerçekten tükendiğinden mi yoksa yalnızca belleğin arabellek / önbellek tarafından alındığından emin misiniz? "Free -m" komutunu çalıştırın ve ikinci satıra bakın (- / + buffers / cache), bu hafıza kullanımınızın mb cinsinden daha doğru bir gösterimidir. Yanıtları bakın serverfault.com/questions/73189/... ve serverfault.com/questions/9442/...
ManiacZX

Evet, gerçekten hafızayı kullanıyor. Dün değişti, bu bir üretim db için gerçekten kötü. Bugün HP'den bir RAM yükseltmesi sipariş ettim.
jotango

şimdi buna gelenler için, bu cevap mysql 5.1+ için doğru değildir. artık table_open_cachedokümanlara baktığınızda atıfta bulunuyor . Bakarken @MarkRs cevabıtable_cache
Jason

3

Opened_Tables değişkenini izlemeli ve ne kadar hızlı arttığını görmelisiniz. Yeni tablolar oluşturduğunuzdan (geçici olanlar dahil) önemli ölçüde daha hızlıysa, tablo önbelleğiniz çok küçük olabilir.

Table_Cache her zaman - çoğunlukla da - sunucudaki toplam tablo sayısından önemli ölçüde daha büyük olmalıdır. Aksi takdirde tabloları açmaya ve kapatmaya devam eder.

Bir sunucu yeniden başlatıldıktan hemen sonra veya çok sayıda FLUSH TABLES kullanarak (sorgu sayısına bağlı olarak) zamanı ölçmedikçe,% 2 önbellek isabet oranı elde edebileceğinizi göremiyorum. Normalde tablo önbellek isabet oranı% 99,9 olmalıdır, aksi takdirde performans düşecektir.

Önlemek eğer bir FLUSH TABLES yapmayın, önbelleği havaya uçurur.

FRM dosyasını okumak gerektiğinden tabloları açmak pahalıdır. MyISAM'de, bir tabloyu kapattığında, anahtar önbelleğindeki dizinlerden gelen tüm blokları dışarı attığı için (diğer motorlardan) önemli ölçüde daha kötüdür. Yani bir tabloyu kapatmak onun dizinlerini anahtar önbellekten atar == iyi değil! Diğer motorlar önbelleğe alınmış blokları tutar, ancak yine de meta verileri yeniden okumanız ve bazı yapıları tahsis etmeniz gerekir.

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.