Terlalu banyak koneksi laravel mysql

Kami telah menjalankan situs blog PHP/MySQL di server bersama selama bertahun-tahun tanpa masalah (kode saya bukan Wordpress). Saya bukan orang sistem atau basis data kecuali untuk apa yang saya butuhkan. Tuan rumah kami (BlueHost) memindahkan situs kami ke server baru, dan kapasitas kami untuk melayani audiens kami telah turun secara signifikan. Kami sedang mengalami lonjakan musiman sekarang, sehingga membuatnya lebih buruk. Sedemikian rupa sehingga kami juga menggunakan situs serupa lainnya untuk menanggung beban (GoDaddy). Tidak ideal. Saya tidak memiliki hak admin obv, tetapi saya dapat melihat bahwa kami mendapatkan 1000 koneksi maksimal di GoDaddy dan 150 di BlueHost (tidak yakin apa itu sebelumnya)

Saya telah melacak Threads_connected dan Threads_running untuk kedua situs (lagi-lagi situs yang identik). GoDaddy tidak pernah mencapai lebih dari ~25 terhubung dan ~2 berjalan. BlueHost akan mulai menumpuk Threads_connected hingga mencapai batas 150. Saya mencoba untuk tidak merusak alokasi sumber daya kami, tetapi bahkan dengan banyak (dan terkadang semua) lalu lintas dialihkan ke GoDaddy, BlueHost akan tetap di atas 120 untuk jangka waktu yang lama. Tidak yakin apakah itu masalah caching atau apa

Saya telah mencoba melakukan deklarasi 'sebaris' untuk waktu tunggu ketika saya membuka koneksi PHP/PDO saya ke MySQL, tetapi saya agak skeptis bahwa ini memperbaiki masalah

$dbh_ip_check -> exec("SET session wait_timeout=10"); $dbh_ip_check -> exec("SET session connect_timeout=10");

Ini adalah variabel global saat ini

mysql> show global variables like '%timeout'; +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 20 | | delayed_insert_timeout | 40 | | have_statement_timeout | YES | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 10 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 60 | | thread_pool_idle_timeout | 60 | | wait_timeout | 3600 | +-----------------------------+----------+_

Kami tidak mendapatkan lalu lintas dalam jumlah besar, tetapi lonjakan kami mungkin melihat >100 orang membuka situs sekaligus, dan itu akan berlanjut selama setengah jam atau lebih

Mengubah ekstensi MySQL ke MySQLi menyebabkan beberapa ketidakpastian dalam komunitas PHP karena beberapa kelas berat industri seperti WordPress terus bergantung pada ekstensi lama meskipun sudah tidak digunakan lagi. Namun, sejak PHP 7, ekstensi ini tidak lagi tersedia. Pada artikel ini, kami akan membahas penggantinya secara mendetail dan menyajikan contoh yang menyoroti perbedaan di antara keduanya

Kesalahan koneksi terlalu banyak muncul saat mencoba menyambung ke server dan koneksi yang tersedia, disetel ke 100 secara default, sudah digunakan

Ingatlah bahwa MySQL® memiliki variabel max_connections +1 untuk koneksi klien, +1 didedikasikan untuk akun dengan hak istimewa CONNECTION_ADMIN

Larutan

Lakukan langkah-langkah berikut untuk memperbaiki masalah ini

  1. Identifikasi nilai variabel max_connections

    mysql --user="root" --password="PASSWORD" --execute='SHOW VARIABLES LIKE "max_connections";_

    Outputnya terlihat seperti ini

    Variable_nameValuemax_connections100
  2. Gunakan editor teks favorit Anda untuk mengubah /etc/mysql/my. cnf dan tetapkan nilai berikut

    max_connections = 500_

    max_user_connections = 500

    Catatan. Meningkatkan jumlah koneksi yang memungkinkan secara langsung memengaruhi jumlah RAM yang dikonsumsi

    Perintah mysql --help_ dapat membantu menemukan my. cnf karena menampilkan opsi default pada file berikut

    • /etc/my. cnf
    • /etc/mysql/my. cnf
    • /usr/local/etc/my. cnf
    • ~/. -ku. cnf
  3. Mulai ulang layanan MySQL dan untuk menerapkan perubahan

©2020 Rackspace US, Inc

Kecuali dinyatakan sebaliknya, konten di situs ini dilisensikan di bawah Creative Commons Attribution-NonCommercial-NoDerivs 3. 0 Lisensi Tidak Diporting

Ketika klien mencoba masuk ke MySQL terkadang ditolak dan menerima pesan kesalahan yang mengatakan bahwa ada "terlalu banyak koneksi". Ini berarti bahwa jumlah klien maksimum yang dapat terhubung ke server telah tercapai. Baik klien harus menunggu klien lain keluar, atau administrator harus menambah jumlah maksimum koneksi yang diizinkan

Informasi tentang koneksi ke server dapat ditemukan menggunakan pernyataan SHOW STATUS

$ mysql –u root –p SHOW STATUS LIKE 'max_used_connections';

Pertama, Anda harus memastikan bahwa aplikasi Anda menutup koneksi ke server ketika tidak lagi diperlukan. Namun, Anda dapat mengatasi kesalahan ini dengan meningkatkan nilai variabel max_connections dan mungkin menurunkan nilai wait_timeout jika Anda berharap banyak koneksi ke server Anda tidak digunakan secara aktif

Larutan

Jumlah maksimum utas koneksi yang diizinkan untuk server terdapat dalam variabel sistem max_connections. Nilai defaultnya adalah 151. Untuk melihat nilai yang ditetapkan variabel ini, jalankan perintah SQL berikut

$ mysql –u root –p mysql> SHOW VARIABLES LIKE 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 151 | +-----------------+-------+

Mengubah parameter max_connections (Sementara)

Untuk mengubah nilai max_connections variabel sistem, opsi –max_connections dapat digunakan. Untuk mengubah variabel ini sementara saat server berjalan, masukkan pernyataan SQL berikut

$ mysql –u root –p mysql> SET GLOBAL max_connections = 512;_

Catatan. Klien yang saat ini terhubung ke server tidak perlu diputuskan untuk menjalankan pernyataan SQL ini sebagai root. Server mengizinkan satu koneksi lebih dari nilai max_connections. Satu koneksi dicadangkan untuk pengguna root atau akun lain yang memiliki hak istimewa SUPER

Ketika daemon server MySQL (mysqld) di-restart, nilai di atas akan diatur kembali ke nilai default 151. Untuk membuat perubahan permanen gunakan metode di bawah ini

Mengubah parameter max_connections (Permanen)

Metode yang lebih baik untuk mengubah parameter max_connections adalah dengan menambahkan opsi ini ke file opsi (my. cnf atau saya. ini, tergantung pada sistem Anda) sehingga berlaku saat server dimulai ulang. Dengan asumsi Anda menggunakan /etc/my. cnf, tambahkan baris di bawah ini

# vi /etc/my.cnf max_connections = 512

Sekarang restart daemon mysqld agar perubahan diterapkan

Untuk CentOS/RHEL 6

# service mysqld restart_

Untuk CentOS/RHEL 7

# systemctl restart mysqld

Berapa Nilai Maksimum untuk max_connections di Linux?

Batas atas seberapa besar Anda dapat mengonfigurasi max_connections sangat ditentukan oleh sistem operasi selain batas 100.000 yang ditetapkan oleh MySQL. Linux memiliki batas yang disebut file terbuka maksimum, ini didefinisikan "per login" dan mengatakan jumlah maksimum file yang dapat dibuka oleh suatu proses. Standarnya adalah 1024 (yang dapat Anda lihat menggunakan ulimit -n)

Bagaimana cara memperbaiki terlalu banyak koneksi di MySQL?

Solusi .
Identifikasi nilai variabel max_connections. mysql --user="root" --password="PASSWORD" --execute='TAMPILKAN VARIABEL SEPERTI "max_connections";.
Gunakan editor teks favorit Anda untuk mengubah /etc/mysql/my. cnf dan tetapkan nilai berikut. max_connections = 500. .
Mulai ulang layanan MySQL dan untuk menerapkan perubahan

Apa yang menyebabkan koneksi MySQL terlalu banyak?

Kesalahan MySQL “Terlalu banyak koneksi” terjadi ketika lebih banyak kueri yang dikirim ke database MySQL daripada yang dapat diproses . Kesalahan dapat diperbaiki dengan menyetel nomor koneksi maksimum baru di file konfigurasi atau secara global.

Berapa banyak koneksi yang dapat ditangani oleh MySQL?

Secara default 151 adalah jumlah maksimum koneksi klien simultan yang diizinkan di MySQL 5. 5 . Jika Anda mencapai batas max_connections Anda akan mendapatkan kesalahan "Terlalu banyak koneksi" ketika Anda mencoba untuk terhubung ke server MySQL Anda. Ini berarti semua koneksi yang tersedia sedang digunakan oleh klien lain.

Berapa banyak koneksi yang dapat ditangani oleh MySQL 8?

Server yang sama kemudian akan dapat menangani konkurensi yang sama (5000 TPS) lebih dari 10.000 koneksi , tetapi menambahkan lebih banyak koneksi tidak akan meningkatkan .

Postingan terbaru

LIHAT SEMUA