Читаем вместе. PostgreSQL 15 изнутри. Стр. 39 — 44

Егор Рогов. Postgres 15 изнутриПродолжаю читать книгу «PostgreSQL Изнутри». На этот раз будет не очень много, потому что в прошлый раз осталось рассмотреть два раздела, что я сегодня и сделал.

В этот раз буду рассмотрены:

 

1.2. Процессы и память

Текущие процессы, связанные с postgres можно посмотреть вот так (в ОС Linux):

ps -aux --forest | grep postgres
postgres    1108  0.0  0.0 224168 29824 ?        Ss   окт30   0:09 /usr/lib/postgresql/16/bin/postgres -D /var/lib/postgresql/16/main -c config_file=/etc/postgresql/16/main/postgresql.conf
postgres    1117  0.0  0.4 224568 138088 ?       Ss   окт30   0:01  \_ postgres: 16/main: checkpointer 
postgres    1118  0.0  0.1 224320 40552 ?        Ss   окт30   0:01  \_ postgres: 16/main: background writer 
postgres    1123  0.0  0.0 224168  9832 ?        Ss   окт30   0:01  \_ postgres: 16/main: walwriter 
postgres    1124  0.0  0.0 225772  9576 ?        Ss   окт30   0:01  \_ postgres: 16/main: autovacuum launcher 
postgres    1125  0.0  0.0 225748  8424 ?        Ss   окт30   0:00  \_ postgres: 16/main: logical replication launcher 
pavel     468683  0.0  0.0   9212  2304 pts/5    S+   16:40   0:00  |       \_ grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox postgres
postgres  419552  0.0  0.0 223548 29952 ?        Ss   11:47   0:01 /usr/lib/postgresql/15/bin/postgres -D /var/lib/postgresql/15/main -c config_file=/etc/postgresql/15/main/postgresql.conf
postgres  419553  0.0  0.0 223680  8380 ?        Ss   11:47   0:00  \_ postgres: 15/main: checkpointer 
postgres  419554  0.0  0.0 223696  6972 ?        Ss   11:47   0:00  \_ postgres: 15/main: background writer 
postgres  419556  0.0  0.0 223548 10300 ?        Ss   11:47   0:00  \_ postgres: 15/main: walwriter 
postgres  419557  0.0  0.0 225140  8636 ?        Ss   11:47   0:00  \_ postgres: 15/main: autovacuum launcher 
postgres  419558  0.0  0.0 225120  7868 ?        Ss   11:47   0:00  \_ postgres: 15/main: logical replication launcher 

У меня установлено два сервера, 15 и 16-й. Поэтому и видим два набора процессов, для 15-й и 16-й версии серверов. Основной процесс (postmaster) — это тот, у которого самая длинная строка.

Потреблённую память можно посмотреть так (1108 и 419552 — это номера головных процессов):

ps -p 1108 -v       
    PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
   1108 ?        Ss     0:09     26     0 224168 29824  0.0 /usr/lib/postgresql/16/bin/postgres -D /var/lib/postgresql/16/main -c config_file=/etc/postgresql/16/main/postgresql.conf
ps -p 419552 -v     
    PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 419552 ?        Ss     0:01      1     0 223548 29952  0.0 /usr/lib/postgresql/15/bin/postgres -D /var/lib/postgresql/15/main -c config_file=/etc/postgresql/15/main/postgresql.conf

В общем, процессный подход.

Еще есть некоторые возможности, связанные с переменными, но на них я посмотрю в следующий раз.

 

1.3. Клиенты и клиент-серверный протокол

Да-да, та самая функция PostgresMain:

В комментариях есть про базу данных и пользователя:

 * dbname is the name of the database to connect to, username is the
 * PostgreSQL user name to be used for the session.

Есть зайти и в однопользовательском режиме — PostgresSingleUserMain, тогда базу не нужно указывать.

Ну а про протокол вот что можно сказать: протоколы — это набор сообщений и их формат, которыми могут обмениваться клиент и сервер. В Постгресе есть свои правила, о которым, я думаю, мы поговорим в следующий раз. Опять же, как понимаю, Libpq — это самая популярная библиотека, реализующая этот протокол, написана на языке Си, поэтому её можно использовать везде, где можно пользоваться компилятором GCC. А это, считай, почти везде.

Например, вот есть огромный комментарий к функции подключения к базе данных:

/*
 *		Connecting to a Database
 *
 * There are now six different ways a user of this API can connect to the
 * database.  Two are not recommended for use in new code, because of their
 * lack of extensibility with respect to the passing of options to the
 * backend.  These are PQsetdb and PQsetdbLogin (the former now being a macro
 * to the latter).

Так что я решил не выполнять никаких экспериментов. Закончу введение на этом, ну а дальше уже буду проводить разные исследования.


Be the first to comment

Leave a Reply

Ваш Mail не будет опубликован.


*