- 投稿日:2019-05-12T13:58:59+09:00
MySQLスロークエリについて
みなさん、おはこんばんにちは。
なんちゃってインフラエンジニアのしりうすです。今日はWebサーバにおけるDBのお話です。
WebサーバでLoadアベレージが上がる要因の一つにDBがあげられます。
これはWebアプリケーションサーバがDBに対してクエリを投げたときに、 DB側でのクエリ処理能力を上回り遅延するのが要因の一つになりうるのです。
遅延したクエリ、つまりはスロークエリを分析することにより、負荷上昇を防ぐためのチューニングや、
DBのスペックアップを検討するのに役立つのです。DBでのクエリの確認手法
MySQL show processlist; show full processlist\GPostgreSQL SELECT * FROM pg_stat_activity;上記のコマンドをDB上(MySQL or PostgreSQL)で実行すると、
実行されているクエリが表示されるので、実行時間を確認してみれば
クエリの滞留があるかどうか判別できる。他にもスロークエリログを出力させるさせる手法もある。
set global slow_query_log=1; // 0でOFF, 1でON set global long_query_time=1; // スロークエリログとして出力する実行時間のしきい値(秒単位) set global slow_query_log_file ='/usr/local/var/mysql/slow_query.log'; // スロークエリログの出力先スロークエリ集計コマンド
ionice -c2 -n7 nice -n19 tail -n1000000 /usr/local/var/mysql/slow_query.log | awk '/^# Time/{ d=$3; t=$4; } (/^# Query/ && d){ c=$2; q=$3; print d,t,c,q; }' | cut -d : -f 1,2 | sort -n | uniq -c | lessionice -c2 -n7 nice -n19 tail -n1000000 /usr/local/var/mysql/slow_query.log | grep timestamp | cut -d= -f2 | awk '{print strftime("%Y-%m-%d %H:%M",$1)}' | sort | uniq -c | less
- 投稿日:2019-05-12T12:08:26+09:00
MYSQLはまりどころとか(自分用)
細かい点
◦バージョンが8.0か5.7以下かはっきり区別しておかないとはまる。
◦インストローラー版は自動でファイルを配置してくれる、フォルダ構成を自分で決めたいときはzip版を選んで自分で配置。
◦my.iniの場所はprogramfile× programdata〇
◦ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)そもそもサーバーが起動していないときのエラー
◦たまにC:\Program Files\MySQL\MySQL Server 5.7\dataフォルダがないと怒られるなんかmysqldしても立ち上がらないときの対処法
・初期化
mysqld --initialize --console //consoleオプションはコンソールにログ?のようなものが表示されヒントになる //ランダムなパスワードが設定される・サーバー起動
mysqld・version8.0 パスワード変更(version5.7でも使えた)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxx'; //××××は新パスワード困ったら初期化して→仮パスワード作って→mysqld起動させて→仮パスワードでログインして→alteruser文でパスワード変更したらなんとか入れる、、、!
下記エラーが発生したときの対処法
java.sql.SQLException: Incorrect string value:mysql> SHOW CREATE TABLE テーブル名; //テーブルの詳細が出るのでDefaultCharasetを確認mysql> ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4; //文字コードを変更