MyNA(日本MySQLユーザ会) 2015年4月 に行ってきた #mysql_jp
最近ブログが勉強会参加レポートばかりになっている感がありますが、今日(4/22)は MyNA (日本MySQLユーザ会) に行ってきました。
ここのところ話題になっていた '🍣' = '🍺' 問題や、パフォーマンス・チューニング Tips, MySQL 5.7 の性能 / 新機能と、盛り沢山の話が聞けて、大変勉強になりました。
当日の Tweet が togetter にまとめられています。
発表内容と照らし合わせて見ると、参考になる情報もあるかもしれません。
以下、発表内容のノートになります。
資料はまだネット上に上がっていないものもあるようですが、捕捉したらこちらの記事も更新します。
(愚直にメモを取っていたので、かなりの分量になりました ^^; )
🍣=🍺
とみたまさひろさん
- 自己紹介
- 日本MySQLユーザ会代表
- MySQL的には 🍣 = 🍺
- PostgreSQLなら問題ない
- kamipo++
- CHARSET と COLLATION
- utf8mb4
- 🍣 = F0 9F 8D A3
- 🍺 = F0 9F 8D BA
- COLLATION = 文字の照合規則
show collation;
で確認できる。200 以上。- CHARSET が prefix についてる
- Charset ごとに Collation がある
- utf8mb4
- utf8mb4 の Collation 16個ある
- weight_string 関数で同じ文字列かどうか確かめられる
- 「パ」と「パ」問題
- utf8mb4_unicode_ci
- LIKE では区別される
- 「パ」は1文字、「パ」は2文字
- でも、= では同じになる
- MySQL にバグレポート上がってる
- MySQL Bugs: #76553: Sushi-Beer issue of MySQL with utf8mb4
- エイプリルフールに kamipo さんが上げてた。
- => 後ほど Verified になりました。
- MySQL Bugs: #76553: Sushi-Beer issue of MySQL with utf8mb4
🍣=🍺 問題、このイベント中にめでたく Verified になりました。/ http://t.co/3AUeWmEuac #mysql_jp
— きいあむ → @progrhyme (@key_amb) 2015年4月22日
MySQLの全文検索に関するあれやこれや
@yoku0825 さん
- 5.7.7-rc リリース
- 人はなぜ MySQL で全文検索するのか
- MySQL 全文検索の歴史
- 全文検索するために絶対に必要な知識
- InnoDB FTS vs Mroonga Tokenizer
MySQL 都市伝説 Part 2
横道さん
- 自己紹介
- wait_timeout の都市伝説
- wait_timeout の都市伝説 2
wait_timeoutの制限は累積- たぶんコネクションプールを使っていたのでは?
- wait_timeout の推奨設定
- 予期せぬ切断時に残ったセッションを自動切断するためのもの
- インタラクティブクライアントは極力排除
- 運用に支障を来さないなかでできるかぎり短く設定するべき
- コネクションプールの設定と整合性をもたせる
- コネクションプールのアイドルクリーンナップよりちょっと長くする
- FLUSH TABLES WITH READ LOCK の都市伝説
FLUSH TABLES WITH READ LOCK では READ は止まらない- FLUSH TABLES WITH READ LOCK 実行前に走っていたクエリが終わるまで、FLUSH TABLES WITH READ LOCK 自体が終わらない。そして元のクエリが使用しているテーブルに対するクエリがすべて止まる
- 長いクエリが走ってないことを確かめること
- メモリ使用量の都市伝説
- メモリ関係のパラメータの定石
- 基本デフォルト
- テスト、テスト、テスト
- 本番に近い接続数、クエリパターン
- 監視
- Created_tmp_disk_tables
- Sort_merge_passes
- Binlog_cache_disk_use
- パラメータでチューニングせず、クエリをチューニングせよ
- 理想は No filesort, No Join buffer, No temporary table
- むやみにパラメータ上限値を上げない
- メモリの都市伝説
- kernel.shmall
- kernel.shmmax
- いくつに設定すればいいのか?
- 変更する必要はない
- MySQL はシングルプロセスなので変える必要ない
- O_DIRECT の都市伝説
Innodb_flush_method=O_DIRECT は遅い- バッファプールに載ってなくて、ページキャッシュに載ってる場合だけ速い
- ページキャッシュ余ってるならバッファプールに割り当てるべき
- 推奨設定
- パーティショニングの都市伝説
- TRUNCATE の都市伝説
- TRUNCATE は速いので DELETE ではなく TRUNCATE を使うべき => △
- 間違いではないが、TRUNCATEではバッファプールのクリーンナップが必要
- でかいバッファプールだと遅い
- 別のセッションも止まる orz
- dictionary lock => テーブルキャッシュ増やす
- DEMO
- TRUNCATE 対応
- Server-side Prepared statement の都市伝説
- SQLインジェクション防止のためにServer-side Prepared Statement 使うべし => △
- Connector/J 5.1.8 以前にはバグが有った。
- 今はバグがないのでどっちでもいい
Server-side Prepared statement は速い- バグがある
- しばらく使っているとコケる
- Statement ID のロールオーバー。後勝ち。深刻
- 上限超えると先頭に戻る
- 実行できちゃうので結果おかしくなる
- 遅くなることがある
- 1サーバ内のStatement数に制限がある
- デフォルト 16382
- 使わない方がいい
- 特に Java
- コネクションプールで Statement ID がリセットされない
- どうしても使いたい場合は cachePrepStmts=true と一緒に
- Statement 保持されるので増えなくなる(?)
- Load Average の都市伝説
Load Average 監視してれば安心- Load Average = 実行中のタスク + Run Queue のタスク + Uninterruptible Sleep
- Uninterruptible Sleep
- read, write の同期IO
- 非同期IO ... AIO
- io_submit ... 実行後すぐリターン
- Callback か event で終了通知
- Uninterruptible Sleep にならない
- MySQL 5.5 から積極的に使用
- バッファプールのフラッシュに使用
- Flush 対応
MySQL 5.6, 5.7 性能比較
いとうひろゆき(@i_rethi)さん
※上は当日の発表資料から、追記・修正して 5/6 にアップされました*1。
- 比較内容
- 秒間接続数
- sysbench の point select と oltp
- tpcc-mysql
- ほか
- 環境
- 秒間接続数
- sysbench 0.4.12
- ソースいじって接続・切断のみ行う
- 結果
- connection/sec
- performance_schema ON でも性能低下が小さくなった
- 全体的に 1.29 倍
- connection/sec
- sysbench の point select, oltp
- sysbench 0.5
- 結果
- point select/sec
- 全部メモリに載る状態だと 5.6 の方がちょっと速い
- oltp read only
- 5.6 の方がちょっと速い
- oltp read write
- これも同様
- まとめ
- 5.7より5.6の方がよい結果に
- 5.7の方がよいという結果も見かけるのでCPUコア数で変わる?
- performance schema の性能影響は 5.6, 5.7 とも軽微
- AHI (Adaptive Hash Index) は有効な方がいい
- point select/sec
- tpcc-mysql
- 使用ツール = tpcc mysql
- 結果
- 5.7 の方が 1.12倍ほど速い
- AHI OFF の方が速い => 5.6, 5.7 とも
- 5.6 の設定そのままなので、調整すると 5.7 もっとよくなるかも
- まとめ
- 今後
- 2CPU 12Core24Thread でやってみたい
- Facebook のやつ試したい
- コメント
- 5.7 では NUMA の処理が改善している
「I/Oバウンドだと5.6より5.7が優勢。バッファプールに全部載るようなやつだと5.6の方がちょっと良かった」 #mysql_jp
— yoku0825 (@yoku0825) 2015年4月22日
参考
MySQL 5.7ではPerformance schemaを有効にしてもオーバーヘッドが小さいので基本有効でいかがでしょうか http://t.co/YAT9d4MC9P #mysql_jp
— 🐬🍣🍻 (@RKajiyama) 2015年4月22日
実は結構もうdimitriさんのサイトで5.7の出てる。http://t.co/PezN0yo36z サイト内の MySQL_Perf-Benchmarks-PLive_2015-dim.pdf は良い #mysql_jp
— ITOH Hiroyuki (@i_rethi) 2015年4月22日
State of The Dolphin
@RKajiyama さん
- 閑話休題
- Percona Live に合わせて重要な発表をいくつか
- 今年の1月から4月までの重要な発表
- 5 of the 5 Top Websites are powered by MySQL
- 7位か8位ぐらいに SQL Server のサイトがあるっぽい
- MySQL Cluster 7.4 GA
- MySQL Community 版の歴史
- MySQL Community 5.7 RC
- クエリ・リライト・プラグイン
- 参考: 日々の覚書: MySQL 5.7.5-labsのQuery Rewrite Plugin
- クエリの書き換え
- パースした後での書き換えプラグイン
- アプリケーションを変更することなく問題のあるクエリを書き換え
- ヒントの追加
- JOIN順の変更
- ORマッパーやサードパーティ製のアプリなどが発行する問題となり得るクエリに対応
- MySQL 5.7 GIS - Boost.Geometry との統合
- 独自コードの置き換え
- InnoDB の改善
- General Tablespace support
- Resize the InnoDB Buffer Pool online
- Additional Online ALTER TABLE support
- 今まで再起動必要だったパラメータのいくつかがオンラインで変更可能になった
- レプリケーション関連の改善
- GTID 強化
- On-line で GTID 有効化可能に
- 5.6 であったクリティカルなタイミングで書き込みが失われ得る問題への対処
- 準同期レプリの強化
- 8-10x Faster slave throughput
- マルチスレッドスレーブ
- GTID 強化
- Multi-Source Replication
- クエリ・リライト・プラグイン
- MySQL Labs
- 告知
- 今後のイベント等