Практикум
Контекст параметров
-
Очистите предыдущие настройки в postgresql.auto.conf и рестартуйте сервер:
[student@p620 ~]$ psql -U postgres -h localhost
Пароль пользователя postgres:
psql (15.5)
SSL-соединение (протокол: TLSv1.3, шифр: TLS_AES_256_GCM_SHA384, сжатие: выкл.) Введите "help", чтобы получить справку.
postgres@postgres=# alter system reset all; ALTER SYSTEM
postgres@postgres=# \q
[student@p620 ~]$ sudo systemctl restart postgresql -
Подсчитайте количество параметров конфигурации для каждого контекста, отсортировав по возрастанию суммарного количества параметров в контекстах:
postgres@postgres=# select context, count(*) from pg_settings
group by context
order by 2;
context | count
-------------------+-------
backend | 2
superuser-backend | 4
internal | 22
superuser | 60
sighup | 133
postmaster | 135
user | 140
(7 rows)
Представление pg_file_settings
-
Получите список всех параметров, имеющих контекст superuser и значения которых установлены в конфигурационных файлах. Параметры с контекстом superuser может устанавливать в сессии суперпользователь:
postgres@postgres=# select fs.sourcefile, fs.sourceline, fs.name from pg_file_settings fs, pg_settings st
where fs.name = st.name
and st.context = 'superuser';
sourcefile | sourceline | name
---------------------------------+------------+-------------
/pgdata/06/data/postgresql.conf | 756 | lc_messages
(1 row) -
Запустите оболочку Bash от имени
postgres
. Скопируйте конфигурационный файлpostgresql.conf
:[student@p620 ~]$ sudo -iu postgres
[postgres@p620 ~]$ cd $PGDATA
[postgres@p620 data]$ cp -v postgresql.conf{,.orig} 'postgresql.conf' -> 'postgresql.conf.orig' -
Закомментируйте все строки, начинающиеся с
include
вpostgresql.conf
. Проверьте с помощьюgrep
:[postgres@p620 data]$ sed -i 's/^include/#include/' postgresql.conf
[postgres@p620 data]$ grep include postgresql.conf
# can include strftime() escapes
#include_dir = '...'
#include_if_exists = '...'
#include = '...'
# include files ending in '.conf' from
# include file only if it exists
# include file
# Can include strftime() escapes.
#include_dir '/etc/pangolin/ssl/conf' -
Добавьте в конец файла
postgresql.conf
директивуinclude_dir
:
[postgres@p620 data]$ echo "include_dir '/etc/pangolin/lab_conf'" >> postgresql.conf
-
Создайте каталог
/etc/pangolin/lab_conf
и назначьте его владельцем пользователя ОСpostgres
:[student@p620 ~]$ sudo mkdir -p /etc/pangolin/lab_conf
[student@p620 ~]$ sudo chown postgres:postgres /etc/pangolin/lab_conf
[student@p620 ~]$ ls -ld /etc/pangolin/lab_conf
drwxr-xr-x 2 postgres postgres 4096 Nov 8 20:42 /etc/pangolin/lab_conf -
Запишите в файл
/etc/pangolin/lab_conf/lab.conf
настройки для размера кеша буферов 512Мб и рабочей памяти для обслуживания 128Мб:[student@p620 ~]$ sudo -u postgres tee /etc/pangolin/lab_conf/lab.conf <<< 'shared_buffers = 512MB' shared_buffers = 512MB
[student@p620 ~]$ sudo -u postgres tee -a /etc/pangolin/lab_conf/lab.conf <<< 'maintenance_work_mem = 128MB' -
Зайдите в сеанс psql пользователем postgres. Проверьте, что показывает
pg_file_settings
для настройкиshared_buffers
иmaintenance_work_mem
:postgres@postgres=# select * from pg_file_settings where name ~ 'shared_buffers|work_mem';
sourcefile | sourceline | seqno | name | setting | applied | error
--------------------------------+------------+-------+----------------------+---------+---------+------------------------------
/pgdata/06/data/postgresql.conf | 127 | 2 | shared_buffers | 128MB | f |
/etc/pangolin/lab_conf/lab.conf | 1 | 20 | shared_buffers | 512MB | f | setting could not be applied
/etc/pangolin/lab_conf/lab.conf | 2 | 21 | maintenance_work_mem | 128MB | f |
(3 rows)В поле
error
выводится сообщениеsetting could not be applied
, а в полеapplied
-false
. Причина в контексте этой настройки -postmaster
. Необходимо рестартовать. Для параметраmaintenance_work_mem
в полеapplied
-true
, что значит, что он может быть применен. -
Получите текущие значения параметров
shared_buffers
иmaintenance_work_mem
. Затем перечитайте их и проверьте снова:postgres=# \dconfig shared_buffers|m*work_mem List of configuration parameters
Parameter | Value
----------------------+-------
maintenance_work_mem | 64MB
shared_buffers | 128MB
(2 rows)
postgres=# select pg_reload_conf(); pg_reload_conf
----------------
t
(1 row)
postgres=# \dconfig shared_buffers|m*work_mem List of configuration parameters
Parameter | Value
----------------------+-------
maintenance_work_mem | 128MB
shared_buffers | 128MB
(2 rows)Изменение параметра
shared_buffers
требует рестарта сервера, так как его контекст -postmaster
. Параметрmaintenance_work_mem
имеет контекстuser
, поэтому он применился. -
Рестартуйте экземпляр и проверьте параметр
shared_buffers
снова:postgres@postgres=# \q
[student@p620 ~]$ sudo systemctl restart postgresql
[student@p620 ~]$ psql -U postgres -h localhost Password for user postgres:
psql (15.5)
Type "help" for help.
postgres@postgres=# select * from pg_file_settings where name = 'shared_buffers';
sourcefile | sourceline | seqno | name | setting | applied | error
---------------------------------+------------+-------+----------------+---------+---------+-------
/pgdata/06/data/postgresql.conf | 127 | 2 | shared_buffers | 128MB | f |
/etc/pangolin/lab_conf/lab.conf | 1 | 23 | shared_buffers | 512MB | t |
(2 rows)
postgres@postgres=# show shared_buffers ; shared_buffers
----------------
512MB
(1 row)Параметр применен.
-
Добавьте в файл
/etc/pangolin/lab_conf/lab.conf
заведомо неверную настройку и проверьте содержимоеpg_file_settings
:
[student@p620 ~]$ echo 'shared_buffers = mb' | sudo -u postgres tee -a /etc/pangolin/lab_conf/lab.conf
shared_buffers = mb
[student@p620 ~]$ psql -U postgres -h localhost Password for user postgres:
psql (15.5)
Type "help" for help.
postgres@postgres=# select * from pg_file_settings where name = 'shared_buffers';
sourcefile | sourceline | seqno | name | setting | applied | error
---------------------------------+------------+-------+----------------+---------+---------+------------------------------
/pgdata/06/data/postgresql.conf | 127 | 2 | shared_buffers | 128MB | f |
/etc/pangolin/lab_conf/lab.conf | 1 | 23 | shared_buffers | 512MB | f | setting could not be applied
/etc/pangolin/lab_conf/lab.conf | 2 | 24 | shared_buffers | mb | f |
(3 rows)
-
Попробуйте рестартовать сервер:
postgres@postgres=# \q
[student@p620 ~]$ sudo systemctl restart postgresql
Job for postgresql.service failed because the control process exited with error code.
See "systemctl status postgresql.service" and "journalctl -xeu postgresql.service" for details. -
Восстановите настройки в
postgresql.conf
из копии. Рестартуйте сервер:[student@p620 ~]$ sudo -u postgres cp -v $PGDATA/postgresql.conf{.orig,} '/pgdata/06/data/postgresql.conf.orig' -> '/pgdata/06/data/postgresql.conf'
[student@p620 ~]$ sudo systemctl restart postgresql
Команда ALTER SYSTEM
- Запустите сеанс Bash от имени postgres и перейдите в
PGDATA
. Выведите содержимоеpostgresql.auto.conf
:
[student@p620 ~]$ sudo -iu postgres
[postgres@p620 ~]$ cd $PGDATA
[postgres@p620 data]$ cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
-
Командой
ALTER SYSTEM
установите значениеshared_buffers
равным 256Мб:[postgres@p620 data]$ psql -c "ALTER SYSTEM SET shared_buffers TO '256MB'"
ALTER SYSTEM
[postgres@p620 data]$ psql -c "SELECT * FROM pg_file_settings WHERE name = 'shared_buffers'"
sourcefile | sourceline | seqno | name | setting | applied | error --------------------------------------+------------+-------+----------------+---------+---------+------------------------------
/pgdata/06/data/postgresql.conf | 127 | 2 | shared_buffers | 128MB
/pgdata/06/data/postgresql.auto.conf | 3 | 27 | shared_buffers | 256MB (2 rows) -
Проверьте, что записалось в
postgresql.auto.conf
:[postgres@p620 data]$ cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command. shared_buffers = '256MB' -
Снова повторите настройку для
shared_buffers
, но установите теперь значение 512Мб. Проверьте содержимоеpostgresql.auto.conf
:[postgres@p620 data]$ psql -c "ALTER SYSTEM SET shared_buffers TO '512MB'" ALTER SYSTEM
[postgres@p620 data]$ cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command. shared_buffers = '512MB'Обратите внимание на то, что предыдущая настройка со значением 256Мб удалена.
-
С помощью
ALTER SYSTEM
установите значение 8Мб для параметра work_mem. Проверьте содержим оеpostgresql.auto.conf
:[postgres@p620 data]$ psql -c "ALTER SYSTEM SET work_mem TO '8MB'" ALTER SYSTEM
[postgres@p620 data]$ cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command. shared_buffers = '512MB'
work_mem = '8MB' -
Сбросьте значение параметра
shared_buffers
. Проверьте содержимоеpostgresql.auto.conf
:[postgres@p620 data]$ psql -c "ALTER SYSTEM RESET shared_buffers" ALTER SYSTEM
[postgres@p620 data]$ cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command. work_mem = '8MB' -
Сбросьте значения всех параметров:
[postgres@p620 data]$ psql -c "ALTER SYSTEM RESET ALL" ALTER SYSTEM
[postgres@p620 data]$ cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
Представление pg_settings
-
Отредактируйте файл
postgresql.conf
так, чтобы параметрwork_mem
имел значение 8Мб:[postgres@p620 data]$ cd $PGDATA
[postgres@p620 data]$ pwd /pgdata/06/data
[postgres@p620 data]$ sed -i.bak 's/^#work_mem.*$/work_mem = 8MB/' postgresql.conf -
Проверьте этот параметр в
pg_file_settings
иpg_settings
:postgres=# select * from pg_file_settings where name = 'work_mem' \gx -[ RECORD 1 ]-------------------------------
sourcefile | /pgdata/06/data/postgresql.conf
sourceline | 138
seqno | 3
name | work_mem
setting | 8MB
applied | t
error
postgres=# select * from pg_settings where name = 'work_mem' \gx
-[ RECORD 1 ]--- +---------------------------------------------------------------------------------------------------
name | work_mem
setting | 4096
unit | kB
category | Resource Usage / Memory
short_desc | Sets the maximum memory to be used for query workspaces.
extra_desc | This much memory can be used by each internal sort operation and hash table before
context | user
vartype | integer
source | default
min_val | 64
max_val | 2147483647
enumvals |
boot_val | 4096
reset_val | 4096
sourcefile |
sourceline |
pending_restart | f
postgres=# show work_mem ;
work_mem
----------
4MB
(1 row) -
Так как контекст параметра
user
, но изменен он был в конфигурационном файле, следовательно, необходимо перечитать файлы конфигурации. После перечитывания проверьтеpg_settings
:postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# select * from pg_settings where name = 'work_mem' \gx
-[ RECORD 1 ]--- +---------------------------------------------------------------------------------------------------
name | work_mem
setting | 8192
unit | kB
category | Resource Usage / Memory
short_desc | Sets the maximum memory to be used for query workspaces.
extra_desc | This much memory can be used by each internal sort operation and hash table before
context | user
vartype | integer
source | configuration file
min_val | 64
max_val | 2147483647
enumvals
boot_val | 4096
reset_val | 8192
sourcefile | /pgdata/06/data/postgresql.conf
sourceline | 138
pending_restart | fЗначение по умолчанию - 4Мб, текущее значение - 8Мб, если в сессии сделать
RESET work_mem
, то значение будет 8Мб, поскольку оно установлено вpostgresql.conf
.
Сессионные параметры
-
Установите в текущей сессии значение параметра
work_mem
равное 16Мб и проверьтеpg_settings
:SET
postgres=# \dconfig+ work_mem
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
-----------+-------+---------+---------+-------------------
work_mem | 16MB | integer | user |
(1 row)
postgres=# select * from pg_settings where name = 'work_mem' \gx
-[ RECORD 1 ]--- +---------------------------------------------------------------------------------------------------
name | work_mem
setting | 16384
unit | kB
category | Resource Usage / Memory
short_desc | Sets the maximum memory to be used for query workspaces.
extra_desc | This much memory can be used by each internal sort operation and hash table before
context | user
vartype | integer
source | session
min_val | 64
max_val | 2147483647
enumvals
boot_val | 4096
reset_val | 8192
sourcefile
sourceline
pending_restart | f -
Рестартуйте сессию и снова проверьте
pg_settings
:postgres=# \c
You are now connected to database "postgres" as user "postgres".
postgres=# select * from pg_settings where name = 'work_mem' \gx
-[ RECORD 1 ]--- +---------------------------------------------------------------------------------------------------
name | work_mem
setting | 8192
unit | kB
category | Resource Usage / Memory
short_desc | Sets the maximum memory to be used for query workspaces.
extra_desc | This much memory can be used by each internal sort operation and hash table before
context | user
vartype | integer
source | configuration file
min_val | 64
max_val | 2147483647
enumvals
boot_val | 4096
reset_val | 8192
sourcefile | /pgdata/06/data/postgresql.conf
sourceline | 138
pending_restart | fПараметр сессионный, поэтому был сброшен при рестарте сессии.
Транзакционные параметры
-
Установите значение параметра
work_mem
равное 16Мб в транзакции. Проверьте значение во время транзакции и после ее отката:postgres=# begin;
BEGIN
postgres=*# set work_mem = '16MB'; SET
postgres=*# \dconfig+ work_mem
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
-----------+-------+---------+---------+-------------------
work_mem | 16MB | integer | user |
(1 row)
postgres=*# select * from pg_settings where name = 'work_mem' \gx
-[ RECORD 1 ]---
+---------------------------------------------------------------------------------------------------
name | work_mem
setting | 16384
unit | kB
category | Resource Usage / Memory
short_desc | Sets the maximum memory to be used for query workspaces.
extra_desc | This much memory can be used by each internal sort operation and hash table before
context | user
vartype | integer
source | session
min_val | 64
max_val | 2147483647
enumvals
boot_val | 4096
reset_val | 8192
sourcefile
sourceline
pending_restart | f
postgres=*# rollback; ROLLBACK
postgres=# \dconfig+ work_mem
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
-----------+-------+---------+---------+-------------------
work_mem | 8MB | integer | user |
(1 row)Транзакция не зафиксирована - был откат, поэтому при выходе из нее значение параметра, установленного в этой транзакции, было сброшено.
-
Запустите транзакцию, установите в ней два параметра командой
SET
, но для одного параметра добавьтеLOCAL
. Далее зафиксируйте транзакцию и проверьт е значения параметров после фиксации:postgres=# \dconfig+ (work|hash)_mem*
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
---------------------+-------+---------+---------+-------------------
hash_mem_multiplier | 2 | real | user |
work_mem | 8MB | integer | user |
(2 rows)
postgres=# begin;
BEGIN
postgres=*# set work_mem = '16MB';
SET
postgres=*# set local hash_mem_multiplier = 3; SET
postgres=*# \dconfig+ (work|hash)_mem*
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
---------------------+-------+---------+---------+-------------------
hash_mem_multiplier | 3 | real | user |
work_mem | 16MB | integer | user |
(2 rows)
postgres=*# commit;
COMMIT
postgres=# \dconfig+ (work|hash)_mem*
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
---------------------+-------+---------+---------+-------------------
hash_mem_multiplier | 2 | real | user |
work_mem | 16MB | integer | user |
(2 rows)После фиксации транзакции значение установленного в транзакции параметра work_mem так и осталось 16Мб, а значение установленного командой
SET LOCAL
параметраhash_mem_multiplier
вернулось к исходному значению. -
Выполните команду
RESET
для параметраwork_mem
и получите его значение после этого:postgres=# reset work_mem ; RESET
postgres=# \dconfig+ work_mem
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
-----------+-------+---------+---------+-------------------
work_mem | 8MB | integer | user |
(1 row)