"Çok fazla bağlantı" için kök nedenini bulmak için nasıl

6 Cevap php

I'm running a web service which runs algorithms that serve millions of calls daily and run some background processing as well. Every now and than I see "Too many connections" error in attempts to connect to the MySQL box" for a few seconds. However this is not necessarily attributed to high traffic times or anything I can put my finger on.

Ben neden darboğaz bulmak istiyorum. Belirli zamanlarda dışında bu sunucu çok CPU ve bellek açısından yüklü değil olur, ve açık 2-3 bağlantılarını (konu) vardır ve her şey sorunsuz çalışıyor. (I izleme için Zabbix kullanın)

Herhangi bir yaratıcı iz nasıl fikir?

6 Cevap

Ne MySQL tablo türü kullanıyorsunuz? MyISAM veya InnoDB (veya başka biri)? MyISAM tablo düzeyi kilitleme kullanır, böylece aynı masada ve çok sayıda seçme sorguları bir güncelleme ile ardından ağır bir seçme çalışan var bir senaryoda, içine çalıştırabilir. Son select sorguları ardından güncelleme (- ağır - seçmek bittikten sırayla ilk kadar beklemek zorunda olan) bitene kadar beklemek zorunda kalacaklar.

InnoDB için innotop gibi bir araç (http://www.xaprb.com/blog/2006/07/31/how-to-analyze-innodb-mysql-locks/ bakınız) çıkmazdan nedenini bulmak için yararlı olabilir.

BTW meydana kilidi neden olan sorgu değildir kilitli durumda olanların biri olmalıdır.

try to have an open mysql console when this happens and issue a

SHOW PROCESSLIST;
to see what queries are being executed. Alternatively you could enable logging slow queries (in my.cnf insert this line:

log-slow-queries=/var/log/mysql-log-slow-queries.log

[mysqld] bölümü ve kullanım

set-variable=long_query_time=1
, bir sorgu yavaş kabul edilmesi için alınması gereken minimum zamanı tanımlamak için. (Değişikliklerin etkili olması için sırayla mysql yeniden hatırlıyorum)

SHOW OPEN TABLES command will display the lock status of all the tables in MySQL. If one or more of your queries is causing the connection backlock, combining SHOW PROCESSLIST ve açık tablolar tam olarak hangi sorguyu olarak daraltmak gerekir işler kadar tutuyor.

May be related to this bug in MySQL for FULLTEXT search: http://bugs.mysql.com/bug.php?id=37067

Bu durumda, FULLTEXT başlatma aslında MySQL sarkar. Ne yazık ki bir çözüm gibi görünmüyor.

Eski bir konu. Ancak, sadece bu sorunu vardı ve ben bir mysqldump komut günde 3 kez planlanan vardı çünkü öyleydi. Benim web uygulaması da kullanım adil bir miktar başlamıştı eğer mysqldump veritabanındaki tüm tabloları kilitleme iken bu zamanlarda, web uygulama sorguları hepsi sadece birbirlerinin üstüne kendilerini sıraya. En iyi seçenek, kurulum için ayrı bir makinede bir çoğaltma köle ve köle yerine, üretim sunucusundan yedeklerini almak.

Genel olarak da sizin uygulama çok, ve PHP bilmeden, ancak olmadan size DB bağlantıları kalan herhangi bir sorun yok emin misin? Hatta istekten sonra açık kalmak örneğin bağlantıları işlendi?

PHP bir bağlantı mysql_close($conn); çağrılırken komut dosyası biter veya zaman genellikle otomatik olarak kapatılır ancak Homegrown bağlantı havuzu her türlü kullanıyorsanız, bu sorunlar getirebilir.