Mari bercakap tentang MySQL : Concurrent Connections

Aku terpanggil untuk menulis tentang MySQL sebab kebelakangan ini ramai sangat yang bertanya tentang Concurrent Connection dalam pangkalan data secara amnya dan MySQL secara khasnya.

Secara am, setiap pangkalan data mempunyai asas Max Concurrent Connection yang dimasukkan ke dalam enjin pangkalan data itu sendiri. Kenapa rasanya? Alasannya adalah disebabkan jika tiada had sambungan (connections) ke MySQL, akan berlakunya kehabisan penggunaan 'resources' (CPU, ingatan RAM, kapasiti cakera keras, IO) di dalam sesebuah pelayan. Selain itu, had adalah dikawal untuk mendisplinkan pembangun aplikasi dalam menggunakan sambungan ke pangkalan data. Bak kata seorang sahabat saya "Pembangun aplikasi kena faham connection ke database adalah expensive".

Adakah kita boleh menukar nilai maksimum sambungan ke pangkalan data? Sudah semestinya. Anda perlu ingat bahawa enjin pangkalan data direka cipta oleh manusia. :)

Mari kita kembali ke MySQL. "The default value is only 100 connections, which is very small" Pernyataan ini diambil dari artikel MySQL Administrator Best Practices. Untuk menukar jumlah sambungan maksimum di dalam MySQL kita cuma perlu mengubah kandungan fail my.cnf dengan menambah

max_connections = no-of-connections

Senang bukan? Tapi perlu diingatkan semakin banyak sambungan, semakin banyak 'resources' yang digunakan. Dan juga kemungkinan sistem pengoperasian pada pelayan anda tidak dapat menampung jumlah sambungan yang terlalu banyak. Sebagai contoh, dalam versi binari MySQL, jumlah maksimum sambungan adalah 4096. Adakah anda yakin sistem pengoperasian dan pelayan tuan/puan dapat menampung jumlah sambungan sebanyak itu? Sebagai contoh perkakasan pelayan saya adalah seperti berikut

2 x Quad Core Intel E5620 2.4 GHz with HT enabled
8 x 4 GB DDR 3 RAM
4 x 1GE NIC
3 x 500 GB 7.2K RPM SAS Hard disk

Cuba teka berapa banyak connections yang boleh ditampung oleh pelayan tersebut?

Tak sampai pun 1000 concurrent connections tuan/puan. Had bukan pada OS, bukan pada CPU, bukan pada RAM, bukan pada IO tapi pada 7.2K 2.5" 500 GB Hard disk.

Setiap sambungan yang dilakukan pada MySQL akan melakukan operasi baca/tulis pada cakera keras. Oleh itu kelajuan hard disk amat penting. Tapi bukan itu sahaja. Jumlah 'disk spindle' pada cakera keras pun amat penting. Disebabkan itu dalam praktis terbaik bagi pengurusan pangkalan data, ramai yang menasihatkan penggunaan 15K RPM SAS Hard disk (atau lagi baik penggunaan SSD), minimum 4 cakera keras dan RAID 1+0. Walau bagaimana pun saya tahu amat sukar untuk membuat justifikasi pembelian perkakasan yang canggih manggih seperti itu. Tapi saya percaya kalau tuan puan membuat 'screen capture' penggunaan 'resources' di dalam pelayan tuan puan, insya-Allah boleh dapat. Bagaimana saya tahu? Sebab pasukan kerja di mana saya berada telah membuat perkara yang sama.

No comments: