GREE オープンソース勉強会 第18回 MySQLハッキングの手引きに行ってきた
すごい雨の中,GREE Labs さん主催による GREE Engineering に参加してきました.以下,そのログなど.
まとめと感想
MySQLハッキングの手引き
MySQL を拡張する
MySQL の入手方法
- 本家サイトから
- bzr を利用
- launchpad 上でホストされている
開発の流れ
- 初期ビルド -> 改変 -> デバッグビルド -> テスト -> 改変 ->
- BUILD/autorun.sh
- 1〜2分(速いマシン)
- 松信さんは VisualStudio でやっているそうです
- VisualStudio は少数派
- BUILD/以下にテンプレートがある
- VisualStudio -> あとで資料見て
デモ(1) デバッグ/トレース
- 目的
- クラッシュ原因を探る
- 動作過程を探るため
- login_connection
- ログインに関わる接続とか
- mysql_parse
- mysql_execute_command
- クエリーを実行する
- SQL コマンドによって処理の場合分けをしている
- SELECT だと,その中で権限管理するとか
- JOIN::optimize()
- 実行計画を決める
- 毎回呼ばれる
- 主キー指定の検索をすると
- make_join_statistics
- 主キーを使うのかとか,どういう条件かとか処理
- EXPLAIN で Const <- JT_CONST
- make_join_statistics
- 範囲検索
- トレース
- Solaris の dtrace で
- call stack を見る
- やってみてください!
- 単純な SELECT で 4000行程度
プラグイン化の流れ
デモ(2) プラグインの開発
- information_schema に関するもの
- /proc/meminfo を information_schema から見れるようにする
- ビルド方法
- --shared 共有ライブラリ
MySQl 本体に手を入れる
- レビューのプロセスが必要
- 多くの場合互換性の確保が大きな壁になる
デモ(3) MySQL本体拡張
- レコードサイズの最大サイズを 64kb 以上にする
- .frm = テーブル定義ファイル
- pack_header
- reclength が max_record_length 超えているとエラーになる
- これを拡張
- さらにストレージエンジンの最大長も拡張
- .frm に保存領域がないので,最後の方に無理矢理書き込む
-
- 読み込みの時にも細工をする
-
- reclength が max_record_length 超えているとエラーになる
WorkLog
- 開発計画
- パッチを投げると
- レビューアがついてレビューされる
- コーディング規約に準拠しているか
- レビューアがついてレビューされる
WorkLogの例
- バイナリログの追記 -> 上書き変更パッチ
- 上書きにするとレプリケーションの binlog が EOF に来たことがわからない
- EOF -> 転送終わりの判定をしている
- かなり他の部分も変更しなくてはならないので,簡単ではない
- 上書きにするとレプリケーションの binlog が EOF に来たことがわからない
参考文献
- http://forge.mysql.com/
- Expert MySQL
- 作者: Charles Bell
- 出版社/メーカー: Apress
- 発売日: 2007/01/26
- メディア: ペーパーバック
- クリック: 12回
- この商品を含むブログ (1件) を見る
-
- UDF,ストレージエンジンを自作する方法など
- Understanding MySQL internals
Understanding MySQL Internals: Discovering and Improving a Great Database
- 作者: Sasha Pachev
- 出版社/メーカー: O'Reilly Media
- 発売日: 2007/04/20
- メディア: ペーパーバック
- 購入: 1人 クリック: 29回
- この商品を含むブログ (9件) を見る
- 超極める MySQL
- 作者: 坂井恵,志村和彦,ひろせまさあき,松信嘉範
- 出版社/メーカー: 翔泳社
- 発売日: 2006/10/04
- メディア: 大型本
- 購入: 2人 クリック: 24回
- この商品を含むブログ (15件) を見る