Müşterilerimizin veritabanını ekstra bir sunucuya taşıdıktan sonra bir sorunla karşılaştık. Bunun, sitenin performansı üzerinde olumlu etkileri olması gerekirdi, ancak MyISAM'da masa kilitleme ile ilgili bir sorun var. (MyISAM yerine InnoDB kullandığımı duydum, ancak yakın gelecekte motoru değiştiremeyiz).
Bunu, bir moderatör makaledeki bir yorumu etkinleştirdiğinde gerçekleştirilen bir güncelleme sorgusuna tespit edebiliriz. Bu süreç:
- güncelleme sorgusu işlenir
SET status = 1 WHERE id = 5
(dizin ayarlanır) - sayfanın önbelleğe alınmış dosyaları silinir
Bu noktada tüm sayfa yavaşlar. Veritabanının kendisi dakikalarca meşgul. İşlem listesini birkaç kez aldım ve hepsi tablo düzeyinde kilit bekleyen devlette olan yaklaşık 60 farklı seçme sorgusu girdisi gördüm .
1. Tablodaki bu güncelleştirmenin neden tablo düzeyinde tablo düzeyi kilidini beklemek için article_comments
select deyimlerini etkileyebileceğini anlamıyorum article
. İşlem listesinde neredeyse tüm bekleme sorguları bu tablodan alınmıştır. Güncellemelerin / eklemelerin seçimlere tercih edildiğini ve bu tür sorunlara neden olabileceğini okudum, ancak yorumlar etkinleştirildiğinde makaleler tablosunun kendisi güncellenmiyor, bu yüzden seçimler beklememeliydi. Bunu özledim mi?
2. Bu davranışı önlemek veya en azından daha iyi bir denge kurmak için InnoDB olarak değiştirmenin dışında bir şey var mı? Veritabanını yeni sunucuya taşımadan önce bu sorunun görünmemesi konusunda çok sinirliyim. Bazı yanlış yapılandırmalar var ama nasıl tanımlayacağımı bilmiyorum.
key_buffer_size
olarak ayarlandı 1GB
. 10GB
Sorunu azaltmak için bunu arttırmak .