CPU yoğun bir MySQL'de bir DB bağlantısı (web uygulaması için) nasıl açılır ve kapanır
- ... DB yazılımı localhost üzerinde olduğunda?
- ... DB yazılımı başka bir makinede olduğunda?
CPU yoğun bir MySQL'de bir DB bağlantısı (web uygulaması için) nasıl açılır ve kapanır
Yanıtlar:
DB Bağlantısı başına ayrılan bellek miktarını düşünün. Hangi şeyler tahsis edilmelidir? Göre MySQL 5.0 Sertifikasyon Eğitim Kılavuzu, sayfa 357 :
Sunucu, her istemci bağlantısı için birkaç arabellek tutar. Bunlardan biri müşteri ile bilgi alışverişi için bir iletişim tamponu olarak kullanılır. Tabloları okumak ve birleştirme ve sıralama işlemleri gerçekleştirmek için istemci başına diğer arabellekler korunur.
Bağlantı başına arabellekleri hangi ayarlar yönetir?
Bir bağlantı oluştuğunda bu arabelleklerin tahsis edilmesi ve yeniden konumlandırılması zaman alır. Bu değerlerin toplamını max_connections ile çarpmayı unutmayın . Bir yan not olarak, mysql_pconnect'i PHP ve MySQL'in kalıcı bağlantıları iyi geçmediği için kullanmaktan kaçının . İşte bu konuda iki bilgilendirici bağlantı:
OLTP gibi ağır okunur, ağır yazma ortamlarında, bu, RAM kullanımı ve işletim sistemindeki değişime bağlı olası engelleme açısından pahalı olacaktır. Düşük yazma, low_read bir web sitesinde, o kadar endişelenmezdim.
"Ne kadar daha maliyetli" olduğuna emin değilim. Aynı bağlantıyı tekrar kullanmaktan kesinlikle daha pahalıdır. Gözlemleyeceğiniz şey, bağlantı havuzunu doğru bir şekilde kullanıp kullanmadığınıza, havuzunuzun ne kadar doygun olduğuna, kutudaki mevcut kaynaklara vb.
Genel olarak, veritabanıyla bazı etkileşimler yapmak için bir döngü gerçekleştiriyorsanız, döngü içinde açılıp kapanmaktan (aynı sıklıkta gördüğüm bir anti-desen) aynı etkin bağlantıyı yeniden kullanmaktan çok daha iyi olacaksınız. .
Bir nesneyi yeniden kullanma ve onu yırtma ve tekrar inşa etme (her ikisinin de avantajları ve dezavantajları vardır) arasındaki ikilem genellikle bir uzlaşma ile ele alınabilir: nesneyi önbelleğe alın, ancak sınırlı bir süre (yani son kullanma tarihi ile). Nesneye sık sık erişiliyorsa, yeniden kullanılmaya devam eder. Ancak bir süre kullanılmazsa, bir son kullanma mekanizması onu kullanır ve bir kez daha gerektiğinde yeniden oluşturulmaya zorlar.
Bir sistem, bellek azaldığında başlatılan bu tür önbellekler için küresel bir kancaya sahip olabilir ve bu da hepsini kullanılmayan nesneleri düşürmeye zorlar.
Mysql, Konu Önbelleğini (thread_cache_size) kullanarak bağlantıları (veya konuları) önbelleğe alır. Maksimum değeri 100'dür. İstemci bağlantıyı kapattığında, önbelleğe döndürülür. Yeni bir bağlantı açıldığında, iş parçacığı önbelleğini kontrol eder. Çok meşgul bir sistemde, özellikle uzun süren sorgularınız varsa, kapanış bağlantısını açmak pahalı olabilir.
https://dev.mysql.com/doc/refman/5.6/tr/connection-threads.html Mysql Enterprise'ı satın alabiliyorsanız, Mysql 5.6'da uygulanan Thread Pool eklentisini kullanabilirsiniz.