InnoDB
おはよーございます。blogの更新サボりまくりなmirでございます。まあ、最近これといって書くねたが無いだけなのですが。ところが先週あたりから面白い話題がでています。MySQL Internalsメーリングリストより。Changes needed for InnoDB in MySQL 5.1 http…
InnoDBってRawディバイス対応なんですね(たぶん)。バッファにしてもファイルにしても、領域確保の際にかならずアクセス単位(Pageサイズとかセクタサイズとか)1個分余分に取得して、alignしてます。Oracleはパラメータか何かで設定して使うとか聞いた記憶が…
とりあえずha_initからこの関数が呼ばれます。 1. innodb_buffer_pool_size/innodb_log_file_sizeのチェック。32bit-systemでは4GB超にできない。 2. データファイル、ログファイルの位置、buf_poolサイズ他の各種設定情報を取得する。 3. innobase_start_or…
InnoDBの初期処理の大まかな流れはこの関数に記述されております。 1. 設定情報の取得処理はここでも続いている。 2. innodb_buffer_pool_sizeの大きさによって、srv_max_n_threadsという変数の値を50000,10000,1000の3段階に分けて設定している。 "WIN"ある…
innobase_start_or_create_for_mysql関数の最初の方で呼び出される。 以下の関数を呼び出すだけ。1. srv_normalize_init_values関数を呼び出す。 2. srv_general_init関数を呼び出す。 3. srv_init関数を呼び出す。 ■srv_normalize_init_values関数 この関数…
innobase_start_or_create_for_mysql関数の中で呼び出される。バッファプールがどうなっているのかは、この関数を読めば分かる。 buf0buf.cにて。buf_poolを初期化する。max_size、curr_size、n_framesの値はinnodb_buffer_pool_sizeをPageサイズで割った値…
innobase_start_or_create_for_mysql関数の中で呼び出される。 log0log.cにて。ログバッファを初期化する。742行目。最初にログのための制御構造体を初期化。log_tのサイズは732バイト。 log_sys = mem_alloc(sizeof(log_t));757行目。innodb_log_buffer_siz…
innobase_start_or_create_for_mysql関数の中で呼び出される。 データファイルは最大で1000個まで。1. srv_n_data_files(データファイルの個数)の数だけ、for文で必要に応じて複数回os_file_create関数を呼び出す。ここでは以下のフラグを渡している。この時…
innobase_start_or_create_for_mysql関数では最後にopen_or_create_log_file関数を呼び出す。innobase_init関数に復帰した後、また最後にhash_init関数を呼んで、起動プロセスは完了。 ■open_or_create_log_file関数ログファイルの数の分だけこの関数は呼び…
というわけで、InnoDBの起動プロセスの説明を試みるエントリの連載を開始しちゃいます!!!11本当にちゃんと説明できるかどうかの責任はもちませんw 解釈間違いがあるかもしれませんw ということをお断りしつつ、れっつすたあと。対象バージョンは、5.0…
最近、ツール使って図を作ってばかり。dddようやく慣れてきた。下図はinnobase_init中のbuf_poolとblockのデータ表示。 元本:http://ikda.net/resource/mysql/ib_buf_block.GIF
buf0buf.cのソースファイル先頭コメントをとりあえず訳してみますた。たぶん理解不十分で誤訳してる個所もあるとおもいまふ。突っ込み大歓迎っす。以下、原文の引用および自分の訳文を載せます。 Performance improvement: ------------------------ Thread …
昨夜は20時半に沈没、そして今朝は4時半起床w 軽い運動とシャワーも済んだところでなにしよーか、ということで引き続きInnoDBのPageとRecordのソース解析。今月はInnoDB強化月間ですw 先月は勉強会ネタ作成を兼ねてJBossのソースばかり読んでましたが今月…
今朝はrow_format=redundantの時にold styleであることの当たりをつけたので、今度はrow_format=compactで作成したテーブルのhexdumpを解析しませう。DDLおよびDMLは以下。row_format=compactはデフォルト値なので別に付与しなくとも良いけど気分的に。 crea…
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( …
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…