2006-08-25から1日間の記事一覧

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関数ログファイルの数の分だけこの関数は呼び…

tmp_table in THDオブジェクト

本題に戻る前に、友人から依頼されて1件、ソース解析ちゅう。TEMPORARY TABLEに関する不具合の疑いについての調査。とりあえずTHDを漁る。 (gdb) p sizeof(THD) $2 = 5168でかいよー。dddのData Windowに収まりきらん。THD->tmp_tableってのがあるのだが、s…