Menjalankan MySQL pada pengaturan optimal untuk sumber daya tertentu membantu menangani beban server yang lebih besar dan mencegah perlambatan server. Umumnya, setelah menyetel Apache untuk menangani beban yang lebih besar, akan bermanfaat untuk menyetel MySQL ke koneksi tambahan.
Penyetelan basis data adalah topik yang luas, dan panduan ini hanya mencakup dasar-dasar pengeditan konfigurasi MySQL Anda. Database MySQL yang besar membutuhkan memori yang cukup besar. Untuk alasan ini, kami merekomendasikan penggunaan High Memory Linode untuk pengaturan tersebut.
Catatan Langkah-langkah dalam panduan ini memerlukan hak akses root. Pastikan untuk menjalankan langkah-langkah di bawah ini sebagai root atau dengan sudo
awalan. Untuk informasi lebih lanjut tentang hak istimewa, lihat panduan Pengguna dan Grup kami.
Alat yang Dapat Membantu Mengoptimalkan MySQL
Untuk menentukan apakah database MySQL Anda perlu dikonfigurasi ulang, yang terbaik adalah melihat bagaimana kinerja sumber daya Anda sekarang. Ini dapat dilakukan dengan perintah atas atau dengan layanan LinodeLongview. Paling tidak, Anda harus membiasakan diri dengan penggunaan RAM dan CPU server Anda, yang dapat ditemukan dengan perintah berikut:
echo [PID] [MEM] [PATH] && ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20
MySQLTuner
Skrip MySQLTuner menilai penginstalan MySQL Anda, lalu mengeluarkan saran untuk meningkatkan kinerja dan stabilitas server Anda.
-
Unduh skrip MySQLTuner:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
-
Ubah izin skrip agar dapat dieksekusi:
chmod +x mysqltuner.pl
-
Jalankan
mysqltuner.pl
naskah. Anda akan diminta untuk memasukkan login dan kata sandi administratif MySQL Anda:./mysqltuner.pl
-
Script akan mengembalikan hasil yang mirip dengan output di bawah ini:
MySQLTuner menawarkan saran tentang cara meningkatkan kinerja database. Jika Anda khawatir tentang memperbarui database Anda sendiri, mengikuti saran MySQLTuner adalah salah satu cara yang lebih aman untuk meningkatkan kinerja database Anda.>> MySQLTuner 1.4.0 - Major Hayden <[email protected]> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '--help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: [OK] Currently running supported MySQL version 5.5.41-0+wheezy1 [OK] Operating on 64-bit architecture -------- Storage Engine Statistics ------------------------------------------- [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM [--] Data in InnoDB tables: 1M (Tables: 11) [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17) [!!] Total fragmented tables: 11 -------- Security Recommendations ------------------------------------------- [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K) [--] Reads / Writes: 100% / 0% [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads) [OK] Maximum possible memory usage: 597.8M (60% of installed RAM) [OK] Slow queries: 0% (0/113) [OK] Highest usage of available connections: 0% (1/151) [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K [!!] Query cache efficiency: 0.0% (0 cached / 71 selects) [OK] Query cache prunes per day: 0 [OK] Temporary tables created on disk: 25% (54 on disk / 213 total) [OK] Thread cache hit rate: 97% (1 created / 42 connections) [OK] Table cache hit rate: 24% (52 open / 215 opened) [OK] Open file limit used: 4% (48/1K) [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks) [OK] InnoDB buffer pool / data size: 128.0M/1.2M [OK] InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Enable the slow query log to troubleshoot bad queries Variables to adjust: query_cache_limit (> 1M, or use smaller result sets)
Menyetel MySQL
Saat mengubah konfigurasi MySQL, waspadalah terhadap perubahan dan pengaruhnya terhadap database Anda. Bahkan ketika mengikuti instruksi program seperti MySQLTuner, yang terbaik adalah memahami prosesnya.
File konfigurasi MySQL disimpan di lokasi berikut:/etc/mysql/my.cnf
.
CatatanSebelum memperbarui konfigurasi MySQL Anda, buat cadangan
my.cnf
berkas:cp /etc/mysql/my.cnf ~/my.cnf.backup
Praktik terbaik menyarankan agar Anda membuat perubahan kecil, satu per satu, dan kemudian memantau server setelah setiap perubahan. Anda harus memulai ulang MySQL setelah setiap perubahan:
Untuk distribusi yang menggunakan systemd:
systemctl restart mysqld
Untuk distribusi dengan sistem init yang berbeda:
service mysql restart
Saat mengubah nilai di
my.cnf
file, pastikan baris yang Anda ubah belum dikomentari dengan pound (#
) awalan.
key_buffer
Mengubah key_buffer
mengalokasikan lebih banyak memori ke MySQL, yang secara substansial dapat mempercepat database Anda, dengan asumsi Anda memiliki memori bebas. key_buffer
ukuran biasanya tidak lebih dari 25 persen dari memori sistem saat menggunakan mesin tabel MyISAM, dan hingga 70 persen untuk InnoDB. Jika nilainya ditetapkan terlalu tinggi, sumber daya akan terbuang percuma.
Menurut dokumentasi MySQL, untuk server dengan 256MB (atau lebih) RAM dengan banyak tabel, pengaturan 64M direkomendasikan. Server dengan RAM 128MB dan tabel yang lebih sedikit dapat diatur ke 16M, nilai default. Situs web dengan sumber daya dan tabel yang lebih sedikit dapat menetapkan nilai ini lebih rendah.
max_allowed_packet
Parameter ini memungkinkan Anda mengatur ukuran maksimum paket yang dapat dikirim. Paket adalah status SQL tunggal, satu baris dikirim ke klien, atau log dikirim dari database sumber ke replika. Jika Anda tahu bahwa server MySQL Anda akan memproses paket besar, yang terbaik adalah meningkatkannya ke ukuran paket terbesar Anda. Jika nilai ini disetel terlalu kecil, Anda akan menerima kesalahan di log kesalahan Anda.
thread_stack
Nilai ini berisi ukuran tumpukan untuk setiap utas. MySQL mempertimbangkan nilai default thread_stack
variabel yang cukup untuk penggunaan normal; namun, jika terjadi kesalahan yang berkaitan dengan thread_stack
dicatat, ini dapat ditingkatkan.
thread_cache_size
Jika thread_cache_size
"dimatikan" (diatur ke 0), maka setiap koneksi baru yang dibuat memerlukan utas baru yang dibuat untuk itu. Ketika koneksi terlepas, utas dihancurkan. Jika tidak, nilai ini menetapkan jumlah utas yang tidak digunakan untuk disimpan dalam cache hingga perlu digunakan untuk koneksi. Umumnya pengaturan ini memiliki sedikit pengaruh pada kinerja, kecuali jika Anda menerima ratusan koneksi per menit, pada saat itu nilai ini harus ditingkatkan sehingga sebagian besar koneksi dapat dibuat pada utas yang di-cache.
max_connections
Parameter ini menetapkan jumlah maksimum bersamaan koneksi. Sebaiknya pertimbangkan jumlah maksimum koneksi yang Anda miliki di masa lalu sebelum menyetel nomor ini, jadi Anda akan memiliki penyangga antara nomor atas dan max_connections
nilai. Catatan, ini tidak menunjukkan jumlah maksimum pengguna di situs web Anda sekaligus; melainkan menunjukkan jumlah maksimum pengguna yang membuat permintaan secara bersamaan.
table_cache
Nilai ini harus dijaga lebih tinggi dari open_tables
Anda nilai. Untuk menentukan nilai ini gunakan:
| |
Informasi Lebih Lanjut
Anda mungkin ingin berkonsultasi dengan sumber daya berikut untuk informasi tambahan tentang topik ini. Meskipun ini disediakan dengan harapan dapat bermanfaat, harap perhatikan bahwa kami tidak dapat menjamin keakuratan atau ketepatan waktu materi yang dihosting secara eksternal.
- Perpustakaan Dokumentasi MySQL
- Parameter Server Penyesuaian MySQL
- MySQLTuner