Optimasi MySQL

20. August 2014 - 11:30 sugeng
Tags: 

MySQL adalah sebuah database server yang banyak digunakan untuk mendampingi program-program web (php). Agar database server ini dapat digunakan secara optimal maka berikut ini adalah beberapa hasil temuan dari googling.

Memilih bentuk engine

MySQL memiliki beberapa bentuk engine yang dapat digunakan. Tetapi yang paling sering dipakai adalah innoDB dan myISAM. Apabila memang fasilitas innoDB tidak digunakan maka lebih baik gunakan engine myISAM pada table yang dibuat.

Melakukan Optimasi table

Setelah beberapa kali digunakan, dan terdapat perubahan data yang cukup banyak, maka mySQL perlu dioptimasi. Jalankan perintah : OPTIMIZE TABLE foo Perintah diatas digunakan untuk optimasi sebuah tabel dengan nama foo, atau dengan melakukan perintah : mysqlcheck -o €"all-databases perintah diatas digunakan untuk optimasi seluruh tabel.

Mengatur setting dari mySQL

Terdapat beberapa setting mySQL yang perlu diatur, tetapi semua itu tergantung dari keperluan dan besaran resource yang dimiliki

max_allowed_packet = 16M

angka 16M ditentukan sesuai kebutuhan, saya menuliskan itu sesuai hasil pencarian diweb site. Selanjutnya menentukan besaran ‘innodb_buffer_pool_size’ :

untuk menentukan ini saya menggunakan beberapa script untuk menghitung besar ‘innodb_buffer_pool_size’ (http://dba.stackexchange.com/questions/27328/how-large-should-be-mysql-i...).

Berikut ini perintah untuk melihat isi dari variable yang dibutuhkan :

SHOW VARIABLES LIKE 'innodb_buffer_pool_size'
SHOW VARIABLES LIKE 'innodb_io_capacity'
SHOW VARIABLES LIKE 'innodb_read_io_threads'
SHOW VARIABLES LIKE 'innodb_thread_concurrency'
SHOW VARIABLES LIKE 'innodb_write_io_threads'

sebaiknya variable tersebut diisi sebagai berikut :

innodb_io_capacity =2000
innodb_read_io_threads =64
innodb_thread_concurrency =0
innodb_write_io_threads =64

Untuk ‘innodb_buffer_pool_size’ :

pertama dilakukan pengecekan RIBS dengan script berikut

SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM (SELECT SUM(data_length+index_length) Total_InnoDB_Bytes FROM information_schema.tables WHERE engine=’InnoDB’) A;

atau dapat juga menggunakan script berikut :

SELECT CONCAT(CEILING(RIBPS/POWER(1024,pw)),SUBSTR(' KMGT',pw+1,1)) Recommended_InnoDB_Buffer_Pool_Size FROM
   (SELECT RIBPS,FLOOR(LOG(RIBPS)/LOG(1024)) pw
    FROM(SELECT SUM(data_length+index_length)*1.1*growth RIBPS
        FROM information_schema.tables AAA,(SELECT1.25 growth) BBB
        WHERE ENGINE='InnoDB') AA
) A;

Jika isi RIBS adalah 3 maka innodb_buffer_pool_size dapat diisi dengan 3, setelah dilakukan restart database server mysql, maka dapat dilakukan pengecekan seberapa besar penggunaan buffer pool dengan menggunakan script :

SELECT (PagesData*PageSize)/POWER(1024,3) DataGB FROM 
   (SELECT variable_value PagesData FROM information_schema.global_status WHERE variable_name=’Innodb_buffer_pool_pages_data’) A, 
   (SELECT variable_value PageSize FROM information_schema.global_status WHERE variable_name=’Innodb_page_size’) B;