起動時とかのファイル関連の処理を把握するために試してみた。
ビルド時の手順。
$ make clean
$ ./configure CFLAGS=-DFDDEBUG
$ make
$ sudo make install
fd.cはデバッグメッセージ出力用にマクロDO_DBが定義されており、FDDEBUGが定義されているときだけログ出力用関数のelogを呼ぶような記述が多くされている。上のconfigureの引数CFLAGSではそれを指定している。
src/backend/storage/file/fd.c
147 /* Debugging.... */
148
149 #ifdef FDDEBUG
150 #define DO_DB(A) \
151 do { \
152 int _do_db_save_errno = errno; \
153 A; \
154 errno = _do_db_save_errno; \
155 } while (0)
156 #else
157 #define DO_DB(A) \
158 ((void) 0)
159 #endif
起動時の標準出力はこんな感じ。
$ pg_ctl start
waiting for server to start....LOG: 00000: AllocateDir: Allocated 0 (/usr/local/pgsql/lib)
LOCATION: AllocateDir, fd.c:2374
LOG: 00000: FreeDir: Allocated 1
LOCATION: FreeDir, fd.c:2482
2018-02-17 08:09:38.201 GMT [17037] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/postgresql.conf)
2018-02-17 08:09:38.203 GMT [17037] LOG: FreeFile: Allocated 1
2018-02-17 08:09:38.203 GMT [17037] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/postgresql.conf)
2018-02-17 08:09:38.206 GMT [17037] LOG: FreeFile: Allocated 1
2018-02-17 08:09:38.206 GMT [17037] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/postgresql.auto.conf)
2018-02-17 08:09:38.206 GMT [17037] LOG: FreeFile: Allocated 1
2018-02-17 08:09:38.206 GMT [17037] LOG: AllocateDir: Allocated 0 (/usr/local/pgsql/share/timezone)
2018-02-17 08:09:38.206 GMT [17037] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.207 JST [17037] LOG: AllocateFile: Allocated 0 (/usr/local/pgsql/share/timezonesets/Default)
2018-02-17 17:09:38.208 JST [17037] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.208 JST [17037] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/PG_VERSION)
2018-02-17 17:09:38.208 JST [17037] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.208 JST [17037] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/global/pg_control)
2018-02-17 17:09:38.208 JST [17037] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.219 JST [17037] LOG: listening on IPv4 address "127.0.0.1", port 5432
2018-02-17 17:09:38.225 JST [17037] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2018-02-17 17:09:38.228 JST [17037] LOG: AllocateFile: Allocated 0 (/proc/meminfo)
2018-02-17 17:09:38.229 JST [17037] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.246 JST [17037] LOG: AllocateDir: Allocated 0 (pg_notify)
2018-02-17 17:09:38.246 JST [17037] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.246 JST [17037] LOG: OpenTransientFile: Allocated 0 (pg_notify/0000)
2018-02-17 17:09:38.246 JST [17037] LOG: CloseTransientFile: Allocated 1
2018-02-17 17:09:38.247 JST [17037] LOG: AllocateDir: Allocated 0 (base/pgsql_tmp)
2018-02-17 17:09:38.247 JST [17037] LOG: AllocateDir: Allocated 0 (base)
2018-02-17 17:09:38.247 JST [17037] LOG: AllocateDir: Allocated 1 (base/12362)
2018-02-17 17:09:38.247 JST [17037] LOG: FreeDir: Allocated 2
2018-02-17 17:09:38.247 JST [17037] LOG: AllocateDir: Allocated 1 (base/1)
2018-02-17 17:09:38.248 JST [17037] LOG: FreeDir: Allocated 2
2018-02-17 17:09:38.248 JST [17037] LOG: AllocateDir: Allocated 1 (base/16384)
2018-02-17 17:09:38.248 JST [17037] LOG: FreeDir: Allocated 2
2018-02-17 17:09:38.248 JST [17037] LOG: AllocateDir: Allocated 1 (base/12361)
2018-02-17 17:09:38.248 JST [17037] LOG: FreeDir: Allocated 2
2018-02-17 17:09:38.248 JST [17037] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.248 JST [17037] LOG: AllocateDir: Allocated 0 (pg_tblspc)
2018-02-17 17:09:38.248 JST [17037] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.249 JST [17037] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/pg_hba.conf)
2018-02-17 17:09:38.249 JST [17037] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.249 JST [17037] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/pg_ident.conf)
2018-02-17 17:09:38.249 JST [17037] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.255 JST [17037] LOG: #IK testparam1 is FALSE
2018-02-17 17:09:38.255 JST [17038] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/PG_VERSION)
2018-02-17 17:09:38.255 JST [17038] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.255 JST [17038] LOG: database system was shut down at 2018-02-17 17:07:13 JST
2018-02-17 17:09:38.255 JST [17038] LOG: AllocateFile: Allocated 0 (recovery.conf)
2018-02-17 17:09:38.255 JST [17038] LOG: AllocateFile: Allocated 0 (backup_label)
2018-02-17 17:09:38.255 JST [17038] LOG: AllocateDir: Allocated 0 (base)
2018-02-17 17:09:38.255 JST [17038] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.255 JST [17038] LOG: AllocateDir: Allocated 0 (pg_tblspc)
2018-02-17 17:09:38.255 JST [17038] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.255 JST [17038] LOG: AllocateDir: Allocated 0 (pg_replslot)
2018-02-17 17:09:38.255 JST [17038] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.255 JST [17038] LOG: AllocateDir: Allocated 0 (pg_replslot)
2018-02-17 17:09:38.255 JST [17038] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.255 JST [17038] LOG: OpenTransientFile: Allocated 0 (pg_logical/replorigin_checkpoint)
2018-02-17 17:09:38.255 JST [17038] LOG: CloseTransientFile: Allocated 1
2018-02-17 17:09:38.255 JST [17038] LOG: AllocateDir: Allocated 0 (pg_twophase)
2018-02-17 17:09:38.255 JST [17038] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.255 JST [17038] LOG: OpenTransientFile: Allocated 0 (pg_xact/0000)
2018-02-17 17:09:38.255 JST [17038] LOG: CloseTransientFile: Allocated 1
2018-02-17 17:09:38.255 JST [17038] LOG: OpenTransientFile: Allocated 0 (pg_multixact/offsets/0000)
2018-02-17 17:09:38.256 JST [17038] LOG: CloseTransientFile: Allocated 1
2018-02-17 17:09:38.256 JST [17038] LOG: AllocateDir: Allocated 0 (pg_commit_ts)
2018-02-17 17:09:38.256 JST [17038] LOG: FreeDir: Allocated 1
2018-02-17 17:09:38.259 JST [17039] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/PG_VERSION)
2018-02-17 17:09:38.259 JST [17040] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/PG_VERSION)
2018-02-17 17:09:38.259 JST [17041] LOG: AllocateFile: Allocated 0 (/home/matsu/pgsql/PG_VERSION)
2018-02-17 17:09:38.259 JST [17039] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.259 JST [17037] LOG: database system is ready to accept connections
2018-02-17 17:09:38.259 JST [17040] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.259 JST [17041] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.259 JST [17043] LOG: AllocateFile: Allocated 0 (pg_stat/global.stat)
2018-02-17 17:09:38.259 JST [17043] LOG: AllocateFile: Allocated 1 (pg_stat/db_16384.stat)
2018-02-17 17:09:38.259 JST [17044] LOG: OpenTransientFile: Allocated 0 (global/pg_filenode.map)
2018-02-17 17:09:38.259 JST [17043] LOG: FreeFile: Allocated 2
2018-02-17 17:09:38.259 JST [17044] LOG: CloseTransientFile: Allocated 1
2018-02-17 17:09:38.259 JST [17044] LOG: AllocateFile: Allocated 0 (global/pg_internal.init)
2018-02-17 17:09:38.259 JST [17042] LOG: OpenTransientFile: Allocated 0 (global/pg_filenode.map)
2018-02-17 17:09:38.259 JST [17042] LOG: CloseTransientFile: Allocated 1
2018-02-17 17:09:38.259 JST [17042] LOG: AllocateFile: Allocated 0 (global/pg_internal.init)
2018-02-17 17:09:38.259 JST [17043] LOG: AllocateFile: Allocated 1 (pg_stat/db_0.stat)
2018-02-17 17:09:38.259 JST [17043] LOG: FreeFile: Allocated 2
2018-02-17 17:09:38.260 JST [17044] LOG: PathNameOpenFilePerm: global/24654 2 600
2018-02-17 17:09:38.260 JST [17044] LOG: AllocateVfd. Size 1
2018-02-17 17:09:38.260 JST [17043] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.260 JST [17042] LOG: PathNameOpenFilePerm: global/24815 2 600
2018-02-17 17:09:38.260 JST [17044] LOG: PathNameOpenFile: success 3
2018-02-17 17:09:38.260 JST [17042] LOG: AllocateVfd. Size 1
2018-02-17 17:09:38.260 JST [17044] LOG: Insert 1 ((null))
2018-02-17 17:09:38.260 JST [17042] LOG: PathNameOpenFile: success 3
2018-02-17 17:09:38.260 JST [17044] LOG: LRU: MOST 0 LEAST
2018-02-17 17:09:38.260 JST [17042] LOG: Insert 1 ((null))
2018-02-17 17:09:38.260 JST [17044] LOG: LRU: MOST 1 0 LEAST
2018-02-17 17:09:38.260 JST [17042] LOG: LRU: MOST 0 LEAST
2018-02-17 17:09:38.260 JST [17042] LOG: LRU: MOST 1 0 LEAST
2018-02-17 17:09:38.260 JST [17044] LOG: FileSeek: 1 (global/24654) 0 0 2
2018-02-17 17:09:38.260 JST [17042] LOG: FileSeek: 1 (global/24815) 0 0 2
2018-02-17 17:09:38.260 JST [17042] LOG: FileSeek: 1 (global/24815) 8192 0 0
2018-02-17 17:09:38.260 JST [17044] LOG: FileSeek: 1 (global/24654) 0 0 2
2018-02-17 17:09:38.260 JST [17042] LOG: FileRead: 1 (global/24815) 0 8192 0x7ff776178080
2018-02-17 17:09:38.260 JST [17042] LOG: FileAccess 1 (global/24815)
2018-02-17 17:09:38.260 JST [17042] LOG: AllocateFile: Allocated 0 (pg_stat_tmp/global.stat)
2018-02-17 17:09:38.260 JST [17043] LOG: AllocateFile: Allocated 0 (pg_stat_tmp/global.tmp)
2018-02-17 17:09:38.260 JST [17043] LOG: AllocateFile: Allocated 1 (pg_stat_tmp/db_0.tmp)
2018-02-17 17:09:38.260 JST [17043] LOG: FreeFile: Allocated 2
2018-02-17 17:09:38.260 JST [17043] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.270 JST [17042] LOG: AllocateFile: Allocated 0 (pg_stat_tmp/global.stat)
2018-02-17 17:09:38.270 JST [17042] LOG: FreeFile: Allocated 1
2018-02-17 17:09:38.270 JST [17042] LOG: AllocateFile: Allocated 0 (pg_stat_tmp/global.stat)
2018-02-17 17:09:38.270 JST [17042] LOG: FreeFile: Allocated 1
done
server started
ちょっと量が多いので、まずは単純にファイルオープン・クローズだけ出力するようにした方が理解はすすみそう。