myna会20130729にいってきた記録
こんにちは。smallpalaceです。
タイトルどおり勉強会に行ってきたのでその記録を。
・まず来日されていたmysqlの中のすごい人(女性)によるperformance_schemaのお話
なんとなくスライドをメモっていたけど、以下URLが同じもの。
http://technocation.org/files/doc/2013_07_PS.pdf
サマリーとかダイジェストをpsからselectすることで
詳しくioなどのステータスをリアルタイムに見ることができとても便利そう。
そのときディスクに書いちゃってるクエリがわかるみたいなのが色々。
前回木村明治さんが紹介されていたps_helperオススメだそうです。
ポッドキャスト聞いてねとのこと
OurSQL Podcast episodes 139, 140, 141
Slides/blog post
ぽっどキャストのCDをお土産にもらいました。ありがとうございます。
英語の勉強したいと思います。
------
続いては
・とみたまさひろさんのmysqlプロトコル解説
プロトコルを知るといいこと
→libmysqlclientに制限されないアプリがつくれる
→MySQLパケットを中継するなにかをつくれるかも(proxy風のなにか)
rubyだとスレッドがたまるとかあるみたい
パケット
3byte、データ長
1byte、シーケンス番号
xbyte、データ
可変長整数
というようなプロトコルの解説が延々続き会場は静寂につつまれました
一部のレベルの高いすごい方々には評判がよかったようです。
わたしはそんなレベルでないので活用する場所はなさそうなような。
結論、素直にAPIつかうのがいい。というご本人の結論でした。
http://slide.rabbit-shocker.org/authors/tommy/mysql-protocol/
--
・平塚さんのMySQL5.6パラメータ検討会
パラメータ数が増えすぎてつらい話をわかちあいたい
mysql5.6ではORACLEより増えた
ORACLEのマルチスレッドパラメータ気にしてるとかオラクルの話がちょっと出てました
サンプルを使おうにも5.5までついてたやつはそもそもあまり役に立たなかった
そこで本日はAmazonRDSの設定を参考にして、要注目パラメータを解説しましょうということに。
microとsmallを立ち上げてパラメータ引っこ抜いて即効落としたそうです。slave分も。
事の発端↓
RDSが5.6に対応したブログがかかれてる
http://aws.typepad.com/aws_japan/2013/07/mysql-56-support-for-amazon-rds.html
RDSのパクリをしようと決意したと。
Autoバックアップ設定しないとパラメータ手抜きされちゃうとかあるようです。
スライドとエクセルをみながらパラメータを一個一個説明するなど。
★デフォルトから変更されているパラメータ
黒字のところ
binlog_format バイナリログのフォーマット
デフォルトのステートメントだともんだいいあるので中の人はMIXEDを選んでいる
逆に5.1以降でステートメントむずかしく問題あるのでそろそろデフォルトMIXEDでいいのでは
explicit_defaults_for_timestamp デフォルトOFF
いきなり替えるとトラブる系の意識の高いパラメータ。AWS的にON
innodb_log_file_sizeデフォルト値ちいさい。aws的には128*2
key_buffer_size デフォルト8Mで変更後16M
倍でも小さめなのでRDSではmyisamつかわない想定ぽい
log_slave_updates バイナリログをスレーブでも出力するかどうか
孫スレーブとかをつくらせない方針ということで以前はOFF固定だったが
AWS的にONになった
master_info_repository/relay_log_info_repository/relay_log_recovery
クラッシュセーフにするためのしくみ。こちらをTABLEに。なぜデフォルトFILEなのか意味がわからない
スレーブがクラッシュした際、リレーログの末尾が壊れてることを考慮したもの
sync_binlog が5.6から1になってる!!ここ一番重要。
変更不可になってるっぽい
性能は上がってる模様
MySQL5.6からコミット毎の3回のコミットが2回に減った模様。(他のRDBMSと同様になった)
ただ、5.5と同じ設定だと壊れた時のデータの保全性が異なって大変なことになるので気にしましょう。
MHAつかってるとかの場合以外は5.6からはsync_binlogは1必須とのこと。
RDS的に変更不可なやつは3つ
★5.5から変更されているパラメータ
innodb_additional_mem_pool_size
デフォルト8メガ.さわんなくていいやつ。my.cnfから行ごと削除でOK。
innodb_buffer_pool_instatnces
デフォルト8ほっとけばよし。5.5まではこれを2にするとかよっぽどでないと必要ないと開発者がいってたらしい。
innodb_flush_method
O_DIRECT
5.6ではやめたらしい。再起動後の性能回復は遅い。バッファプールダンプ使えば緩和はできる。
OSのページキャッシュを別につかいたい理由がなんかあったぽい。
理由は不明で気になっている
innodb_old_blocks_time デフォルトが0から1000ミリ秒(1秒)に。
ウォームアップでフルスキャンしても載らなくなる。
NEW領域にあった貴重なデータを流さないための模様
max_connect_errors
接続エラー10回から100回に。高負荷時とかだめなときは継続して起きるので100になったところで意味あるか微妙ではある。
たしかに。
クエリキャッシュデフォルト無効
5.6からはOFFからONにするには再起動しないとダメ
オワコンということかも
sort_buffer_sizeデフォルト値がだいぶへりました。
セッション単位で変更可能なのでそうするのがいいっぽいです。
/usrの下に勝手につくられたmy.cnfに書かれた設定をコメントしましょう。
table_open_cache
デフォルト値が5.1は400とかで少なかったので2000にふえた。これを増やすのは必要。
★インスタンスサイズによって異なるパラメータ
innodb_buffer_pool_size
5.1は8MBで論外だった一番重要で大体メモリの半分割り当てる
RDSでは半分よりちょっとアグレッシブに割り当ててる
MaxConnections デフォルトは151らしい。apacheにあわせてかわったらしいが今あんま意味ない
RDSでは物理メモリに収まるように計算はされてる
自動計算されるパラメータ
back_logソケットキューの長さ
カーネルパラメータの値も考える
host_cache_sizeエントリ目に見えるようになった
thread_cache_size
自動調整で8とか9とからしい。
max_alowed_packet
スレーブだけ最大値(1GB)。設定ミスでレプリケーションがとまることないようにAWSの親心
文字コードは特別な事情がなければutf8mb4がいいと思われる
gtid_mode
RDSではボツ。
スロークエリログ
デフォルトOFF。
RDSではテーブルに出すといいよ
デフォルト値は最適値ではぜんぜんない
ほんとにそのとおりですね!!
宿題
1.explicit_defaults_for_timestampをお使いの環境に適用して確認してみてください
というようなのが1から4まで。スライドは以下からどうぞ。
http://d.hatena.ne.jp/sh2/20130806
----
LT
・yokuさん チューニンガソンの復習
http://www.slideshare.net/yoku0825/5-24757328
sh2さんの宿題
これよりはやくしてください
魔改造とのこと。
結局MyISAMつかっていましたw
スモーカーが集うmysqlの飲み会したいそうです。
----
・yamasakiさんのLT mysqlクラスタ7.3の紹介
性能がかなり伸びた
オートインストーラができた
5分くらいでできるらしい
デモみました。
ブラウザでインストール設定できるのはよさそうでした。
以上。みていただいてありがとうございました。
また機会があれば。