a_ogawa

2006-02-13

[] mysql-5.1のstorage engine

storage engineの実装は、storageディレクトリにある

bdb heap innobase myisam myisammrg ndbがある

storage engineのインタフェースには、handlerとhandlertonがある

handlerはinsertやselectなど、テーブルを操作するインターフェースを定義したclass。sql/handler.hで定義されている。各storage engineは、handlerを継承してstorage engineごとのテーブル操作を実装している。handlerのインスタンスは、各テーブルの操作ごとに生成される。例えばinnodbのAAAというテーブルを検索するとき、AAAを操作するためのha_innobase(innodbのhandler)が生成(new)される。

handlerton(handler + singleton)は、各storage engineにつき1つだけ実体を持つ構造体。sql/handler.hで定義されている。storage engineの情報や、storage engineを操作するためのインタフェースを定義している。handlertonには、handlerを生成する関数や、commit/rollbackなどstorage engine全体を操作する関数が設定される。

innodbのhandlertonとhandlerは、sql/ha_innodb.ccに定義されている。

gdb memo

callコマンドで関数を実行できる。

例) innodbのrecordの情報を出力する

(1)ブレークポイントを設定

break rec_init_offsets

(2)ブレークしたらデバッグ用の関数を実行

call rec_print(stderr, rec, index)
continue

これでmysqlのerrファイル(mysqlhome/varにある)に出力される

出力例)

PHYSICAL RECORD: n_fields 6; compact format; info bits 0
 0: len 4; hex 80000001; asc     ;;
 1: len 6; hex 000000000302; asc       ;;
 2: len 7; hex 800000002d0110; asc     -  ;;
 3: len 4; hex 80000001; asc     ;;
 4: len 4; hex 80000000; asc     ;;
 5: len 1; hex 41; asc A;;

[] Improve the comparison of NUMERIC data

patch applied.

http://archives.postgresql.org/pgsql-patches/2006-02/msg00080.php

crgkftiucocrgkftiuco 2007/03/15 18:05 Hi! Very nice site! Thanks you very much! rcuduughahy

whscyzuseswhscyzuses 2007/03/16 08:08 <a href=http://mrdpuvjb.com>tiknm</a>

トラックバック - http://d.hatena.ne.jp/a_ogawa/20060213