Bagaimana cara menemukan koneksi db maksimum di mysql?

Saya ingin meningkatkan koneksi maksimal untuk Amazon Relational Database Service (Amazon RDS) saya untuk MySQL atau Amazon RDS untuk instans DB PostgreSQL

Resolusi

Lihat nilai max_connections saat ini

Di Amazon RDS for MySQL, metrik max_connections memantau jumlah maksimum yang ditetapkan (diizinkan) koneksi klien simultan

Secara default, parameter max_connections didasarkan pada rumus berikut di Amazon RDS for MySQL (dihitung dari nilai DBInstanceClassMemory)

max_connections = DBInstanceClassMemory/12582880

Untuk memeriksa nilai max_connections saat ini, jalankan perintah berikut setelah terhubung ke instans Amazon RDS for MySQL Anda

SHOW GLOBAL VARIABLES LIKE 'max_connections';
_

Di Amazon RDS for PostgreSQL, metrik max_connections memantau jumlah maksimum koneksi bersamaan yang ditetapkan. Secara default, parameter max_connections didasarkan pada rumus berikut di Amazon RDS untuk PostgreSQL (dihitung dari nilai DBInstanceClassMemory)

max_connections = LEAST({DBInstanceClassMemory/9531392}, 5000)

Untuk memeriksa nilai max_connections saat ini, jalankan perintah berikut setelah menyambungkan ke instans Amazon RDS for PostgreSQL Anda

postgres=> show max_connections;

Untuk RDS untuk MySQL dan RDS untuk PostgreSQL bergantung pada kelas instans yang digunakan oleh instans Amazon RDS. Kelas instans DB dengan lebih banyak memori yang tersedia mendukung lebih banyak koneksi database

Perhatikan bahwa jumlah max_connections default yang dihitung menggunakan rumus mungkin sedikit berbeda dari jumlah koneksi default yang dikembalikan dari perintah sebelumnya. Ini karena beberapa memori dari total DBInstanceClassMemory dicadangkan untuk operasi OS yang mendasarinya. Perintah sebelumnya hanya mempertimbangkan memori yang dicadangkan untuk mesin PostgreSQL dan bukan untuk OS host yang mendasarinya

Tinjau alasan untuk terlalu banyak koneksi

Saat jumlah koneksi klien melebihi nilai max_connections, Anda mendapatkan kesalahan yang serupa dengan berikut ini

Faktor berikut mungkin menyebabkan koneksi database Anda melebihi nilai max_connections

Peningkatan jumlah koneksi klien atau aplikasi ke instans DB. Hal ini disebabkan oleh peningkatan beban kerja atau penguncian tingkat tabel/baris

Menutup koneksi klien atau aplikasi dengan tidak benar setelah akhir operasi. Saat koneksi server tidak ditutup dengan benar, aplikasi klien membuka koneksi baru. Seiring waktu, koneksi server baru ini dapat menyebabkan instance Anda melebihi nilai max_connections. Untuk mencantumkan semua koneksi aktif untuk RDS Anda untuk instans DB MySQL, jalankan perintah berikut

Untuk melihat koneksi setiap database untuk instance RDS for PostgreSQL Anda, jalankan perintah berikut

SELECT datname, numbackends FROM pg_stat_database;
_

Koneksi tidur. Koneksi tidur yang juga dikenal sebagai koneksi terbuka tidak aktif disebabkan saat Anda menetapkan nilai yang lebih tinggi untuk parameter batas waktu koneksi, seperti wait_timeout atau interactive_timeout di MySQL. Jika Anda mengonfigurasi batas koneksi yang sangat tinggi, Anda mungkin berakhir dengan penggunaan memori yang lebih tinggi meskipun koneksi tersebut tidak digunakan. Akibatnya, saat server aplikasi mencoba membuka semua koneksi klien ke database, koneksi ini mungkin ditolak. Untuk mengakhiri koneksi tidur di RDS untuk instans DB MySQL, jalankan perintah berikut

CALL mysql.rds_kill(example-pid);

Koneksi menganggur. Anda dapat melihat koneksi yang menganggur dalam contoh RDS untuk PostgreSQL dengan menjalankan kueri berikut. Kueri ini menampilkan informasi tentang proses backend dengan salah satu status berikut selama lebih dari 15 menit. 'menganggur', 'menganggur dalam transaksi', 'menganggur dalam transaksi (dibatalkan)' dan 'dinonaktifkan'

SELECT * FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
AND state in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled')
AND state_change < current_timestamp - INTERVAL '15' MINUTE;
_

Untuk menghentikan koneksi tidak aktif dalam contoh RDS untuk PostgreSQL, jalankan perintah berikut

SELECT pg_terminate_backend(example-pid)

Tip. Ini adalah praktik terbaik untuk mengonfigurasi hanya koneksi aktif yang diperlukan untuk kinerja aplikasi. Anda juga dapat mempertimbangkan untuk meningkatkan ke kelas instans DB Amazon RDS yang lebih besar

Tingkatkan nilai max_connections

Anda dapat meningkatkan jumlah maksimum koneksi ke RDS untuk MySQL atau RDS untuk instans DB PostgresSQL menggunakan metode berikut

  • Tetapkan nilai yang lebih besar untuk parameter max_connections menggunakan grup parameter level instance kustom. Meningkatkan parameter max_connections tidak menyebabkan pemadaman apa pun. Meskipun Anda dapat meningkatkan nilai max_connections melebihi nilai default, ini bukanlah praktik terbaik. Ini karena, instance mungkin mengalami masalah saat beban kerja meningkat dan lebih banyak memori diperlukan. Peningkatan jumlah koneksi dapat meningkatkan penggunaan memori. Instance yang kehabisan memori mungkin macet. Ini benar terutama untuk kasus yang lebih kecil. Jika Anda meningkatkan nilai max_connections, pastikan untuk memantau penggunaan sumber daya. Juga, pastikan untuk berkonsultasi dengan DBA Anda tentang kenaikan tersebut. Ini adalah praktik terbaik untuk mempertahankan nilai default, atau meningkatkan ke kelas instance yang lebih besar saat diperlukan lebih banyak koneksi
  • Jika instans DB Anda menggunakan grup parameter default, ubah grup parameter menjadi grup parameter khusus. Pastikan untuk mengaitkan grup parameter DB khusus dengan instans Amazon RDS Anda dan reboot instans tersebut. Setelah grup parameter kustom baru diasosiasikan dengan instans DB Anda, Anda dapat mengubah nilai parameter max_connections. Untuk informasi selengkapnya, lihat Bagaimana cara mengubah nilai grup parameter DB Amazon RDS?
    Catatan. Mengubah grup parameter dapat menyebabkan pemadaman. Untuk informasi selengkapnya, lihat Bekerja dengan grup parameter DB
  • Tingkatkan instans DB Anda ke kelas instans DB dengan lebih banyak memori. Perhatikan bahwa peningkatan skala instans RDS berdampak pada penagihan akun. Untuk mempelajari selengkapnya, lihat penagihan instans DB untuk Amazon RDS
    Peringatan. Waktu henti terjadi saat Anda memodifikasi instans DB Amazon RDS

Ikuti praktik terbaik untuk mengonfigurasi parameter max_connections

Pastikan untuk mempertimbangkan praktik terbaik berikut saat bekerja dengan parameter max_connections untuk instans DB Anda

  • Batas koneksi default disetel untuk sistem yang menggunakan nilai default untuk konsumen memori utama lainnya, seperti buffer pool. Ini adalah praktik terbaik untuk meningkatkan kelas instance, daripada mengubah nilai kelas instance. Namun, jika instans Anda memiliki banyak memori kosong, Anda dapat mengubah parameter ini secara manual. Sebelum mengubah pengaturan ini untuk Instans DB Anda, pertimbangkan untuk menyesuaikan batas koneksi untuk memperhitungkan peningkatan atau penurunan memori yang tersedia pada instans DB
  • Tetapkan nilai max_connections menjadi sedikit lebih tinggi dari jumlah maksimum koneksi yang Anda harapkan untuk dibuka pada setiap instans DB
  • Untuk instance RDS untuk MySQL, jika Anda mengaktifkan Performance Schema, perhatikan baik-baik pengaturan parameter max_connections. Struktur memori Skema Kinerja diukur secara otomatis berdasarkan variabel konfigurasi server. Semakin tinggi Anda menyetel variabel, semakin banyak memori yang digunakan Skema Kinerja. Dalam kasus ekstrem, kondisi ini dapat menyebabkan masalah kehabisan memori pada jenis instans yang lebih kecil, seperti T2 dan T3. Jika Anda menggunakan Skema Kinerja, praktik terbaik adalah membiarkan pengaturan max_connections pada nilai default. Jika Anda berencana untuk meningkatkan nilai max_connections secara signifikan (menjadi lebih tinggi dari nilai default), maka pertimbangkan untuk menonaktifkan Skema Kinerja
    Catatan. Jika Anda mengaktifkan Performance Insights untuk Amazon RDS untuk instans DB MySQL, Skema Performa otomatis diaktifkan
  • Untuk instance RDS untuk MySQL, saat Anda menyetel parameter max_connections, pastikan untuk meninjau parameter terkait koneksi MySQL berikut. wait_timeout. Jumlah detik server menunggu aktivitas pada koneksi TCP/IP atau File Unix non-interaktif sebelum menutup koneksi
    waktu tunggu_interaktif. Jumlah detik server menunggu aktivitas pada koneksi interaktif sebelum menutup koneksi
    net_read_timeout. Jumlah detik untuk menunggu lebih banyak data dari koneksi TCP/IP sebelum menghentikan aktivitas baca
    net_write_timeout. Jumlah detik untuk menunggu koneksi TCP/IP untuk sebuah blok yang akan ditulis sebelum menghentikan aktivitas tulis
    max_execution_time. Batas waktu eksekusi untuk pernyataan SELECT, dalam milidetik
    max_connect_errors. Sebuah host diblokir dari koneksi selanjutnya jika ada lebih dari jumlah koneksi yang terputus ini
    max_user_connections. Jumlah maksimum koneksi simultan yang diizinkan ke akun MySQL mana pun
  • Untuk instance RDS untuk PostgreSQL, saat Anda menyetel parameter max_connections, pastikan juga meninjau parameter terkait koneksi PostgreSQL berikut
    idle_in_transaction_session_timeout. Hentikan sesi apa pun dengan transaksi terbuka yang telah menganggur lebih lama dari durasi yang ditentukan dalam milidetik. Ini memungkinkan setiap kunci yang ditahan oleh sesi itu untuk dilepaskan dan slot koneksi digunakan kembali. Selain itu, tupel yang hanya terlihat untuk transaksi ini akan dikosongkan
    tcp_keepalives_idle. Jumlah detik tidak aktif setelah sistem operasi mengirim pesan keepalive TCP ke klien
    tcp_keepalives_interval. Jumlah detik setelah pesan keepalive TCP yang tidak diakui oleh klien ditransmisikan lagi
    tcp_keepalives_count. Jumlah keepalives TCP yang dapat hilang sebelum koneksi server ke klien dianggap mati

Catatan. Artikel ini tidak menyertakan nilai yang disarankan untuk parameter yang tercantum karena nilai ini bervariasi berdasarkan kasus penggunaan Anda

Bagaimana cara memeriksa jumlah koneksi DB di MySQL?

Koneksi aktif atau total dapat diketahui dengan bantuan variabel threads_connected. Variabel menceritakan tentang jumlah koneksi yang sedang terbuka. mysql> tampilkan status di mana `variable_name` = 'Threads_connected'; Ini hasilnya.

Berapa banyak koneksi yang dapat ditangani 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.

Apa itu Max_used_connections di MySQL?

Max_used_connections adalah variabel status, dan didefinisikan sebagai "jumlah maksimum koneksi yang telah digunakan secara bersamaan sejak server dimulai. " Ternyata, Anda juga dapat mengatur ulang nilai ke nomor koneksi saat ini menggunakan FLUSH STATUS

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