2005-10-01から1ヶ月間の記事一覧

gccのバージョンによる違い

scale factor: 10 select b.bid, count(*) from accounts a, branches b where a.bid = b.bid and a.abalance > 100 group by b.bid;gcc-3.2.3: 1.213547 s gcc-3.4.4: 1.045556 s

vacuum (7)

HeapTupleSatisfiesVacuum Vacuumを実行するためにタプルの状態をチェックする。タプルが実行中の全てのトランザクションから参照できない場合、HEAPTUPLE_DEADを返す。HEAPTUPLE_DEADだったらVacuumが削除できる。 タプルがdeleteされているが、実行中のい…

vacuum (6)

VacPage vacuumするページの情報を記録する。offsets_used以外の情報は、scan_heapで設定される。freeにはvacuumでdeadタプルを削除してページの断片化を解消した後の空き領域(pd_upperとpg_lowerの間のスペース)の大きさが設定される。offsets配列にはdead…

vacuum (5)

scan_heap この関数はfull vacuumするときにfull_vacuum_relから実行される。onerelで指定されたテーブルの全てのページを調べ、以下の処理を行う。 タプルのcommit status(Xmin)を設定する 削除できるタプルがあるページのリスト(vacuum_pages)を作成する …

vacuum (4)

vac_open_indexes relに指定したテーブルのindexを全てopenする。テーブルと同じlock modeを使う。 vac_close_indexes vac_open_indexesでopenしたindexをcloseする。 vpage_insert vacpagelist配列にvacpageを追加する。vacpagelist配列が初期化されていな…

vacuum (3)

vacuum_delay_point vacuumを実行するプロセスよりも通常のトランザクションを実行するプロセスを優先させるために、sleepを実行してvacuumプロセスを遅延させる。この仕組みはpostgresql.confでvacuum_cost_delayを1以上に設定したときに有効になる。この関…

vacuum (2)

lazy_vacuum_heap vacrelstats->dead_tupleに登録されたタプルを、テーブルから削除する。 (1)LockBufferForCleanupでページをロックする (2)lazy_vacuum_pageでページ内のアイテムを削除する (3)lazy_record_free_spaceでページの空き領域を登録 (4)ロック…

vacuum (1)

lazy_vacuum_rel テーブルをlazy vacuumする。(full vacuumではなく、オプション無しで実行したときのvacuum) (1)vac_open_indexesでテーブルのインデックスを全部オープンする。 (2)lazy_scan_heapでvacuumのメイン処理を実行する。 (3)vac_close_indexesで…

WALの書き方

(1)START_CRIT_SECTIONを実行 (2)ページを更新 (3)ログレコードのデータを作成する 例: XLogRecDataのdataに更新したデータを設定、lenにdataの長さを設定する。 bufに更新したページを設定、buffer_stdをtrueにする。 (4)XLogInsertでログレコードを書き出…

btree index (24)

ユニークインデックスについて ユニークインデックスにアイテムを登録するとき、_bt_check_uniqueでユニークをチェックしている。このとき登録するアイテムと同じキーを持つアイテムが見付かって、それが削除可能である場合(実行中の全てのトランザクション…

btree index (23)

_bt_binsrch pageに登録されているデータが1, 2, 3, 3, 3, 3, 3, 7, 8, 9だとすると:(1)nextkey = falseのとき: item >= scankeyの先頭の位置が検索できる 検索キー 0 1 2 3 4 7 8 9 10 ---------------------------------------------------------------- n…