explain postmaster.pid
背景
今天我们部门内部的数据库讲座, 提到了postmaster.pid这个文件, 我以前并没有仔细的去查看它每一行的含义.
刚好今天有机会查了一下源码, 再加上三个臭皮匠赛过一个诸葛亮. 终于把每一行的意思给搞明白了.
先来看一个postmaster.pid文件的内容 :
cat postmaster.pid
2551
/pgdata/digoal/1921/data02/pg_root
1331803654
1921
/pgdata/digoal/1921/data02/pg_root
0.0.0.0
1921001 6127619
我一行一行来解释 :
1、2551 postgres主进程的PID
ps -ewf|grep 2551
postgres 2551 1 0 17:27 ? 00:00:00 /opt/pgsql/bin/postgres
postgres 2552 2551 0 17:27 ? 00:00:00 postgres: logger process
postgres 2554 2551 0 17:27 ? 00:00:00 postgres: writer process
postgres 2555 2551 0 17:27 ? 00:00:00 postgres: wal writer process
postgres 2556 2551 0 17:27 ? 00:00:00 postgres: autovacuum launcher process
postgres 2557 2551 0 17:27 ? 00:00:00 postgres: archiver process
postgres 2558 2551 0 17:27 ? 00:00:00 postgres: stats collector process
2、/pgdata/digoal/1921/data02/pg_root
数据目录.
3、1331803654
这行是这个文件创建的时间转换成epoch. 我一开始一直以为是pg_postmaster_start_time获得的时间.如果你发现不对的话就去看看postmaster.pid的文件创建时间吧.
digoal=# select pg_postmaster_start_time();
pg_postmaster_start_time
-------------------------------
2012-03-15 17:27:34.416047+08
(1 row)
digoal=# select extract(epoch from '2012-03-15 17:27:34'::timestamp);
date_part
------------
1331803654
(1 row)
虽然上面的postmaster时间和这个文件的创建时间一致, 但它其实是这个文件的创建时间.
stat postmaster.pid
File: `postmaster.pid'
Size: 119 Blocks: 8 IO Block: 4096
regular file Device: fd03h/64771d Inode: 1572868 Links: 1
Access: (0600/-rw-------)
Uid: ( 500/postgres)
Gid: ( 500/postgres)
Access: 2012-03-15 17:41:10.416810701 +0800
Modify: 2012-03-15 17:27:34.364810701 +0800
Change: 2012-03-15 17:27:34.364810701 +0800
4、1921 数据库监听端口. 在postgresql.conf中对应 port = 1921
5、/pgdata/digoal/1921/data02/pg_root
是unix socket的监听目录. 在postgresql.conf中对应 unix_socket_directory = '/pgdata/digoal/1921/data02/pg_root'
6、0.0.0.0
数据库监听地址, 对应 postgresql.conf 的 listen_addresses = '0.0.0.0'
7、最后一行对应的是共享内存的地址(shared memory segments中的key和shmid).
1921001 6127619
ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x001d4fe9 6127619 postgres 600 617250816 4
postmaster.pid显示的是key转成10进制后的数字.