はじめに
- @kamipo さんOracle ACEおめでとうございます。
- GMOさんと@yoku0825さん、会場提供と運営ありがとうございました。
- 発表者様の本質と違っている可能性もあります。(一部主観も記述してあります。)
- きっと資料はSlideShareあたりに出てくれると信じて・・・
- MySQLのことならhttp://mysql-casual-slackin.herokuapp.com @Slackに登録をとのこと。
- MySQLユーザ会からのお知らせ
- ユーザ会2015/10/30(金)にユーザ会の15周年パーティがあるそうです。
@kamipo MySQL運用とActiveRecord
MySQLを流行らせたい
- MySQLで困っている人を助けることで、MySQLを利用する人を増やす。
- Twitterで困っている人を探す
- githubで困っているissueを解決する
- ということは困っている人はどちらかにポストすれば手厚いサポートが受けられる・・・?
- 基本的にアプリケーションから利用されるので、ActiveRecordの問題も解決する。(ActiveRecord と MySQL両面から)
MySQLの問題を解決する
- ハハパパ問題
- utf8_unicode_ciは英語圏ではデフォルト。
- sushi beer問題
- 4byte文字(補助文字)がすべて同じ文字と判断されてしまう。
- http://blog.kamipo.net/entry/2015/03/23/093052
- utf8mb4を利用するべし。(こっちが真のutf8)
- mb4を利用するときはinnodb_large_prefixを利用する
- 利用しないとindexのサイズ上限にかかる。
- http://blog.kamipo.net/entry/2012/11/13/102024
- Online DDL(5.6以上)
- ただし5.5 -> 5.6にアップグレードした場合、5.5で作成した時間系のカラムがオンラインでAlterできない。
おすすめ機能
- pt-online-schema-change
- mysql_online_migrations
@i_rethi dimSTATから見るベンチマーク
dimSTATとは何か
- パフォーマンス可視化ツール(performance_schemaを集める。)
性能測定結果
- CentOS6.6 MySQL5.6.26と5.7.8 RC1で測定
- innodb_page_size=4Kにすると性能が上がっている。(default16K)
- ただし、環境によっては変更しても上がるとは限らない。
- xfsとext4ではxfsの方が性能がよい。
- ext4は複数thread 単一ファイルに弱い。単一thread 単一ファイルは変わらない。
- ext4はmutex lockが起こりやすい。
- Flame graphsでIO状況を可視化できます。
- ext4は複数thread 単一ファイルに弱い。単一thread 単一ファイルは変わらない。
- innodb_page_size=4Kにすると性能が上がっている。(default16K)
@kazeburo PHPとMySQLの怖い話、メルカリのデータベース戦略
mercariさんでの利用状況
- JPではクラウド+専用サーバ(Private LAN)
- ioMemoryでMySQL構築
- USではAWS
- RDSを利用(将来的には辞めたい模様)
- MySQLは5.6系を利用
- データベースをテーブル毎に分割してスケールアウトさせる。
- テーブルごとに別サーバに保存。別サーバ化する対象は以下のようなテーブル。
- 大きなテーブル
- トランザクションに無関係なテーブル
- テーブルごとに別サーバに保存。別サーバ化する対象は以下のようなテーブル。
- MySQL以外のデータベース・ミドルウェアを利用
- memcached
- Redis
- Treasure Data
- BigQuery
- Norikra
- MySQL 5.7
- Mackerel
ログ解析と監視
- ログはfluentdで収集してTreasureDataやMackrelに投げる
- ログから監視はfluentdで収集してNorikraで解析してSlackなどに通知。
- ログの敷居値アラートはMackerelを利用する。
分析DB
- Multi-Source Replication
- 3つのマスターからReplicationをして分析データベースを作成する。
- Triggerでマスクする
- MD5によるマスクをかける。(一意性も担保できる)
PHPとMySQLの怖い話
- commit()が例外を出さない
- 原因
- あくまでもERRORなので例外ではないと判断されるため。
- 対処
- ERRORが出力された場合、Exceptionにラップする。
- commit()の前にquery("SELECT 1")をするとよい。
- 原因
- ★Empty row packet body(ここがいまいち理解できませんでした・・・)
- 対処
- unbuffered queryを利用しない。
- net_write_timeoutを伸ばす。
- 対処
- PHPは怖くない!!!(らしい...)
@RKajiyama さてMySQL 5.7.8がGAではなくまさかのRC2であることが発覚したわけですが、ここでMySQL人柱の会の会員様向けの新ネタを見てみましょう。
とりあえず人柱募集とのこと
MySQL[今後|最近]の新機能
- mysql"p"ump
- MySQL Group Replication
- マルチマスタレプリケーション
- 擬似同期レプリケーション
- http://www.slideshare.net/ShinyaSugiyama/mysql-57
- MySQL JSON
- http://variable.jp
- データ型とネイティブ関数は違うものなので注意。
- New Data Dictionary
- すべてInnodb化する。
- http plugin
- httpの中にSQLを書ける
- MySQL Connector
- Haddop applier
- Binlog Events(旧Binlog Library)
- libmysqlstream
- libmysqlevents
- Group Replication
- Binlog Events
- Proxy & Fabric
- (ひっそり)Timezoneファイル