MySQL ユーザコンファレンス 2008 1日目のメモ
アメーバブログ-DBチーム
PostgreSQL->MySQL移行について
- PG Clusterを使っていたが動作が不安定だったのでMySQLに移行
- \copy テーブル -> scp -> LOAD DATA IN FILE
- 45分で終了
まとめ
- 複雑な分散がないのであれば各DBが持ってるツールを作る
- LOAD DATA IN FILEが早いよ
I/O軽減の方法
- INDEXを見直す
- explainの結果をUsing Indexを使う
- WHERE ORDER BY で使っているカラムをすべてIndexに追加
- Using filesortは一番だめ
- SQLを見直す
- SELECT句を記事IDのみに変更
- Using where;Using Index
- Where句はプライマリーIDのみ
- Indexを追加したくない カラム追加で対応できないか
- INDEX = Disk I/O増加
ストレージエンジンとファイルシステムの検証
- 環境
- GNU/Linux ext3 + MyISAMは黄金解か?
- ファイルシステム
- ext3
- CentOS4.6/2.6.9
- xfs
- CentOS4.6/2.6.9
- zfs
- OpenSolaris SunOS5.11
- zfs
- 5.1のα
- ブログの本番データをReplication
- 2億件150テーブル分割
- Insert 300/m
- 30,000 query/m
- ext3
検証結果
結果
- xfs + MySQLがよい結果
データベースのインフラ設計
高可用性設計
- 99.999%の可用性
- MySQL Replication
- MySQL Replication
- Master -> Slabe
- Webで多数実績
- 用途
- 参照性能を向上
- Webアプリケーションでは参照95%更新5%(http://digg.com)
- バックアップ用途
- 基本はデータ一方向でのコピー
- bin-logを利用
- 方法
- master1対slaveたくさん
- master > slave
- OK
- master > multi slave
- OK
- multi master > slave
- NG
- master > slave > multi slave
- OK
- USのチケットサービスで実績あり
- 分散する人と更新を受ける人を分ける
- master > master
- 循環型master > master
- 更新の順序が入れ替わっちゃうかも制約があるよ
- DRBD
- Active/Passive構成
- Replication master の冗長か
- masterが一台に集中
- DRBDをつかった高可用性
- SlaveにはReplicate_to_tableで一部だけコピー
- Slaveをmemory strageに
- masterが一台に集中
- MySQL Proxy
- http://forge.mysql.com/wiki/MySQL_Proxy
- クライアントサーバ間で稼動する軽量アプリケーション
- LUA言語のインタプリタを同梱ユーザが拡張可能
- 用途
- ロードバランス
- faleover
- logging
- queryの書き換え
- MySQL Cluster
- 分散キャッシュシステム(memcached)
- mixi ,livejournal,Yahoo!
- MySQLからキャッシュを読み書きするUDFが開発中
- http://forge.mysql.com/projects/project.php?id=250
- MySQLに更新すると自動的にmemcachedに書き込まれる
- MySQL Enterpriseにて技術サポート中
拡張方式設計(性能/ストレージ)
セキュリティ設計
- 以下のレベルで制御可能
- Level 1 - User
- Level 2 - db
- Level 3 - tables
- Level 4 - columns
- Level 5 - procs(ストアド/ファンクション)
- user/client host or ip /passの組み合わせで認証情報を構成
- 実装済みの対策
- 未実装の対策
- role
- カラムに暗号化指定でかってに暗号化とか
- データ監査機能
- OSレベル等外部認証との連携
- Work Logにて実装を公開中(code name Citadel)
- http://forge.mysql.com/
監視方式設計,メンテナンス方式設計
- MySQL Enterprise Monitor w/Query Analyzer
- Query解析機能
- Index追加やチューニングの提案も自動的に行う
- 自動的パラメータチューニング機能があるDBがあるが
- 勝手にやるところが怖いよね
- Advisorはあくまでも提案
MySQL Enterprise の紹介
- MySQL Workbench
- Database Design
- 関係可視化したほうが実際すごくやりやすい
- DBを直感的にデザイン
- DBが複雑化すればするほど存在価値が高い
- 特徴
- 複数のモデルを同時に扱える
- zoom in/outができる
- Forward Engineering
- Reverse Engineering
- 既存のDBがすでに実装されているけど修正が加わってどうなってるかを可視化したい
- 開発環境、本番環境で作ったDBと可視化して比較、同期させる
- 根本のモデルを可視化して理解する
- Designがそもそもの遅い原因かを突き止める
- Documenttation
- 設計時のテキストベース/HTMLのoutput
- MySQL Enterprise
- MySQL Enterprise monitor
- MySQL Query Analyzer
プロトコル解説
- english
- 日本語
- MySQL構築バイブル
0-250:その値が実際の値
251:NULL
252:後続の2byte
253:後続の4byte
254:後続の8byte
- 固定長文字列
- そのまま
- 可変長:NULL終端
- 文字列の終端を0x00で埋める
- 可変長
- 文字列長を1-9byteで表現
- 認証時のPacket Flow
client server
|--->tcp connect------------>|
| |
|<--handshake initialization-|
| |
|-client authentication----->|
| |
|<-OK Packet/Error Packet ---|