Продолжаю читать книгу «PostgreSQL Изнутри». На этот раз будет не очень много, потому что в прошлый раз осталось рассмотреть два раздела, что я сегодня и сделал.
В этот раз буду рассмотрены:
Текущие процессы, связанные с 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).
Так что я решил не выполнять никаких экспериментов. Закончу введение на этом, ну а дальше уже буду проводить разные исследования.
Leave a Reply