MySQL Hatası 1040: Çok Fazla Bağlantı Nasıl Düzeltilir

Yayınlanan: 2024-03-29

MySQL hatası 1040: Bir MySQL sunucusu izin verilen maksimum istemci bağlantısı sayısına ulaştığında çok fazla bağlantı hatası ortaya çıkıyor. Bu sorunu ele almanın ayrıntılarına dalmadan önce, bu hatanın oluştuğu ortamı ve bunun neden birçok geliştirici ve veritabanı yöneticisi için ortak bir engel olduğunu anlamak çok önemlidir.

Birçok web uygulamasının temel taşı olan MySQL, istemci isteklerini bağlantılar aracılığıyla yönetir. Bir uygulama veya kullanıcı MySQL'i her sorguladığında yeni bir bağlantı kurar. Bu bağlantılar, sunucunun kararlı kalmasını ve her isteği etkili bir şekilde karşılayabilmesini sağlamak için sınırlıdır. Bununla birlikte, çok sayıda istemcinin veya uygulamanın aynı anda sunucuyla iletişim kurmaya çalıştığı hareketli bir ortamda, izin verilen bağlantıların sınırına ulaşarak 1040 numaralı kötü şöhretli hataya yol açabilirsiniz.

"Çok fazla bağlantı" hatası oldukça basittir, ancak ortaya çıkışı farklı istemci araçlarına, programlama dillerine veya MySQL yapılandırmalarına göre değişebilir. Değişiklik ne olursa olsun, temel sorun aynı kalıyor: Sunucu, kapasitesine ulaştığı için yeni bağlantıları kabul edemiyor.

MySQL varsayılan sınırlamaları

Oldukça popüler bir açık kaynaklı ilişkisel veritabanı yönetim sistemi olan MySQL, performansı optimize etmek ve çok çeşitli donanım kurulumlarında kararlılığı sağlamak için tasarlanmış bir dizi varsayılan sınırlamayla birlikte gelir. Bu varsayılan ayarları ve sınırlamaları bilmek MySQL'in performansını optimize etmek için hayati önem taşır. Uygulamanızın özel gereksinimlerine bağlı olarak bu ayarları değiştirmeniz gerekebilir. Örneğin, yüksek trafiğe sahip bir web uygulaması daha yüksek birmax_connections ayarı gerektirebilirken, yoğun veri kullanan bir uygulama artan sort_buffer_sizevemax_allowed_packetayarlarından yararlanabilir .

MySQL'in Maksimum bağlantılarının varsayılan ayarları 151 bağlantıdır. Bu sınır MySQL'in eş zamanlı bağlantı sayısını kontrol eder. Sunucunun, performansı düşürebilecek veya belleğin tükenmesine neden olabilecek çok fazla bağlantı nedeniyle bunalmamasını sağlayacak şekilde ayarlanmıştır.

Bu hatanın oluşma nedenleri

Aşağıdakiler de dahil olmak üzere çeşitli faktörler bu hataya yol açabilir:

Varsayılan bağlantı sınırı : MySQL'in 151 bağlantıya ayarlanmış varsayılan bağlantı sınırı vardır, ancak bu ayarlanabilir.Uygulamanızın gereksinimleri bu sayıyı aşarsa büyük olasılıkla 1040 hatasıyla karşılaşırsınız.

Optimize edilmemiş uygulamalar : Kötü optimize edilmiş uygulamalar, bağlantıları düzgün şekilde kapatmayabilir veya gereksiz yere aşırı sayıda bağlantı açabilir.Bu tür uygulamalar mevcut bağlantıları hızla tüketir.

Ani trafik artışları : İlgili sunucu ayarlamaları yapılmadan trafikte ani artışlar yaşayan web siteleri veya uygulamalar beklenmedik bir şekilde bu sınıra ulaşabilir.

Kaynak kısıtlamaları : Paylaşılan barındırma veya sınırlı kaynaklara sahip sunucularda, bellek ve işlem gücünden tasarruf etmek için bağlantı sınırı daha düşük ayarlanabilir, bu da maksimum sınıra ulaşmayı kolaylaştırır.

Yapılandırma ayarları : 'wait_timeout' ve 'max_allowed_packet' gibi diğer ilgili MySQL yapılandırma ayarları, bağlantıların ne kadar hızlı geri dönüştürüldüğünü dolaylı olarak etkileyebilir ve dolayısıyla genel bağlantı kullanılabilirliğini etkileyebilir.

MySQL hatası 1040'ı düzeltme: Çok fazla bağlantı

Bu hatanın çözümü, hem acil düzeltmeleri hem de tekrarlanmasını önleyecek uzun vadeli stratejileri içerir. Bazı yöntemlere bir göz atalım.

max_connections ayarını artırma

max_connections değerinin yukarı doğru ayarlanması , daha fazla eş zamanlı bağlantıya izin vererek hatayla karşılaşma olasılığını azaltır.Bu yaklaşım, artan uygulama taleplerini veya kullanıcı trafiğini karşılayarak hatayı tetikleyen sınırlamayı doğrudan ele alır. Bu çözümün hem geçici bir rotası hem de kalıcı bir rotası var.

Not
Lütfen geçici rotanın max_connection ayarını MySQL yeniden başlatıldığındaki haline sıfırlayacağını unutmayın.

max_connections'ı geçici olarak artır

MySQL panosundaki maksimum bağlantı değişkeni

  1. MySQL istemcinizi veya terminalinizi açın ve kök kullanıcı olarak oturum açın.
  2. Sayfanın altındakiKonsol'a tıklayın .
  3. Geçerli ayarı aşağıdaki komutla görüntülemek için bu sorguyu yürütün:
 "max_connections" GİBİ DEĞİŞKENLERİ GÖSTER;

Bağlantıların sınırı Değer sütununun altında görüntülenecektir .

Limiti hemen artırmak için şunu kullanın:

 SET GLOBAL max_connections = <YeniDeğer>;

<YeniDeğer>'i istediğiniz limitle değiştirin .Bu değişikliğin geçici olduğunu ve sunucu yeniden başlatıldığında geri döndüğünü unutmayın.

'max_connections'ı kalıcı olarak artırın

  1. MySQL yapılandırma dosyanızı açın (my.cnf veya my.ini, genellikle Linux'ta/etc/mysql/konumunda veya Windows'ta MySQL kurulum dizininde bulunur).
  2. [mysqld] bölümünü bulun ve satırı ekleyin veya değiştirin:
  3.  max_connections = <YeniDeğer>
  4. Dosyayı kaydedin ve değişiklikleri uygulamak için MySQL sunucusunu yeniden başlatın.

Uygulama sorgularını optimize edin ve kullanılmayan bağlantıları kapatın

Veritabanı bağlantılarının verimli kullanımı, kaynakların gereksiz yere meşgul edilmemesini sağlayarak maksimum bağlantı sınırına ulaşılmasını engeller. Uygulamaların kullanılmadığında bağlantıları kapatmasını sağlamak veya uzun süre çalışan sorguları optimize etmek, etkin bağlantıların sayısını önemli ölçüde azaltabilir. İşte yapmanız gerekenler:

Uygulama kodunu gözden geçirin : Uygulamanızın kullanımdan sonra veritabanı bağlantılarını düzgün şekilde kapattığını kontrol edin.Bağlantıları verimli bir şekilde yeniden kullanmak için uygun olan yerlerde bağlantı havuzu oluşturmayı uygulayın.

Sorguları optimize edin : Yürütme sürelerini azaltmak ve bağlantıları daha hızlı boşaltmak için yavaş sorguları analiz edin ve optimize edin.MySQL'in yavaş sorgu günlüğü gibi araçlar, optimizasyon için adayların belirlenmesine yardımcı olabilir.

Kalıcı bağlantıları izleyin ve yönetin

Birden fazla istek karşısında açık kalan kalıcı bağlantılar zamanla birikerek mevcut bağlantıların tükenmesine neden olabilir. Bunları izlemek ve yönetmek, sunucunun bağlantı sınırına ulaşmasını engelleyebilir.wait_timeout ve Interactive_timeoutgibi ayarları düzenleyerek ve bağlantı havuzu oluşturmayı uygulayarak bağlantı sınırlarına ulaşma riskini önemli ölçüde azaltabilirsiniz.

Bu ayarlar MySQL'in etkin olmayan bağlantıları ne kadar süre açık tutacağını kontrol eder. 'wait_timeout' ayarı etkileşimli olmayan bağlantılar (bir web uygulamasındakiler gibi) içindir, 'interactive_timeout' ise MySQL kabuğu tarafından başlatılan etkileşimli bağlantılar için geçerlidir. Bu sürelerin aşağıya doğru ayarlanması, aktif olarak kullanılmayan bağlantıların serbest bırakılmasına yardımcı olur.

wait_timeout ve Interactive_timeout'u ayarlama

  1. MySQL istemcinizi veya terminalinizi açın ve kök kullanıcı olarak oturum açın.
  2. Sayfanın altındakiKonsol'a tıklayın .
  3. Geçerli değerleri görmek için şunu yürütün:
  4.  'wait_timeout' GİBİ DEĞİŞKENLERİ GÖSTER;` 
    
    'interactive_timeout' GİBİ DEĞİŞKENLERİ GÖSTER;`
  5. Çalıştırarak değerleri değiştirin:
 SET GLOBAL wait_timeout = <YeniDeğer>;

SET GLOBAL interaktif_timeout = <YeniDeğer>;

<YeniDeğer> değerini saniye cinsinden istenen zaman aşımı değeriyle değiştirin .Yaygın bir ayar 300 saniyedir (5 dakika), ancak uygulamanızın ihtiyaçlarına göre ayarlayın. Bu değişikliğin geçici olduğunu ve sunucu yeniden başlatıldığında geri döndüğünü unutmayın.

Kalıcı konfigürasyon değişiklikleri

  1. Yeniden başlatmanın ardından değişikliklerin devam etmesi için MySQL yapılandırma dosyasını düzenleyin (my.cnf veya my.ini, genellikle Linux'ta /etc/mysql/konumunda).
  2. [mysqld] bölümü altında , <NewValue>içine istediğiniz değeri ekleyerek aşağıdaki satırları ekleyin veya güncelleyin :
  3.  wait_timeout = <YeniDeğer>
    
    Interactive_timeout = <YeniDeğer>
  4. Değişiklikleri kaydedin ve etkili olması için MySQL hizmetini yeniden başlatın.

Bağlantı havuzu oluşturmayı uygulama

Bağlantı havuzu oluşturma, yeniden kullanılabilecek veritabanı bağlantılarının önbelleğini tutar ve her yeni istek için bağlantı kurma yükünü önemli ölçüde azaltır. Bu yalnızca mevcut bağlantıların kullanımını optimize etmekle kalmaz, aynı zamanda uygulama performansını da artırır.

  • Uygulama çerçevenizin veya sunucu ortamınızın bağlantı havuzu oluşturmayı desteklediğini doğrulayın. Çoğu modern geliştirme ortamı bunu yapar.
  • Bu genellikle uygulamanızın veritabanı yapılandırma ayarlarının değiştirilmesini içerir. PoolSize , maxIdleTime veya benzeri gibi veritabanı bağlantıları veya havuzlarla ilgili ayarları arayın.
  • Havuz boyutunu tipik uygulama taleplerinize ve veritabanı sunucusu kapasitesine göre yapılandırın.
  • Bağlantı havuzu oluşturmayı uyguladıktan sonra uygulamanızın performansını ve MySQL sunucusunun bağlantı kullanımını izleyin. Verimlilik ve performansı optimize etmek için havuz boyutunu ve diğer parametreleri gerektiği gibi ayarlayın.
  • Uygulamanız veya veritabanı sürücünüz yerel olarak havuzlamayı desteklemiyorsa MySQL ve programlama dilinizle uyumlu bir üçüncü taraf bağlantı havuzu uygulaması kullanmayı düşünün.

Uzun vadeli çözümler

Uygulama kodunu optimize edin : Uygulama mantığınızın, kullanımdan sonra veritabanı bağlantılarını düzgün şekilde kapattığından emin olun.Bağlantı havuzlarının kullanılması, belirli sayıda bağlantının verimli bir şekilde yeniden kullanılmasına da yardımcı olabilir.

Yapılandırmayı gözden geçirin : Mevcut ihtiyaçlarınıza göre optimize edildiklerinden emin olmak için max_connections,wait_timeoutvemax_allowed_packetdahil olmak üzere MySQL sunucu yapılandırmanızı düzenli olarak gözden geçirin .

Ölçeklenebilirlik planlaması : Uygulamanızın veya web sitenizin büyüme eğilimlerine bağlı olarak veritabanı sunucunuzu dikey (kaynakları yükseltme) veya yatay (daha fazla sunucu ekleme) olarak ölçeklendirmeyi düşünün.

İzleme araçları : Bağlantı sınırına ulaşılmadan önce uyarı almak için izleme araçlarını uygulayın.Bu proaktif yaklaşım, kullanıcılar hatalarla karşılaşmadan önce ayarları veya kaynakları ayarlamanıza olanak tanır.

Yük testi : Düzenli yük testi, trafikteki ani artışların bağlantıları nasıl etkilediğini tahmin etmeye ve ayarlarda veya mimaride gerekli ayarlamaları yönlendirmeye yardımcı olabilir.

Düşünceleri kapatmak

Özetlemek gerekirse, MySQL'de "Çok fazla bağlantı" hatasıyla karşılaşmak, izin verilen maksimum istemci bağlantılarına ulaşıldığı anlamına gelir; bu, genellikle yüksek trafikli veya kötü optimize edilmiş uygulamalarda karşılaşılan bir senaryodur. Bu kılavuz, bu hatayı yönetmek ve önlemek için hem acil hem de uzun vadeli stratejileri özetlemektedir. Acil düzeltmeler, max_connections ayarının ayarlanmasını ve uygulama sorgularının optimizasyonu ve bağlantı havuzu oluşturmanın stratejik kullanımı yoluyla bağlantıların verimli kullanımı ve yönetiminin sağlanmasını içerir.Uzun vadeli çözümler, kod optimizasyonuna, düzenli yapılandırma incelemelerine, ölçeklenebilirlik planlamasına, proaktif izlemeye ve periyodik yük testine odaklanır. Geliştiriciler ve veritabanı yöneticileri, bu stratejileri uygulayarak MySQL veritabanlarının ağır yük altında bile duyarlı ve istikrarlı kalmasını sağlayabilir, böylece uygulamalarının sorunsuz ve verimli çalışmasını sağlayabilirler.

AI ile WordPress web sitesi oluşturma işleminizi hızlandırın

10Web AI Web Sitesi Oluşturucu ile iş ihtiyaçlarınıza göre uyarlanmış özel bir WordPress web sitesini 10 kat daha hızlı oluşturun.

Web Sitenizi Oluşturun
Kredi kartına gerek yok