Too many connections / bağlantı havuzu tükendi
Veritabanına aynı anda fazla şey sordu ve o da daha fazlasını kabul etmeyi bıraktı. Bu genelde en yoğun anında vurur.
Önce şunu yap
Bir script veritabanına fazlasıyla sık soruyor. Bunun için birinin hangisi olduğunu bulması gerekiyor.
Ne anlama gelir
MySQL yeni bir bağlantıyı reddetti çünkü zaten max_connections sınırında, ya da oxmysql'in havuzunda boş yuva yok ve bekleme zaman aşımına uğradı. Canlı bir sunucuda bu, veritabanına dayanan her şeyin aynı anda donması olarak görünür, genelde en yoğun nüfusta.
Neden olur
Ne sıklıkla doğru cevap olduğuna göre sıralı.
- 1
Bir tick döngüsünde sorgu
Wait(0)ya da kısa aralıklı, her yinelemede sorgu yapan bir thread. Oyuncu başına böyle bir döngü, herhangi bir havuzu tüketmeye yeter. - 2
Oyuncu bağlanma işleyicisinde sorgular
playerConnectingkatılım başına çalışır; oradaki yavaş bir sorgu el sıkışmanın tamamı boyunca bir bağlantı tutar, ve bir katılım dalgası hepsini tutar. - 3
Havuz, sunucunun ihtiyacından küçük
oxmysql varsayılanları mütevazıdır. Oyuncu başına kalıcılık yapan 200 slotluk bir sunucunun daha fazlasına ihtiyacı vardır.
- 4
Uzun süren sorgular bağlantıları tutuyor
Eksik bir indeks, 2ms'lik bir sorguyu 2s'lik bir sorguya çevirir, ve bağlantı o 2s boyunca tutulur.
- 5
Başka bir uygulama MySQL örneğini paylaşıyor
Bir web paneli, bir Discord botu, phpMyAdmin.
Hangisinin seninki olduğu nasıl anlaşılır
Sorun sürerken:
SHOW PROCESSLIST;
Tekrar eden aynı sorgular bir döngü demektir. Uzun Time değerleri eksik indeksler demektir. Sonra MySQL'in neye izin verdiğini kontrol et:
SHOW VARIABLES LIKE 'max_connections';
Nereye bakmalı
Sorgu yapan her CreateThread, ve her playerConnecting işleyicisi.
Nasıl düzeltilir
Döngüde sorgu yapmak yerine önbelleğe al, tavanları yükselt, ve süzdüğün şeyi indeksle:
# server.cfg set mysql_connection_string "mysql://user:pass@host/db?connectionLimit=20" -- MySQL SET GLOBAL max_connections = 300; CREATE INDEX idx_users_identifier ON users (identifier);
Hâlâ kendi kodunda mı takıldın?
Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.
bug_reportServer Fixer'ı açBu tür bir hata için Script Optimizer buna yol açan sorgu kalıplarını yakalar.