THE ORB
Studio başlatılıyor

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.

groupsZirvede her şey donuyorcodeGeliştirici gerektirir

Önce şunu yap

Bir script veritabanına fazlasıyla sık soruyor. Bunun için birinin hangisi olduğunu bulması gerekiyor.

bug_reportBunun yerine tüm konsolunu yapıştır

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. 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. 2

    Oyuncu bağlanma işleyicisinde sorgular

    playerConnecting katı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. 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. 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. 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.

Bununla birlikte gelen hatalar