- 追加された行はこの色です。
- 削除された行はこの色です。
#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 |
-計算式
(1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests)) ×100
上の例では
(1 - (2373/8868784))*100 = 0.973254507044032 で97%
#counter