#author("2020-03-10T00:32:52+00:00","default:wikiadmin","wikiadmin") #author("2020-03-10T00:33:31+00:00","default:wikiadmin","wikiadmin") -MySQLのパフォーマンスチューニングについてまとめ #contents *参考本・サイト [#ta8a94eb] -現場で使えるMySQL -http://blog.cles.jp/item/473 *ツール [#l899409d] -https://github.com/major/MySQLTuner-perl 使ってない! wget -O tuner.zip https://github.com/rackerhacker/MySQLTuner-perl/archive/master.zip unzip tuner.zip cd MySQLTuner-perl-master/ chmod 755 mysqltuner.pl perl mysqltuner.pl --user root -pass='xxxxxxx' *単体チューニング [#md7b35de] **スロークエリーログテーブル版 [#w4028474] ***確認 [#of190e83] SHOW GLOBAL VARIABLES LIKE '%query_time%' ; SHOW GLOBAL VARIABLES LIKE '%slow_query%' ; ***設定 [#a8220a9b] set global log_output = 'TABLE'; set global long_query_time = 0.3; set global slow_query_log = ON; flush logs; ***スロークエリーテーブル [#n97c130f] select * from mysql.slow_log order by start_time desc limit 10 **スロークエリーログ [#h323c5b7] 一定時間以上かかるクエリーやフルスキャンを行った場合にログに出力する機能。デフォルトではOFF -SQL set global slow_query_log = 1; set global long_query_time = 0.3; --0.3秒以上なら出力 set global slow_query_log_file ='slow_query.log'; -- 出力先 /var/lib/mysql/slow_query.log set global log_queries_not_using_indexes = 1 set global log_output = 'FILE'; my.iniに以下を追加 long_query_time=5 log-slow-queries=c:/mysql/slow.log フルスキャンに関しては4.1からログに取れるようになった。起動オプションに以下を加える --log-queries-not-using-indexes [mysqld] log_queries_not_using_indexes **オプティマイザについて [#z9918f18] 他DBMSにおいてはコストベースのオプティマイザが優位になりつつあるが、MySQLはルールベースだけらしい。 **クエリーキャッシュ [#d438241c] *InnoDB バッファキャッシュ [#v7a449a9] MariaDB [(none)]> show global status like 'Innodb_buffer_pool_read%'; +---------------------------------------+---------+ | Variable_name | Value | +---------------------------------------+---------+ | Innodb_buffer_pool_read_ahead | 1942 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_requests | 8868784 | | Innodb_buffer_pool_reads | 2373 | +---------------------------------------+---------+ | Variable_name | Value | | Innodb_buffer_pool_read_ahead | 1942 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_requests | 8868784 | | Innodb_buffer_pool_reads | 2373 | -計算式 (1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests)) ×100 上の例では (1 - (2373/8868784))*100 = 0.973254507044032 で97% #counter