🚦
Hosting

"Too many connections" xatosi: sabab va yechim

10.11.2026
← Barcha maqolalar

Sayt odatda tez ishlaydi, ammo tashrifchilar ko'paygan paytda sahifalar o'rniga baza xatosi chiqa boshlaydi, logda esa Too many connections yozuvi paydo bo'ladi. Bu xato MySQL serveri yangi ulanishni qabul qila olmayotganini bildiradi: barcha "o'rindiqlar" band, navbatdagi so'rov esa eshik oldida rad etiladi. Bu maqolada xatoning qayerdan kelib chiqishini, uni qanday tekshirish va yuk ostida ham barqaror ishlashi uchun nima qilish kerakligini ko'rib chiqamiz.

1040 xatosining mexanizmi

MySQL serverida max_connections parametri bir vaqtning o'zida ochiq turishi mumkin bo'lgan ulanishlarning umumiy sonini belgilaydi. Har bir PHP jarayoni sahifani tayyorlash uchun bazaga ulanadi va ish tugaguncha bu ulanishni ushlab turadi. Agar bir vaqtda ochiq ulanishlar soni limitga yetsa, yangi ulanish urinishi quyidagi xato bilan tugaydi:

ERROR 1040 (HY000): Too many connections

Bu xato bitta foydalanuvchiga emas, butun serverga tegishli ekanini yodda tutish muhim. Foydalanuvchi darajasidagi limit oshganda boshqa xato, ya'ni 1203 max_user_connections chiqadi, soatlik kvota tugaganda esa 1226. Shuning uchun logda aynan qaysi kod yozilganini aniqlash to'g'ri tashxisning asosi hisoblanadi.

Ulanishlar nega to'lib qoladi

Ko'pchilik bu xatoni "tashrifchilar juda ko'p" deb tushunadi, lekin amalda sabab ko'pincha ulanishlarning uzoq vaqt band bo'lib qolishidadir. Agar har bir sahifa 50 millisekundda tayyorlansa, yuz ulanish bilan sekundiga minglab so'rovga xizmat qilish mumkin. Biroq bitta sekin so'rov jadvalni qulflab qo'ysa, unga bog'liq boshqa so'rovlar navbatda kutib turadi, ularning har biri esa o'z ulanishini band qiladi. Natijada bir necha soniyada barcha ulanishlar to'ladi.

Boshqa keng tarqalgan sabablar orasida bir xil sahifalarni tinimsiz so'raydigan botlar, keshsiz og'ir kategoriya va filtr sahifalari, uzoq ishlaydigan eksport yoki hisobot skriptlari bor. Shuningdek, PHP ishchilari soni bazaning ulanish limitidan katta bo'lsa, yuk oshganda veb-server bazani o'zi ko'tara olmaydigan darajada ko'p parallel so'rov bilan "bosib" yuboradi.

Holatni tekshirish buyruqlari

Agar o'z VPS serveringiz bo'lsa yoki bazaga administrator huquqi bilan kira olsangiz, avval limit va joriy holatni ko'rib chiqing. Threads_connected hozir ochiq ulanishlar sonini, Max_used_connections esa server ishga tushganidan beri qayd etilgan eng katta qiymatni ko'rsatadi. Agar ikkinchisi limitga teng bo'lsa, server haqiqatan ham chegaraga borib urilgan:

SHOW VARIABLES LIKE 'max_connections';
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';

Keyingi qadam ulanishlar nima bilan bandligini aniqlash. SHOW FULL PROCESSLIST har bir ulanish qaysi foydalanuvchiga tegishli ekanini, qancha vaqtdan beri ishlayotganini va qaysi so'rovni bajarayotganini chiqaradi. Uzoq Time qiymatiga ega so'rovlar yoki Waiting for table metadata lock holatidagi qatorlar ko'p bo'lsa, muammo yukda emas, balki aniq bir so'rovda:

SHOW FULL PROCESSLIST;
-- ilojsiz osilib qolgan so'rovni to'xtatish:
KILL 48213;

MySQL limitdan tashqari bitta qo'shimcha ulanishni yuqori huquqli administrator uchun saqlab qo'yadi. Shu sababli hamma ulanishlar band bo'lganda ham root foydalanuvchisi odatda kirib, vaziyatni ko'ra oladi.

Limitni oshirish va bo'sh ulanishlarni tozalash

Limitni server ishlab turgan paytda vaqtincha oshirish mumkin, ammo bu qiymat qayta ishga tushirishdan keyin yo'qoladi. Doimiy o'zgarish uchun MySQL konfiguratsiya fayliga yoziladi. Shu bilan birga wait_timeout qiymatini kamaytirish foydali: standart holatda bo'sh turgan ulanish soatlab ochiq qolishi mumkin, bu esa limitni behuda egallaydi:

# vaqtincha, qayta ishga tushirishgacha
SET GLOBAL max_connections = 300;

# doimiy: /etc/mysql/my.cnf yoki /etc/my.cnf, [mysqld] bo'limi
[mysqld]
max_connections = 300
wait_timeout    = 120

# keyin qayta ishga tushirish (xizmat nomi tizimga qarab farq qiladi)
sudo systemctl restart mysql

Limitni o'ylamasdan katta qilish ham xavfli. Har bir ulanish o'z buferlari uchun xotira oladi, shuning uchun mingta ulanishga ruxsat berilgan, lekin xotirasi kichik serverda yuk oshganda MySQL xotira yetishmasligidan to'xtab qolishi mumkin. Limitni serverning operativ xotirasi va innodb_buffer_pool_size bilan birga baholash kerak. Shared hostingda esa bu sozlamalarni foydalanuvchi o'zgartira olmaydi, ular hosting provayderi tomonidan boshqariladi.

Ilova tomonida nima qilish mumkin

Eng samarali yechim ko'pincha bazaga ulanishlarning o'zini kamaytirishdir. Quyidagi choralar hech qanday server sozlamasiz ham sezilarli natija beradi:

Amaliy misol: imtihon natijalari e'lon qilingan kun

Toshkentdagi xususiy maktabning misol.uz sayti yil davomida muammosiz ishlardi. Kirish imtihonlari natijalari e'lon qilingan kuni esa minglab ota-onalar bir vaqtda natijalar sahifasini ocha boshladi va sayt bir necha daqiqadan keyin Too many connections xatosini bera boshladi. Tekshiruv ko'rsatdiki, natijalar sahifasi har ochilganda indekssiz ustun bo'yicha butun jadvalni qidirib chiqar, har bir so'rov bir necha soniya davom etardi.

Ustunga indeks qo'shilgach, so'rov vaqti millisekundlarga tushdi, natijalar sahifasi esa qisqa muddatli keshga olindi. Ulanish limiti o'zgarmagan bo'lsa ham, xato qaytib kelmadi, chunki har bir ulanish endi bir zumda bo'shardi. Bu misol limitni oshirishdan oldin ulanishlar nima bilan band ekanini aniqlash qanchalik muhimligini yaxshi ko'rsatadi. Agar sayt sayt.uz hostingida bo'lsa va xato tez-tez takrorlansa, vaqt va sahifa manzilini ko'rsatib texnik yordamga tiket ochish mumkin.

Oldindan tayyorgarlik

Ulanishlar ko'pincha oldindan ma'lum bo'lgan voqealarda to'ladi: aksiyalar, natijalar e'lon qilinishi, reklama kampaniyalari. Bunday kunlardan oldin eng ko'p ochiladigan sahifalarni oddiy yuk testi bilan sinab ko'rish, kesh ishlayotganini tekshirish va sekin so'rovlarni tuzatib qo'yish sayt aynan eng kerakli paytda ishdan chiqmasligini ta'minlaydi.

O'xshash maqolalar

📁 FileZilla va WinSCP bilan hostingga SFTP orqali ulanish 🗄️ ISPmanager'da ma'lumotlar bazasi va foydalanuvchi yaratish 🔤 utf8mb4: emoji va o'zbek harflari buzilmasligi uchun MySQL kodirovkasi 📦 Next.js standalone build: kam resurs bilan ishlatish va kichik serverga joylash
🌐 Til
🇺🇿 O'zbek ✓ 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English