InnoDB

Pageサイズに関する拡張計画?

おはよーございます。blogの更新サボりまくりなmirでございます。まあ、最近これといって書くねたが無いだけなのですが。ところが先週あたりから面白い話題がでています。MySQL Internalsメーリングリストより。Changes needed for InnoDB in MySQL 5.1 http…

Rawディバイス対応について

InnoDBってRawディバイス対応なんですね(たぶん)。バッファにしてもファイルにしても、領域確保の際にかならずアクセス単位(Pageサイズとかセクタサイズとか)1個分余分に取得して、alignしてます。Oracleはパラメータか何かで設定して使うとか聞いた記憶が…

起動プロセス(2) innobase_init関数

とりあえずha_initからこの関数が呼ばれます。 1. innodb_buffer_pool_size/innodb_log_file_sizeのチェック。32bit-systemでは4GB超にできない。 2. データファイル、ログファイルの位置、buf_poolサイズ他の各種設定情報を取得する。 3. innobase_start_or…

起動プロセス(3) innobase_start_or_create_for_mysql関数

InnoDBの初期処理の大まかな流れはこの関数に記述されております。 1. 設定情報の取得処理はここでも続いている。 2. innodb_buffer_pool_sizeの大きさによって、srv_max_n_threadsという変数の値を50000,10000,1000の3段階に分けて設定している。 "WIN"ある…

起動プロセス(4) srv_boot関数

innobase_start_or_create_for_mysql関数の最初の方で呼び出される。 以下の関数を呼び出すだけ。1. srv_normalize_init_values関数を呼び出す。 2. srv_general_init関数を呼び出す。 3. srv_init関数を呼び出す。 ■srv_normalize_init_values関数 この関数…

起動プロセス(5) buf_pool_init関数

innobase_start_or_create_for_mysql関数の中で呼び出される。バッファプールがどうなっているのかは、この関数を読めば分かる。 buf0buf.cにて。buf_poolを初期化する。max_size、curr_size、n_framesの値はinnodb_buffer_pool_sizeをPageサイズで割った値…

起動プロセス(6) log_init関数

innobase_start_or_create_for_mysql関数の中で呼び出される。 log0log.cにて。ログバッファを初期化する。742行目。最初にログのための制御構造体を初期化。log_tのサイズは732バイト。 log_sys = mem_alloc(sizeof(log_t));757行目。innodb_log_buffer_siz…

起動プロセス(7) open_or_create_data_files関数

innobase_start_or_create_for_mysql関数の中で呼び出される。 データファイルは最大で1000個まで。1. srv_n_data_files(データファイルの個数)の数だけ、for文で必要に応じて複数回os_file_create関数を呼び出す。ここでは以下のフラグを渡している。この時…

起動プロセス(8) その他

innobase_start_or_create_for_mysql関数では最後にopen_or_create_log_file関数を呼び出す。innobase_init関数に復帰した後、また最後にhash_init関数を呼んで、起動プロセスは完了。 ■open_or_create_log_file関数ログファイルの数の分だけこの関数は呼び…

起動プロセス(1) mainからinnobase_initまで

というわけで、InnoDBの起動プロセスの説明を試みるエントリの連載を開始しちゃいます!!!11本当にちゃんと説明できるかどうかの責任はもちませんw 解釈間違いがあるかもしれませんw ということをお断りしつつ、れっつすたあと。対象バージョンは、5.0…

buf_poolとblock

最近、ツール使って図を作ってばかり。dddようやく慣れてきた。下図はinnobase_init中のbuf_poolとblockのデータ表示。 元本:http://ikda.net/resource/mysql/ib_buf_block.GIF

buffer poolとか

buf0buf.cのソースファイル先頭コメントをとりあえず訳してみますた。たぶん理解不十分で誤訳してる個所もあるとおもいまふ。突っ込み大歓迎っす。以下、原文の引用および自分の訳文を載せます。 Performance improvement: ------------------------ Thread …

PageとRecord

昨夜は20時半に沈没、そして今朝は4時半起床w 軽い運動とシャワーも済んだところでなにしよーか、ということで引き続きInnoDBのPageとRecordのソース解析。今月はInnoDB強化月間ですw 先月は勉強会ネタ作成を兼ねてJBossのソースばかり読んでましたが今月…

PageとRecord (2)

今朝はrow_format=redundantの時にold styleであることの当たりをつけたので、今度はrow_format=compactで作成したテーブルのhexdumpを解析しませう。DDLおよびDMLは以下。row_format=compactはデフォルト値なので別に付与しなくとも良いけど気分的に。 crea…

備忘録的ログ(2)

univ.iでコメントアウトされているいくつかのUNIV_DEBUGXXXをONに。 mir@mir33:/usr/local/mysql$ libexec/mysqld InnoDB: !!!!!!!!!!!!!! UNIV_DEBUG switched on !!!!!!!!!!!!!!! InnoDB: !!!!!!!!!!!!!! UNIV_SYNC_DEBUG switched on !!!!!!!!!!!!!!! Inn…

備忘録的ログ

月曜日の部内勉強会までに調べにゃいかんことがたんまり残ってるので、今週末は予定の合間を縫ってぼちぼちInnoDBを弄っていきまふ。ちなみにうちの部では定期的にMySQLのソース解析勉強会をやってまふ。企画したのおいらだけどw サービスで飯食ってくつも…

メモ〜

これもメモって置こう。 typedef struct dulint_struct dulint; struct dulint_struct{ ulint high; /* most significant 32 bits */ ulint low; /* least significant 32 bits */ };こんな感じのユーティリティ関数があったり。 ulint ut_dulint_get_high( …

モニタリングツール "innotop"

http://www.xaprb.com/blog/2006/07/02/innotop-mysql-innodb-monitor/InnoDB用のモニタリングツールを作っている人がいる。 現バージョンは0.1.128 実装言語はPerl

メモ

おなかへったー。でもうちには食べ物が何もないよ。page_header_set_field関数他で頻繁に登場するut_adは通常のビルドでは何もしない。 #ifdef UNIV_DEBUG #define ut_ad(EXPR) ut_a(EXPR) #define ut_d(EXPR) do {EXPR;} while (0) #else #define ut_ad(EXP…