第1回に引き続き、"あまりカジュアルではない?"が定説となりつつあるw「MySQL Casual Talks」の第2回が開催されたので、行ってきました。前回に引き続き面白かったので、自分のメモ書きを貼り付けておきます。
(全然追いついてないメモも多いし、スピード感たっぷりだったので間違った記載もあるかもですが、そこはご了承を...)
# 例によって、発表資料が出揃ったらそちらを見ていただいた方が良いです。
ちなみに、第1回のメモエントリは、、
追記
このエントリでもまとめ的に、公開された資料も紹介させていただいておりますw
MySQLでNoSQL (@oinume)
View more presentations from Kazuhiro Oinuma
- 生沼さん、実はMySQLは3.23の頃からさわってる!
- 謝罪: 今回はFusion-ioの話はしないw
アメーバピグ
- ユーザ数800万人超
- 2009/2サービス公開
- アーキテクチャ
- Webサーバ x35台、Socketサーバ x70台、memcachedサーバ x4台、Fusion-io+MySQL x6台
- トラフィック: 約2.1Gbps
- 同時接続数: 100000
- Webサーバへは、36000req/s
- Socketサーバへは、160000req/s
- DBへは、52000qps
ピグでのMySQLの使い方
- RDBMSとしては使っていない
- IndexPersisterを実装して使っている
- アプリではSQLを書かない
- fetch - 複数レコード取得
- count, exists, remove, save...
パフォーマンスチューニング
- MySQLのSlow Queryをみる
- でも、それだけだとわからんので・・・
- クライアント側でもスロークエリ的なのを出力
- Javaのスタックトレースも出している
遅いパターンの改善
- 大量のload(細かいデータの取得)
- MySQLサーバのContext Switchが激しい
- in句をうまく使う
- 大量データのfetch
- key以外のカラムで絞り込めない
- 絞り込みたいカラムを別テーブルを作って作成
- 将来的には1回のfetchで取得できる件数を制限したい
KVSとして使うメリット
- 生SQLが書けない
- JOINできない
- 基本的にINDEXの効かないクエリが投げられない
- ALTER TABLEもできない
- MongoDBなどのKVSに移行しやすい
僕たちが失ったもの
- キー以外でのカラムでの絞り込み
- 特定のカラムでソート
- 毎回アプリでソートロジックを書いている
- カラムの型変換
まとめ
メリット・デメリットあります
超カジュアルに使うMySQL (@tasukuchan)
View more presentations from Tasuku Suenaga
- グニャラくん
- DeNA!!に転職したばかり!
- 前職では、Senna/groongaの開発とか
MySQLをもっとカジュアルに使おう
まずはMySQL
- 最初の選択肢として
- 運用実績のない運用は大変
- システムを維持する人件費
- 運用担当者の気持ちになる
- 自分が24h/365dをかけてお守りができるか
- MySQLは枯れている
- 運用実績のない運用は大変
カジュアルスキーマ
- idは贅沢にBIGINT
- JSON/XMLをvalueカラムに保存
- natural_key/created/updatedは別カラムで
- インデックス必要だったら、別のテーブル作成する
- FriendFeed方式
スキーマの動的変更
- カラム追加すればいいんじゃね?
- 動的なカラム追加は遅い
- MySQLのALTER TABLEは遅い
カラムの動的追加
- openarkkit
- MySQL便利グッズ詰め合わせ
- oak-online-alter-table
- 別の一時テーブルを新スキーマで作成
- 元テーブルからデータコピー
- 差分補正
- リネーム
- OnlineSchemaChange.php by facebook
- 基本的にはoak-online-alter-tableと同じ
ちょっとした工夫
- MessagePack+Snappy
- データ容量も圧縮できる
- 6割くらい縮むらしい
- I/Oも減る
まとめ
運用担当者を大事にしよう
Performance Schema活用入門 ([@nippondanji)
View more presentations from Mikiya Okuno
カジュアルにディープな機能を使いこなそう
Performance Schemaって?
- 情報を収集するためのツール
- MySQL5.5から搭載
- ストレージエンジンとして実装
- きめ細やかな情報を採取できる
MySQLの状況を知りたい
- うまく動かない?性能が出ない?クエリ結果がおかしい?リソース消費量が多い?
どうして新しい仕掛けが必要か
- 非破壊検査は難しい
- 動いているシステムを止めるのはNG
MySQLにも状況を調べる方法はある
- プロセス監視
- プロセスが存在するかどうか
- pgrep -x mysqld
- mysqladmin ping
- プロセスが存在するかどうか
- STATUSコマンド
- 最も基本的な統計情報が見れる
- SHOWコマンド
- 統計情報
- 現在のステータス
- ストアドプロシージャで使えれば・・・
- INFORMATION_SCHEMA
- SQL標準で定義された情報取得方法
- SELECTで情報にアクセスできる
- EXPLAIN
- クエリの実行結果を表示する
- チューニングに必須
- SHOW PROFILE
- クエリがどこで時間を食っていたかがわかる
- ログ
- GDB
- どんな情報でも見れる
- 点滴はoptimized away
- ただし時間が止まる
- デバッグ情報必須
- どんな情報でも見れる
- DTrace/SystemTap
- 動的にプロセスをトレースする
- 汎用的な仕組み
- スクリプトできめ細やかな調整ができる
- SolarisやLinuxでしか使えない
- 動的にプロセスをトレースする
- DBUGトレース
- デバッグ版ビルドで利用できるトレース機能
- 関数の呼び出しとリターン
- その他必要に応じて情報を出力
- MySQLで取れるトレースとしては最強だが、情報サイズがでかすぎる
PERFORMANCE_SCHEMA
- DTraceのSDTに似ている
- ソースコードに埋め込まれたInstrumentsという観測点から情報を収集
- 統計情報と履歴を溜め込んでSQLでアクセス
- Windowsでも使える
オーバヘッドは?
- CPU
- 若干あり、無視できない
- 手持ちのノートPCでパフォ計測
- PSなし: 2285.76tps
- PSあり: 1804.77tps
- メモリ
- 設定やバージョンにもよるが数百MB
利用シーン
- 複数のスレーブ群のうちの1個で使ってみるとか
- 振り分けの重み付けで調整
設定
- MySQL5.5以上
- mysql_install_db実行したら自動で作られる
[mysqld]
performance_schema
※動的には変更できない
mysql-5.6-labs-performane-schema
- MySQL5.6で搭載されるかもしれない機能が追加されている、が実験的なバージョン
- かなり充実しているらしい。実践的になってきた、と。
カジュアルに使うには?
残念ながらそんな方法はないw
テーブルの種類
- setup: 各種設定
- instance: mutex等のインスタンス情報
- wait event: 各種操作にかかった時間
- stage event: プロファイリング情報
- statement event: コマンド実行履歴
- table io event: テーブルごとのストレージエンジンごとのリクエスト
- summary: 各種統計情報
- テーブルへのアクセスにかかる時間の合計、最大、最小、平均値等
- 直近のステートメントの履歴を表示するテーブルなどもある
数値をみるときのポイント
- 時間単位はピコ秒
- よく見るものはビューを定義
まとめ
- PSは情報を見るための新たな手段
- まだ発展途上だけど
!ここからLT開始!
MySQL Event Scheduler Casual Vol.1 (@myfinder)
View more presentations from Tatsuro Hisamori
- Event Schedulerは実運用で使っている
- Event Schedulerは、指定した時刻に指定した処理を行う(cronみたいなもの)
- MySQL5.1以上必須
- 有効にしたら、event_schedulerのユーザでプロセスが立ち上がる
- 運用の用途
- パーティショニングしたテーブルのローテート
- ...
- 注意点
- マスタ/スレーブともにONにする
- 基本的にマスタでのみenable(イベント)にする
- ...
- 設定項目を監視すべき
- show variablesで有効になっているかを監視
- Eventが操作する対象も監視
- ...
- 障害復旧
- スレーブをマスタに昇格させるとき
- マスタでON、スレーブにOFFで
- ...
※スピードについていけず、全体的にメモできていません(><)
MySQL 4.0 Casual (@kazeburo)
View more presentations from Masahiro Nagano
- MySQL4.0
- 2002/8: 4.0.2 betaリリース
- 2007/2: 4.0.30
苦労した5つのこと
- 4.0のソースコードが手に入らない
- 持っている人の聞いてみる
- ファイル名でググる
- innodb_buffer_pool_size
- 10GBで設定しても2GBで認識
- secondary index and order by primary key
- なぜか Using filesort
- 5.0.48でFix.
- mysql 4.0 clientが5.1.57のserverにつながらない
- 5.1.58でFix.
- GET_LOCKが原因でレプリケーションがいきなり止まる
まとめ
MySQL5.1以上を使いましょうw
MySQL 5.0 -> 5.5 へのアップデートについて (@oranie)
View more presentations from Takashi Narita
- サービスログの解析用のDBで使ってたので、速い方(5.5)がうれしかった
- 好きな方法でインストールしなさい
- データ互換性を考慮して、1度、5.1を経由した方が良い
- バックアップ => データファイルコピー => dumpデータ
- mysql_upgradeを使用
- が、一部は解決しなくて、結局dumpとって入れ直した方がいいかも
- 5.5にアップデートするには、yum使いたいのでremiレポジトリ使った
- 5.5に上げたら、変わったor廃止になったオプションを地道につぶしていく
Master n 対 Slave 1 レプリケーションの作り方 (@do_aki)
View more presentations from do_aki
※高速テンポに感動しましたwまともにメモれなかったw
- マスタn:スレーブ1のレプリケーション
- change master to を使って...
- masterを順次切り替え
- 結果、データ不整合でた
- change master toでrelay log消えちゃった
- sql threadの位置を待つのは非効率
- io threadの位置で待つ
- master_pos_wait()
- io threadは、トランザクション途中でも停止する
- 結果
- 3秒ごとに参照先を切り替え
- それで、1ヶ月近く安定稼働
まとめ
- n:1レプリは実現可能
- 遅延は必ず発生
- 集計に便利
- ソースコードはgithubに!
MHAのこと (@matsunobu)
View more presentations from Yoshinori Matsunobu
- MySQLマスタ障害では、、
- 非同期なので、一部または全スレーブが倍なりログを受け取っていない可能性
- そこを自動で補ってくれるのがMHA
- アーキテクチャ
- マネージャ(管理サーバ)、ノードで構成
- MySQL5.0以降で動作
- マスタが死んだ時に、落としているバイナリログを拾って順次あてていく仕組み
- pacemaker+DRBDと比べての優位性
- スタンバイサーバがいらない
- フェイルオーバの時間が高速
- MySQL-MMMはHAソリューションではない
- 任意のスレーブを新マスタにできる
- フェイルバックするのが面倒
- が、それはどれも一緒で、楽なのはMySQL Clusterくらい
- Mobageで全面的に使ってる
- DeNAに入社すれば様子が見れるよw
- 日本語のドキュメント
- 英語版で力つきた
- DeNA社内には日本語Wikiがあるww
- テストケース
- 公開していない
- DeNAに入社すれば(ry
MySQLでNoSQL (@rkajiyama)
View more presentations from rkajiyama
- labs.mysql.com
- 製品品質は別にして、面白いものがたくさんある
- MySQL5.6
- NoSQL with Memcached
- MySQL Cluster 7.2
- NoSQL with Memcached
2種類のmemcached連携プロダクト
MySQL5.6
- MySQLサーバにプラグインとしてmemcachedインタフェースを追加
- アプリからはMySQLサーバに接続
- プロトコルはmemcached Protocol
- データ格納先はInnoDB
- トランザクション利用可能
MySQL Cluster 7.2
- memcachedにNDB API用ドライバを追加
- アプリからはmemcachedに接続する
- データ格納先は、データノード上のndbclusterテーブル
- トランザクション利用可能
- レプリケーション利用可能
余談
絶賛されていた鍵本はコチラww
エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
- 作者: 奥野幹也
- 出版社/メーカー: 技術評論社
- 発売日: 2010/06/12
- メディア: 大型本
- 購入: 16人 クリック: 204回
- この商品を含むブログ (35件) を見る