2004-09-01から1ヶ月間の記事一覧

catcache

Low-level catalog cache definitions. カタログキャッシュは、次の4種類の構造体で構成される。・catcacheheader: 全てのキャッシュデータを管理する ・catcache: 1つのキャッシュの情報 ・catctup: キャッシュ上のタプル ・catclist: キャッシュの検索結…

LWLockRelease

LightWeightLockを開放する。 まず、held_lwlocksを検索し,lockされていることを確認する。 spinlockを取得する。 exclusiveロックのときは,lock->exclusiveをデクリメント。それ以外は,lock->sharedをデクリメント。次にlock待ちのプロセスを起こす。 lo…

カタログキャッシュ

キャッシュは,SysCacheに構築される。SysCacheはstruct cachedescの配列。 SysCacheはbackendの起動時に,InitCatalogCache()で初期化される。 また,SearchSysCacheが最初に実行されたときに,CatalogCacheInitializeCache()で,ハッシュ関数の設定など,…

pgstat.c

statプロセス。 PgStatCollectorMain()がメインルーチン。 他のbackendとはPipeで通信する。 switch (msg.msg_hdr.m_type)で,処理を振り分ける。 backendが起動・停止するなどのイベントを記録する。 stats_row_levelなどのパラメータを有効にすると,検索…

ipc.c

inter-process communication definitions ファイル名はIPCだが、ファイルの中身はプロセス終了時に実行する処理を管理するための仕組み。(ソースのコメントにもmisnamedとある) on_proc_exit_list配列で、プロセス終了時に実行する関数と引数のリストを管理…

sinval.c

shared cache invalidation communication code backend間で、システムカタログなどのキャッシュが無効になったことを通知し合う仕組み。 システムカタログのキャッシュはbackendごとに持っているので、create tableなどでカタログが更新されたときに、無効…

データ型の追加

(1)include/utilsにデータ型を定義する 新しいデータ型の定義,DatumGetXXXマクロ, XXXGetDatumマクロ, PG_GETARG_XXXマクロ, PG_RETURN_XXXマクロが必要。 xxx_in(), xxx_out()関数の宣言も記述する。 新しいデータ型が可変長データのときは,データを構造…

LWLock

storage/lmgr/lwlock.c LWLockAcquire()でロック取得。 LWLockRelease()でロック開放。 LWLockAcquire()でロックが取得できないときは、LWLock構造体のhead, tailにロック待ちのプロセスがリストでつながれ、PGSemaphoreLock()でwaitする。 ロックを持ってい…

regexp.c

utils/adt/regexp.cに、SQLの検索条件などで正規表現を使う場合に実行される関数がある。 RE_compile_and_executeで、正規表現のコンパイル結果をキャッシュしてから、正規表現の検索を実行している。 正規表現のコンパイルや実行のメインルーチンは、regex/…

Resouce Owner

utils/resowner/resowner.c リソースオーナーは、テーブルロックやバッファーPINを取得したことを記録しておくためのオブジェクト。 サブトランザクションがabortしたときに、リソースオーナに登録されているリソースをリリースするなどの処理を行う。 デー…

VariableCache

include/access/transam.h VariableCacheは共有メモリ上に確保されるデータで、次のxidの値や次のoidの値を持っている。 xidの番号は、トランザクションの開始時に、GetNewTransactionId()で取得される。

TAS()

int TAS(slock_t *lock) TASはtest and setの略で、s_lock()内でロックの取得を試みる関数。s_lock()ではロックが取得できるまで高速にループし、TASの実行を繰り返す。 lockの値は、以下の値を持つ。 ・他のプロセスからロックされているとき:1 ・ロックさ…

SPIN_DELAY()

PostgreSQL8.0では、スピンロックを取得するs_lock()にSPIN_DELAYマクロが追加された。 SPIN_DELAYはx86環境では、アセンブラでrep; nopを実行する。 rep; nopはPentium4およびXeon環境では、pause命令として解釈される。それ以外のx86-CPUでは、単なるnopと…

dynahash.c

PostgreSQLのハッシュテーブル(dynahash.c)は、リニアハッシュというアルゴリズムで実装されており、ロックマネージャや共有メモリ、リレーションキャッシュなどで利用されている。 リニアハッシュはテーブルサイズを1つずつ拡張できるアルゴリズムであり、…