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
Identifikasi nilai variabel max_connections
mysql --user="root" --password="PASSWORD" --execute='SHOW VARIABLES LIKE "max_connections";_
Outputnya terlihat seperti ini
Variable_nameValuemax_connections100Gunakan 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
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)