explain postmaster.pid

1 minute read

背景

今天我们部门内部的数据库讲座, 提到了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进制后的数字.

Flag Counter

digoal’s 大量PostgreSQL文章入口