Cara Memperbaiki MySQL Error 1040: Terlalu Banyak Koneksi

Diterbitkan: 2024-03-29

Kesalahan MySQL 1040: Kesalahan terlalu banyak koneksi muncul ketika server MySQL telah mencapai jumlah maksimum koneksi klien yang diperbolehkan. Sebelum kita mendalami detail penanganan masalah ini, penting untuk memahami lingkungan tempat kesalahan ini terjadi dan mengapa ini menjadi batu sandungan umum bagi banyak pengembang dan administrator database.

MySQL, landasan dari banyak aplikasi web, menangani permintaan klien melalui koneksi. Setiap kali aplikasi atau pengguna menanyakan MySQL, koneksi baru akan dibuat. Koneksi ini dibatasi untuk memastikan server tetap stabil dan dapat melayani setiap permintaan secara efektif. Namun, dalam lingkungan yang ramai di mana banyak klien atau aplikasi mencoba berkomunikasi dengan server secara bersamaan, Anda mungkin mencapai batas koneksi yang diizinkan, yang menyebabkan kesalahan terkenal 1040.

Kesalahan “Terlalu banyak koneksi” cukup jelas, tetapi kemunculannya dapat bervariasi berdasarkan alat klien, bahasa pemrograman, atau konfigurasi MySQL yang berbeda. Terlepas dari variasinya, masalah intinya tetap sama: server tidak dapat menerima koneksi baru karena telah mencapai kapasitasnya.

Batasan default MySQL

MySQL, sebagai sistem manajemen basis data relasional sumber terbuka yang sangat populer, hadir dengan serangkaian batasan default yang dirancang untuk mengoptimalkan kinerja dan memastikan stabilitas di berbagai pengaturan perangkat keras. Mengetahui pengaturan default dan batasan ini sangat penting untuk mengoptimalkan kinerja MySQL. Bergantung pada persyaratan spesifik aplikasi Anda, Anda mungkin perlu menyesuaikan pengaturan ini. Misalnya, aplikasi web dengan lalu lintas tinggi mungkin memerlukan setelanmax_connections yang lebih tinggi , sedangkan aplikasi intensif data mungkin mendapat manfaat dari setelan sort_buffer_sizedanmax_allowed_packetyang ditingkatkan .

Pengaturan default koneksi Max MySQL adalah 151 koneksi. Batasan ini mengontrol berapa banyak koneksi simultan yang dapat ditangani MySQL. Ini diatur untuk memastikan bahwa server tidak kewalahan oleh terlalu banyak koneksi, yang dapat menurunkan kinerja atau menyebabkan kehabisan memori.

Alasan mengapa kesalahan ini terjadi

Beberapa faktor dapat menyebabkan kesalahan ini, antara lain:

Batas koneksi default : MySQL memiliki batas koneksi default yang ditetapkan menjadi 151 koneksi, namun hal ini dapat disesuaikan.Jika persyaratan aplikasi Anda melebihi angka ini, kemungkinan besar Anda akan mengalami kesalahan 1040.

Aplikasi yang tidak dioptimalkan : Aplikasi yang tidak dioptimalkan dengan baik mungkin tidak menutup koneksi dengan benar atau mungkin membuka koneksi berlebihan jika tidak diperlukan.Praktik seperti itu dengan cepat menghabiskan koneksi yang tersedia.

Lonjakan lalu lintas secara tiba-tiba : Situs web atau aplikasi yang mengalami peningkatan lalu lintas secara tiba-tiba tanpa penyesuaian server yang sesuai dapat mencapai batas ini secara tidak terduga.

Batasan sumber daya : Pada hosting bersama atau server dengan sumber daya terbatas, batas koneksi mungkin disetel lebih rendah untuk menghemat memori dan daya pemrosesan, sehingga lebih mudah mencapai batas maksimum.

Pengaturan konfigurasi : Pengaturan konfigurasi MySQL terkait lainnya, seperti `wait_timeout` dan `max_allowed_packet`, secara tidak langsung dapat memengaruhi seberapa cepat koneksi didaur ulang dan, oleh karena itu, memengaruhi ketersediaan koneksi secara keseluruhan.

Memperbaiki kesalahan MySQL 1040: Terlalu banyak koneksi

Mengatasi kesalahan ini melibatkan perbaikan segera dan strategi jangka panjang untuk mencegah terulangnya kesalahan tersebut. Mari kita lihat beberapa metode.

Meningkatkan pengaturan max_connections

Menyesuaikan nilai max_connections ke atas memungkinkan koneksi yang lebih simultan, sehingga mengurangi kemungkinan terjadinya kesalahan.Pendekatan ini secara langsung mengatasi batasan yang memicu kesalahan, mengakomodasi peningkatan permintaan aplikasi atau lalu lintas pengguna. Solusi ini memiliki rute sementara dan rute permanen.

Catatan
Harap dicatat bahwa rute sementara akan mengatur ulang pengaturan max_connection kembali ke keadaan semula ketika MySQL di-restart.

Tingkatkan max_connections untuk sementara

variabel koneksi maksimal di dashboard MySQL

  1. Buka klien atau terminal MySQL Anda dan masuk sebagai pengguna root.
  2. KlikKonsol di bagian bawah halaman.
  3. Jalankan kueri ini untuk melihat pengaturan saat ini dengan perintah berikut:
 TAMPILKAN VARIABEL SEPERTI "max_connections";

Batas koneksi akan ditampilkan di bawah kolom Nilai .

Untuk segera meningkatkan batas, gunakan:

 SET GLOBAL max_connections = <Nilai Baru>;

mengganti <NewValue> dengan batas yang Anda inginkan.Perhatikan bahwa perubahan ini bersifat sementara dan kembali setelah server dimulai ulang.

Tingkatkan 'max_connections' secara permanen

  1. Buka file konfigurasi MySQL Anda (my.cnf atau my.ini, biasanya terletak di/etc/mysql/di Linux atau direktori instalasi MySQL di Windows).
  2. Temukan bagian[mysqld] dan tambahkan atau ubah baris:
  3.  max_connections = <Nilai Baru>
  4. Simpan file dan mulai ulang server MySQL untuk menerapkan perubahan.

Optimalkan permintaan aplikasi dan tutup koneksi yang tidak digunakan

Penggunaan koneksi database yang efisien memastikan sumber daya tidak digunakan secara berlebihan, sehingga mencegah tercapainya batas koneksi maksimal. Memastikan aplikasi menutup koneksi saat tidak digunakan atau mengoptimalkan kueri yang berjalan lama dapat mengurangi jumlah koneksi aktif secara signifikan. Inilah yang harus dilakukan:

Tinjau kode aplikasi : Periksa apakah aplikasi Anda menutup koneksi database dengan benar setelah digunakan.Terapkan pengumpulan koneksi jika diperlukan untuk menggunakan kembali koneksi secara efisien.

Optimalkan kueri : Analisis dan optimalkan kueri lambat untuk mengurangi waktu eksekusi, membebaskan koneksi lebih cepat.Alat seperti log kueri MySQL yang lambat dapat membantu mengidentifikasi kandidat untuk pengoptimalan.

Pantau dan kelola koneksi persisten

Koneksi persisten, yang tetap terbuka di beberapa permintaan, dapat terakumulasi seiring waktu, sehingga menyebabkan habisnya koneksi yang tersedia. Memantau dan mengelolanya dapat mencegah server mencapai batas koneksinya. Dengan menyesuaikan pengaturan sepertiwait_timeout dan Interactive_timeout, serta menerapkan pengumpulan koneksi, Anda dapat mengurangi risiko mencapai batas koneksi secara signifikan.

Pengaturan ini mengontrol berapa lama MySQL membiarkan koneksi tidak aktif tetap terbuka. Setelan `wait_timeout` ditujukan untuk koneksi non-interaktif (seperti koneksi dari aplikasi web), sedangkan `interactive_timeout` berlaku untuk koneksi interaktif yang dimulai oleh shell MySQL. Menyesuaikan waktu ini ke bawah membantu membebaskan koneksi yang tidak digunakan secara aktif.

Menyesuaikan waktu tunggu_waktu habis dan waktu habis_interaktif

  1. Buka klien atau terminal MySQL Anda dan masuk sebagai pengguna root.
  2. KlikKonsol di bagian bawah halaman.
  3. Untuk melihat nilai saat ini, jalankan:
  4.  TAMPILKAN VARIABEL SEPERTI 'wait_timeout';` 
    
    TAMPILKAN VARIABEL SEPERTI 'interactive_timeout';`
  5. Ubah nilainya dengan menjalankan:
 SET GLOBAL wait_timeout = <Nilai Baru>;

SET GLOBAL Interactive_timeout = <Nilai Baru>;

Ganti <NewValue> dengan batas waktu yang diinginkan dalam hitungan detik.Pengaturan umum adalah 300 detik (5 menit), namun sesuaikan berdasarkan kebutuhan aplikasi Anda. Perhatikan bahwa perubahan ini bersifat sementara dan kembali setelah server dimulai ulang.

Perubahan konfigurasi permanen

  1. Agar perubahan tetap ada setelah restart, edit file konfigurasi MySQL (my.cnf atau my.ini, biasanya di /etc/mysql/di Linux).
  2. Di bawah bagian[mysqld] , tambahkan atau perbarui baris berikut dengan memasukkan nilai yang diinginkan di <NewValue>:
  3.  wait_timeout = <Nilai Baru>
    
    waktu_interaktif = <Nilai Baru>
  4. Simpan perubahan dan mulai ulang layanan MySQL agar dapat diterapkan.

Menerapkan pengumpulan koneksi

Pengumpulan koneksi memelihara cache koneksi database yang dapat digunakan kembali, sehingga secara signifikan mengurangi overhead pembuatan koneksi untuk setiap permintaan baru. Hal ini tidak hanya mengoptimalkan penggunaan koneksi yang tersedia tetapi juga meningkatkan kinerja aplikasi.

  • Verifikasi bahwa kerangka aplikasi atau lingkungan server Anda mendukung pengumpulan koneksi. Sebagian besar lingkungan pengembangan modern melakukan hal tersebut.
  • Hal ini biasanya melibatkan penyesuaian pengaturan konfigurasi database aplikasi Anda. Cari pengaturan yang terkait dengan koneksi atau kumpulan database, seperti poolSize , maxIdleTime , atau serupa.
  • Konfigurasikan ukuran kumpulan berdasarkan permintaan aplikasi khas Anda dan kapasitas server database.
  • Setelah menerapkan pengumpulan koneksi, pantau kinerja aplikasi Anda dan penggunaan koneksi server MySQL. Sesuaikan ukuran kumpulan dan parameter lain yang diperlukan untuk mengoptimalkan efisiensi dan kinerja.
  • Jika aplikasi atau driver database Anda tidak mendukung pengumpulan secara asli, pertimbangkan untuk menggunakan implementasi kumpulan koneksi pihak ketiga yang kompatibel dengan MySQL dan bahasa pemrograman Anda.

Solusi jangka panjang

Optimalkan kode aplikasi : Pastikan logika aplikasi Anda menutup koneksi database dengan benar setelah digunakan.Memanfaatkan kumpulan koneksi juga dapat membantu dengan menggunakan kembali sejumlah koneksi secara efisien.

Tinjau konfigurasi : Tinjau secara berkala konfigurasi server MySQL Anda, termasuk max_connections,wait_timeout, danmax_allowed_packet, untuk memastikan semuanya dioptimalkan untuk kebutuhan Anda saat ini.

Perencanaan skalabilitas : Pertimbangkan untuk menskalakan server database Anda baik secara vertikal (meningkatkan sumber daya) atau horizontal (menambahkan lebih banyak server) berdasarkan tren pertumbuhan aplikasi atau situs web Anda.

Alat pemantauan : Menerapkan alat pemantauan untuk mendapatkan peringatan sebelum batas koneksi tercapai.Pendekatan proaktif ini memungkinkan Anda menyesuaikan pengaturan atau sumber daya sebelum pengguna mengalami kesalahan.

Pengujian beban : Pengujian beban rutin dapat membantu mengantisipasi bagaimana lonjakan lalu lintas berdampak pada koneksi dan memandu penyesuaian yang diperlukan terhadap pengaturan atau arsitektur.

Menutup pikiran

Singkatnya, menemukan kesalahan “Terlalu banyak koneksi” di MySQL berarti mencapai koneksi klien maksimum yang diizinkan, sebuah skenario yang sering dihadapi dalam aplikasi dengan lalu lintas tinggi atau tidak dioptimalkan dengan baik. Panduan ini telah menguraikan strategi jangka pendek dan jangka panjang untuk mengelola dan mencegah kesalahan ini. Perbaikan segera melibatkan penyesuaian pengaturan max_connections dan memastikan penggunaan dan pengelolaan koneksi yang efisien melalui optimalisasi permintaan aplikasi dan penggunaan strategis pengumpulan koneksi.Solusi jangka panjang fokus pada pengoptimalan kode, tinjauan konfigurasi rutin, perencanaan skalabilitas, pemantauan proaktif, dan pengujian beban berkala. Dengan menerapkan strategi ini, pengembang dan administrator basis data dapat memastikan basis data MySQL mereka tetap responsif dan stabil, bahkan di bawah beban berat, sehingga menjaga kelancaran dan efisiensi pengoperasian aplikasi mereka.

Percepat pembuatan situs WordPress Anda dengan AI

Buat situs web WordPress khusus yang disesuaikan dengan kebutuhan bisnis Anda 10X lebih cepat dengan 10Web AI Website Builder.

Hasilkan Situs Web Anda
Tidak diperlukan kartu kredit