Tuning MySQL dengan /etc/my.cnf file

July 22 | Posted by Muhammad Yusuf E. | Berita IT Tags: , , , ,

Sambungan dari tulisan saya sebelumnya tentang tuning MySQL, saya akan menjelaskan sedikit tentang tuning yang dapat kita lakukan dengan menggunakan file /etc/my.cnf. File my.cnf adalah file yang biasanya terletak di bawah direktori /etc/. File ini digunakan untuk mengeset tuning yang kita inginkan sesuai dengan kebutuhan dan kemampuan MySQL kita. Ada hal-hal yang apabila kita perhatikan maka akan membuat kemampuan atau kecepatan MySQL kita semakin meningkat. Tentunya tidak semua server mempunyai my.cnf yang sama persis, kecuali kalau konten atau query dari database adalah sama persis, maka my.cnf dapat kita setting dengan isi yang sama.

Misalnya adalah setting my.cnf seperti di bawah ini,

[mysqld]
socket=/path/to/mysql.sock
datadir=/var/lib/mysql
skip-locking
skip-innodb
# MySQL 4.x has query caching available.
# Enable it for vast improvement and it may be all you need to tweak.
query_cache_type=1
query_cache_limit=1M
query_cache_size=32M
# Reduced to 200 as memory will not be enough for 500 connections.
# memory=key_buffer+(sort_buffer_size+read_buffer_size)*max_connections
# which is now: 64 + (1 + 1) * 200 = 464 MB
# max_connections = approx. MaxClients setting in httpd.conf file
# Default set to 100.
max_connections=200
#interactive_timeout=180
interactive_timeout=100
#wait_timeout=180
#wait_timeout=100
# Reduced wait_timeout to prevent idle clients holding connections.
#wait_timeout=30
wait_timeout=15
connect_timeout=10
# max_connect_errors is set to 10 by default
#max_connect_errors=10
#table_cache=256
#table_cache=1024
# Checked opened tables and adjusted accordingly after running for a while.
table_cache=512
# Reduced it to 32 to prevent memory hogging. Also, see notes below.
thread_cache=32
# key_buffer=258M
# Reduced it by checking current size of *.MYI files, see notes below.
key_buffer=128M
# Commented out the buffer sizes and keeping the default.
# sort_buffer_size=2M by default.
#sort_buffer_size=1M
# read_buffer_size=128K by default.
#read_buffer_size=1M
# 1Mb of read_rnd_buffer_size for 1GB RAM -- see notes below.
# read_rnd_buffer_size=256K by default.
#read_rnd_buffer_size=1M
# myisam_sort_buffer_size used for ALTER, OPTIMIZE, REPAIR TABLE commands.
# myisam_sort_buffer_size=8M by default.
#myisam_sort_buffer_size=64M
# thread_concurrency = 2 * (no. of CPU)
thread_concurrency=2
# log slow queries is a must. Many queries that take more than 2 seconds.
# If so, then your tables need enhancement.
log_slow_queries=/var/log/mysqld.slow.log
long_query_time=2

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
open_files_limit=8192

[mysqldump]
quick
max_allowed_packet=16M

[isamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M

[myisamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M

[mysqlhotcopy]
interactive-timeout

[client]
socket=/path/to/mysql.sock

Mari kita perhatikan option-option seperti di bawah ini,

max_connections
max_connections adalah maksimum sambungan yang dapat dilakukan dalam waktu sekaligus, kalau website anda sangat sibuk, semakin besar tentunya akan semakin bagus, akan tetapi sudah pasti bahwa karena resource server akan semakin banyak dipakai maka CPU atau memory anda akan semakin termakan oleh proses mysql.
Karena itu, nilai max_connections dapat anda sinkronkan dengan besar memory anda dan akses maksimum Apache anda, di MaxClient. Tidak ada artinya anda perbesar akan tetapi MaxClient di Apache anda sangat kecil, misalnya hanya sekitar 50 sambungan saja.
Misalnya adalah seperti ini.

max_connections=200

query_cache_size
Apabila MySQL anda sibuk dan selalu mengulang-ulang query yang sama, maka settting query_cache_size anda perlu anda perhatikan. query_cache_size akan menyimpan query yang berulang, sehingga akan mempercepat kerja MySQL anda untuk query yang sama. Karena query yang sebelumnya disimpan dalam memory cache.

key_buffer_size
Data base menggunakan key index. Karena itu apabila index ini tersimpan dalam satu memori secara utuh, maka sudah tentu proses MySQL anda akan semakin cepat mendapatkan hasil dari query yang diinginkan. Secara ideal semua index akan bagus tersimpan dalam memory ini, akan tetapi anda perlu juga melihat kemampuan kapasitas memory anda.

table_cache
Apabila MySQL anda banyak menggunakan table query, maka besar memori ini juga perlu anda perhatikan. Karena akan mempercepat proses query yang berhubungan dengan table. Default memory ini adalah 64Kb.

sort_buffer
Apakah MySQL anda memiliki query atau operasi myisamchk atau sort ? Maka option ini sangat penting untuk anda perhatikan. Dengan memasang buffer yang besar tentunya anda akan melakukan sorting secara besar juga. Nah sudah pasti sorting anda akan semakin cepat selesai.

read_rnd_buffer_size
read_rnd_buffer_size digunakan setelah kita melakukan sorting. Yaitu untuk memproses row dari query sorting yang telah kita lakukan. Apabila query anda sering memakai ORDER BY, maka option ini perlu anda perhatikan.
Anda dapat menghitung besar buffer ini dengan logika 1 MB adalah 1KB, jadi apabila memory server anda adalah 1GB, maka anda dapat mengesetnya sebesar 1MB.

thread_cache
Apabila server anda sibuk dengan banyaknya query dan memerlukan respon yang sangat cepat, maka thread_cache adalah option yang perlu anda perhatikan. Karena itu semakin besar nilai ini, akan semakin tinggi load CPU anda.

tmp_table_size
tmp_table_size akan memberikan kesempatan kepada MySQL untuk menyimpan table ke dalam harddisk yang dianggap sebagai memory. Sudah tentu tmp_table_size akan memperlambat kecepatan MySQL. Apabila anda mempunyai memory yang minim dan kecepatan MySQL tidak begitu diperhitungkan, barangkali ini adalah option yang anda kehendaki.

Bagaimana cara menghitung memory yang diperlukan oleh MySQL dengan mudah ? Anda dapat menggunakan rumus sederhana berikut ini.

memory=key_buffer+(sort_buffer_size+read_buffer_size)*max_connections

Tags: , , , ,

6 Responses to “Tuning MySQL dengan /etc/my.cnf file”

  1. rendy says:

    om… artikelnya bagus :D

    boleh saya ambil, buat referensi ;)

    thx..

  2. moses says:

    Pak saya sangat tertarik dengan tutorial yang bapak buat dalam website ini, namun saya masih kurang paham dengan tuning mysql di ubuntu.

    Pada saat saya install mysql di ubuntu my.cnf defaultnya adalah settingan untuk personal. Kalau kita mau untuk tipe server ada saya lihat di /usr/share/doc/example

    -rw-r–r– 1 root root 4929 2009-04-07 19:09 my-huge.cnf
    -rw-r–r– 1 root root 20927 2009-04-07 19:09 my-innodb-heavy-4G.cnf
    -rw-r–r– 1 root root 2085 2009-04-07 19:09 my-large.cnf.gz
    -rw-r–r– 1 root root 2113 2009-04-07 19:09 my-medium.cnf.gz
    -rw-r–r– 1 root root 2482 2009-04-07 19:09 my-small.cnf
    -rw-r–r– 1 root root 723 2009-04-07 19:09 ndb_mgmd.cnf

    Nah saya sudah coba my-huge.cnf menggantikan my.cnf tapi kok malah lambat banget yah? Padahal memori server saya 8 GB

    GImana pendapat bapak??

    Thanks

  3. Muhammad Yusuf says:

    Coba di cek di lognya seperti apa.

  4. Yth Bpk M Yusuf
    Saya masih bingung mengenai rumus
    memory=key_buffer+(sort_buffer_size+read_buffer_size)*max_connections

    sort_buffer_size & read_buffer_size menggunakan yg ada di [isamchk] & [myisamchk] ya?

    berarti dua2nya harus sama ya?lalu key_buffer dihitung dri yg sendiri atau yg di isamchk] & [myisamchk]

    Mohon maaf kalau saya salah, terimakasih

  5. dua2 harus dihitung dan harus dihitung yang sendiri.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>