PostgreSQL的启动过程
PostgreSQL的启动过程中主要做了以下几件事:
-
初始化数据目录:如果数据目录是第一次使用,PostgreSQL会进行初始化,创建必要的系统表和目录结构。
-
读取配置文件:PostgreSQL会读取并解析配置文件(通常是
postgresql.conf
),以获取各种配置参数,如端口号、内存设置、日志配置等。 -
启动后台进程:启动各种后台进程,包括主进程(postgres)和多个辅助进程,如WAL写进程、检查点进程、统计信息收集进程等。
-
初始化共享内存和信号量:分配必要的共享内存区域和信号量,用于进程间通信和数据共享。
-
启动监听器:启动监听器进程,开始监听客户端连接请求。
-
加载扩展模块:根据配置文件中的设置,加载必要的扩展模块。
-
启动日志记录:根据配置文件中的日志设置,启动日志记录功能,记录服务器的运行状态和错误信息。
-
进入主循环:进入主循环,等待并处理客户端连接请求和数据库操作。
通过这些步骤,PostgreSQL确保了数据库服务器能够正常运行,并准备好处理客户端的请求。
启动日志:
[pg16@test log]$ cat postgresql-2024-08-17_003423.log
2024-08-17 00:34:23.447 PDT [16827] LOG: starting PostgreSQL 16.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2024-08-17 00:34:23.447 PDT [16827] LOG: listening on IPv4 address "0.0.0.0", port 5777
2024-08-17 00:34:23.447 PDT [16827] LOG: listening on IPv6 address "::", port 5777
2024-08-17 00:34:23.448 PDT [16827] LOG: listening on Unix socket "/tmp/.s.PGSQL.5777"
2024-08-17 00:34:23.452 PDT [16829] DEBUG: checkpointer updated shared memory configuration values
2024-08-17 00:34:23.452 PDT [16831] LOG: database system was shut down at 2024-08-17 00:34:04 PDT
2024-08-17 00:34:23.452 PDT [16831] DEBUG: checkpoint record is at 0/87000028
2024-08-17 00:34:23.452 PDT [16831] DEBUG: redo record is at 0/87000028; shutdown true
2024-08-17 00:34:23.452 PDT [16831] DEBUG: next transaction ID: 268808; next OID: 17037
2024-08-17 00:34:23.452 PDT [16831] DEBUG: next MultiXactId: 1; next MultiXactOffset: 0
2024-08-17 00:34:23.452 PDT [16831] DEBUG: oldest unfrozen transaction ID: 722, in database 4
2024-08-17 00:34:23.452 PDT [16831] DEBUG: oldest MultiXactId: 1, in database 16535
2024-08-17 00:34:23.452 PDT [16831] DEBUG: commit timestamp Xid oldest/newest: 0/0
2024-08-17 00:34:23.452 PDT [16831] DEBUG: transaction ID wrap limit is 2147484369, limited by database with OID 4
2024-08-17 00:34:23.452 PDT [16831] DEBUG: MultiXactId wrap limit is 2147483648, limited by database with OID 16535
2024-08-17 00:34:23.452 PDT [16831] DEBUG: starting up replication slots
2024-08-17 00:34:23.452 PDT [16831] DEBUG: xmin required by slots: data 0, catalog 0
2024-08-17 00:34:23.452 PDT [16831] DEBUG: starting up replication origin progress state
2024-08-17 00:34:23.452 PDT [16831] DEBUG: reading stats file "pg_stat/pgstat.stat"
2024-08-17 00:34:23.453 PDT [16831] DEBUG: removing permanent stats file "pg_stat/pgstat.stat"
2024-08-17 00:34:23.453 PDT [16831] DEBUG: MultiXactId wrap limit is 2147483648, limited by database with OID 16535
2024-08-17 00:34:23.453 PDT [16831] DEBUG: MultiXact member stop limit is now 4294914944 based on MultiXact 1
2024-08-17 00:34:23.458 PDT [16831] DEBUG: shmem_exit(0): 4 before_shmem_exit callbacks to make
2024-08-17 00:34:23.458 PDT [16831] DEBUG: shmem_exit(0): 6 on_shmem_exit callbacks to make
2024-08-17 00:34:23.459 PDT [16831] DEBUG: proc_exit(0): 1 callbacks to make
2024-08-17 00:34:23.459 PDT [16831] DEBUG: exit(0)
2024-08-17 00:34:23.459 PDT [16831] DEBUG: shmem_exit(-1): 0 before_shmem_exit callbacks to make
2024-08-17 00:34:23.459 PDT [16831] DEBUG: shmem_exit(-1): 0 on_shmem_exit callbacks to make
2024-08-17 00:34:23.459 PDT [16831] DEBUG: proc_exit(-1): 0 callbacks to make
2024-08-17 00:34:23.460 PDT [16827] DEBUG: reaping dead processes
2024-08-17 00:34:23.461 PDT [16827] DEBUG: starting background worker process "logical replication launcher"
2024-08-17 00:34:23.461 PDT [16827] LOG: database system is ready to accept connections
2024-08-17 00:34:23.461 PDT [16833] DEBUG: autovacuum launcher started
2024-08-17 00:34:23.462 PDT [16833] DEBUG: InitPostgres
2024-08-17 00:34:23.462 PDT [16833] DEBUG: my backend ID is 1
2024-08-17 00:34:23.462 PDT [16833] DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
2024-08-17 00:34:23.463 PDT [16835] DEBUG: logical replication launcher started
2024-08-17 00:34:23.463 PDT [16833] DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
2024-08-17 00:34:23.463 PDT [16835] DEBUG: InitPostgres
2024-08-17 00:34:23.463 PDT [16835] DEBUG: my backend ID is 2
2024-08-17 00:34:23.463 PDT [16835] DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
2024-08-17 00:34:23.463 PDT [16835] DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
2024-08-17 00:34:23.463 PDT [16835] DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
2024-08-17 00:34:23.463 PDT [16835] DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
2024-08-17 00:34:23.463 PDT [16835] DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
2024-08-17 00:34:23.463 PDT [16835] DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
2024-08-17 00:34:38.520 PDT [16830] DEBUG: snapshot of 0+0 running transaction ids (lsn 0/870000D8 oldest xid 268808 latest complete 268807 next xid 268808)