|
Крайне медленная работа на сервере Astra linux + PostgreSQL | ☑ | ||
---|---|---|---|---|
0
Zycman
12.02.24
✎
09:26
|
Приветствую форумчане.
Столкнулись с проблемой крайне низкой производительности на новом сервере, по сравнению со старым. Старый сервер более слабый по характеристикам и крутиться на виртуальной машине Windows Server 2012 + Postgre14 Новый сервак раза в два мощнее, стоит Astralinux + Postgre15. И по итогу на новом сервере крайне низкая скорость работы, документ распроводится вместо 2х минут, 6 часов. Кто что может подсказать?) |
|||
1
Волшебник
12.02.24
✎
09:27
|
Какая конфа? Какой документ? Размер базы? Количество пользователей?
|
|||
2
Волшебник
12.02.24
✎
09:27
|
Почему документ распроводится, а не проводится?
|
|||
3
steep1
12.02.24
✎
09:30
|
(0) Проблема только с одним конкретным документом?
|
|||
4
Zycman
12.02.24
✎
09:32
|
Проблема с любым документом, конфа УПП, взят бэкап. Документ пробовали и проводить и распроводить. Привёл сравнение времени работы в распроведении документа на новом и старом сервере.
|
|||
5
Zycman
12.02.24
✎
09:33
|
На новом сервере исключительно один пользователь, так как пока только тестирование проводиться, а вот на старом, пользователей около 300.
|
|||
6
Волшебник
12.02.24
✎
09:35
|
(4) Сказки...
|
|||
7
Zycman
12.02.24
✎
09:37
|
(6) Вот и сижу голову ломаю, просчитался, но где?
|
|||
8
Zycman
12.02.24
✎
09:38
|
(6) есть подозрение на внутренние механизмы самой ОС
|
|||
9
MaximSh
12.02.24
✎
09:52
|
(8) это вряд-ли, тесты на производительность cpu и дисковой подсистемы, размер занятой ОЗУ 1С и БП снимут эти подозрения. Скорее уж настройки БД.
|
|||
10
DrZombi
гуру
12.02.24
✎
10:02
|
(0) УПП у вас под чем работается в толстом клиенте?
|
|||
11
DrZombi
гуру
12.02.24
✎
10:02
|
+ Под эмулятором виндовс?
|
|||
12
steep1
12.02.24
✎
10:07
|
(0) версии платформы какие?
|
|||
13
Zycman
12.02.24
✎
10:07
|
Физический сервак, на ОС Астра линукс, тест гилева показал, в 2 раза выше попугаев чем на старом сервере.
|
|||
14
Zycman
12.02.24
✎
10:08
|
(12) 8.3.22.1923
|
|||
15
ansh15
12.02.24
✎
10:13
|
(13) В два раза - было 8, стало аж все 16? Или 45 и 90?
|
|||
16
Zycman
12.02.24
✎
10:22
|
На SQl 10 на старом
На новом 38. |
|||
17
Zycman
12.02.24
✎
10:34
|
В файловом варианте, так вообще 98 баллов
|
|||
18
mikecool
12.02.24
✎
10:37
|
для линукса нужен грамотный админ, пока его не будет - хоть сколько попугаев пусть показывает
|
|||
19
Garykom
гуру
12.02.24
✎
10:57
|
Настройки PgSQL?
|
|||
20
arsik
гуру
12.02.24
✎
11:16
|
(17) Постгре чей? И какая версия?
Внутри 1С версия совместимости какая стоит? |
|||
21
DimVad
12.02.24
✎
11:36
|
Работал я когда-то на УПП под постресом...
Первая фича конечно что УПП на автоматических блокировках, а значит пострес блокирует всю табличку в которую пишет. Вот распроводите Вы документ, он пишет какие-нибудь остатки по партиям... Получается практически однопользовательская система :-) Вторая фича это конечно то, что постгрес менее умно строит планы запросов, поэтому если запрос написан не слишком хорошо , то скуль ещё скушает, а пострес подавится. Лучше сложные запросы переделывать на временные таблички с индексами. |
|||
22
Zycman
12.02.24
✎
12:28
|
PG PRO 15 версия.
Ну так на прошлом сервере на postgre нормально работал) |
|||
23
Garykom
гуру
12.02.24
✎
12:36
|
(22) это прекрасно что работала
настройки pg надеюсь не дефолтные? |
|||
24
MaximSh
12.02.24
✎
12:38
|
(22) конфигуратор-отладка-замер производительности
|
|||
25
Xapac
12.02.24
✎
13:32
|
(0) у нас ЕРП на 1500 пользователей. Работает стабильно на Postgres + Astra.
1. зачем переехали? 2. Тестировали ли перед переездом? Функциональное тестирование/нагрузочное тестирование? |
|||
26
Djelf
12.02.24
✎
14:40
|
(22) На прошлом была 14я версия PGSQL, на новом 15я.
Поставить 14ю для сравнения никто еще не предлагал? документ распроводится вместо 2х минут, 6 часов.
Слабо верится, но так бывает, особенно если в код запросов УПП кто-то залез и что-то поправил. Конфигурация тут не важна. +(24) Именно так, а потом сравнить результаты. (16) Маловато как-то, но вполне достойно. Надеюсь ничего не твикали в системе перед тем как это обнаружили? Некоторые рекомендованные твики уже устарели и оказывают негативное влияние на производительность (но не на тест Гилева), а некоторые настолько вредны, что их использовать вообще нельзя. |
|||
27
Chai Nic
12.02.24
✎
14:51
|
(0) "документ распроводится вместо 2х минут, 6 часов"
Классическая ситуация с nested loop join. Очевидно, новый сервер ошибается при выборе метода соединения таблиц, выбирая самый неподходящий для больших соединений.. Как его научить выбирать более адекватно - четкого алгоритма нет. Самый простой способ - это вообще исключит nested loop из предпочтений в настройках, но это замедлит работу в целом. |
|||
28
DrZombi
гуру
12.02.24
✎
15:07
|
(22) Кто мешает поставить прошлый?
|
|||
29
Волшебник
12.02.24
✎
16:06
|
(24) Под замером 6 часов превратятся в сутки.
|
|||
30
Krendel
12.02.24
✎
19:19
|
(25) УПП и ЕРП разные конфигурации работающие под разную платформу
|
|||
31
stopa85
12.02.24
✎
21:01
|
Тут только один алгоритм.
1. Ищете узкое место 2. Решаете проблему 99% что какой-то запрос. Хотя 6 часов... ПГ то хоть по методичке Дорошкевича настраивали? |
|||
32
Xapac
13.02.24
✎
08:20
|
(30)postgres то один. и алгоритмы решения проблем одинаковые.
|
|||
33
Zycman
13.02.24
✎
08:28
|
Настройки самой PostgrePro испробованы разные, как те, что на рабочих серверах использовались, так и несколько раз менялись, итог один.
Любые тяжелые операции многократно больше времени занимают, при этом в мониторинге видно, что на процесс расходуется один и тот же размер памяти(вообще не изменяется, условно дошло до 177000 КБ и висит) и 100% нагрузка на одно ядро с периодической просадкой на 1-2 секунды |
|||
34
Krendel
13.02.24
✎
08:29
|
(32) Основные проблемы с ПГ решили в 18-19 годах, конфигурации могут быть написаны с учетом изменения архитектуры, а могут быть в режиме совместимости.
Что касается алгоритмов, смотря какие цели, если цель сделать быстро, то стенд, специалитет. если разобраться, то (31) |
|||
35
Zycman
13.02.24
✎
08:29
|
При этом очень мелкий операции, выполняются быстрее чем на основном сервере.
Результаты тестирования гилева дают 45 очков с использованием SQL |
|||
36
Garykom
гуру
13.02.24
✎
08:37
|
PostgrePro ?
Зачем??? |
|||
37
Zycman
13.02.24
✎
09:45
|
(36) а в чём проблема? только конкретику
|
|||
38
arsik
гуру
13.02.24
✎
10:52
|
(37) Для начала - она платная.
А если вы заплатили за PostgrePro - то и поддержка их у вас должна быть. Просто опишите им проблему в письме. |
|||
39
Hmster
13.02.24
✎
12:28
|
я склоняюсь к тому, что очень криво настроили сам PG
|
|||
40
Garykom
гуру
13.02.24
✎
12:59
|
(39) например оперативки не выдали (всего, для 1 запроса и т.д.), раз на мелких операциях быстро а больших затык
|
|||
41
Zycman
13.02.24
✎
13:26
|
(40) выдали, все настройки самой PG уже несколько раз изменены.
Склоняемся всё больше в сторону настройки самой ОС Astra linux |
|||
42
Ногаминебить
13.02.24
✎
13:33
|
Так отладчик запускали? На каком месте затык? Полюбому же эти 6 часов в какую-то конкретную строку кода упираются.
|
|||
43
Ногаминебить
13.02.24
✎
13:35
|
И как уже выше предполагали - наверняка это будет запрос. А если запрос - то стопудово там будет использование каких-нить виртуальных таблиц. Срез последних или еще чонить.
|
|||
44
Biker
13.02.24
✎
13:51
|
(41) Какая Фс на на которой лежит постгрес ?
|
|||
45
stopa85
13.02.24
✎
13:52
|
(36) вроде только она в Реестре российского ПО.
Иначе зачем тогда Астру ставить? |
|||
46
Hmster
13.02.24
✎
15:15
|
Мне нравится:
1.Новый комп мощнее старого. А по факту: проц имеет больше ядер, но меньшую тактовую + меньше оперативки. 2.Мы уже много раз настройки меняли. Что меняли, кому меняли? Пока не расскажешь характеристики сервера и не выложишь настройки - это будет вохоже экстрасенсов по ТНТ, ну или соревнование телепатов. |
|||
47
Garykom
гуру
13.02.24
✎
15:23
|
(46) С тактовой еще затык
Сейчас же турбобуст хитрый и поддержка в ОСи нужна Может оно работает на базовой в 2ГГц |
|||
48
Garykom
гуру
13.02.24
✎
15:24
|
Имхо Debian и обычный PgSQL от 1С
Если не хочется танцев с бубнами, да и то админ нужен И железо изначально правильное |
|||
49
Krendel
13.02.24
✎
15:24
|
(47) там много ща нюансов
(0) если надоест, мыло в личке |
|||
50
stopa85
13.02.24
✎
15:29
|
(47) ну не в 100 же раз посадка!? Из-за буста. Ну в 10поверю.
Явно косяк какой-то в настройках/поведении ПГ. |
|||
51
stopa85
13.02.24
✎
15:34
|
(48) а как же реест российского ПО?
|
|||
52
Garykom
гуру
13.02.24
✎
16:43
|
(51) там уже появился MS Office?
|
|||
53
1Снеговик
гуру
13.02.24
✎
16:46
|
(47) высокую производительность надо включать везде в настройках электропитания, кроме ноутбуков.
|
|||
54
1Снеговик
гуру
13.02.24
✎
16:47
|
(47) хотя на Линуксе хз как процы работают
|
|||
55
1Снеговик
гуру
13.02.24
✎
16:48
|
А Линукс вообще понимает современные большие/малые ядра?
|
|||
56
Garykom
гуру
13.02.24
✎
16:54
|
(55) Не очень хорошо понимает
|
|||
57
arsik
гуру
13.02.24
✎
17:01
|
(46) Он уже второй день рассказывает как ему плохо живется но до сих пор не показал настройки постгри.
+ pgpro - может они решили мимо кассы его поставить, а там для таких пользователей маленький "нюанс" |
|||
58
Krendel
13.02.24
✎
18:01
|
(57) там в принципе на астре лбной сплошной нюанс
|
|||
59
edwin
13.02.24
✎
18:19
|
online_analyze смотри.
|
|||
60
arsik
гуру
14.02.24
✎
08:19
|
(58) Не пользовался ни разу у меня душа больше к RedOS лежит. Я бы его тоже попробовал, тем более сервер пока не в продакшене
|
|||
61
Zycman
15.02.24
✎
11:05
|
В продолжение, вот запрос из логов, на котором система долго висит.
логи2024-02-15 12:07:15.631 +05 [2713] LOG: statement: UPDATE _AccRgAT11724 SET _Fld1703 = _AccRgAT11724._Fld1703 + T2._Fld1703, _TurnoverDt1715 = _AccRgAT11724._TurnoverDt1715 + T2._TurnoverDt1715, _TurnoverCt1716 = _AccRgAT11724._TurnoverCt1716 + T2._TurnoverCt1716, _Turnover1717 = _AccRgAT11724._Turnover1717 + T2._Turnover1717, _Fld1704 = _AccRgAT11724._Fld1704 + T2._Fld1704, _TurnoverDt1718 = _AccRgAT11724._TurnoverDt1718 + T2._TurnoverDt1718, _TurnoverCt1719 = _AccRgAT11724._TurnoverCt1719 + T2._TurnoverCt1719, _Turnover1720 = _AccRgAT11724._Turnover1720 + T2._Turnover1720, _Fld1705 = _AccRgAT11724._Fld1705 + T2._Fld1705, _TurnoverDt1721 = _AccRgAT11724._TurnoverDt1721 + T2._TurnoverDt1721, _TurnoverCt1722 = _AccRgAT11724._TurnoverCt1722 + T2._TurnoverCt1722, _Turnover1723 = _AccRgAT11724._Turnover1723 + T2._Turnover1723 FROM pg_temp.tt8 T2 WHERE (T2._Period = _AccRgAT11724._Period AND T2._AccountRRef = _AccRgAT11724._AccountRRef AND T2._Fld1701RRef = _AccRgAT11724._Fld1701RRef AND (T2._Fld1702RRef == _AccRgAT11724._Fld1702RRef) AND (T2._Value1_TYPE == _AccRgAT11724._Value1_TYPE AND T2._Value1_RTRef == _AccRgAT11724._Value1_RTRef AND T2._Value1_RRRef == _AccRgAT11724._Value1_RRRef) AND _AccRgAT11724._Splitter = CAST(0 AS NUMERIC)) AND (T2._EDCount = CAST(1 AS NUMERIC)) 2024-02-15 12:07:17.218 +05 [2713] LOG: duration: 1586.834 ms 2024-02-15 12:07:17.218 +05 [2713] LOG: statement: INSERT INTO _AccRgAT11724 (_Period, _AccountRRef, _Fld1701RRef, _Fld1702RRef, _Value1_TYPE, _Value1_RTRef, _Value1_RRRef, _Fld1703, _TurnoverDt1715, _TurnoverCt1716, _Turnover1717, _Fld1704, _TurnoverDt1718, _TurnoverCt1719, _Turnover1720, _Fld1705, _TurnoverDt1721, _TurnoverCt1722, _Turnover1723, _Splitter) SELECT T1._Period, T1._AccountRRef, T1._Fld1701RRef, T1._Fld1702RRef, T1._Value1_TYPE, T1._Value1_RTRef, T1._Value1_RRRef, T1._Fld1703, T1._TurnoverDt1715, T1._TurnoverCt1716, T1._Turnover1717, T1._Fld1704, T1._TurnoverDt1718, T1._TurnoverCt1719, T1._Turnover1720, T1._Fld1705, T1._TurnoverDt1721, T1._TurnoverCt1722, T1._Turnover1723, CAST(CAST(0 AS NUMERIC) AS NUMERIC(10, 0)) FROM pg_temp.tt8 T1 LEFT OUTER JOIN _AccRgAT11724 T2 ON T1._Period = T2._Period AND T1._AccountRRef = T2._AccountRRef AND T1._Fld1701RRef = T2._Fld1701RRef AND (T1._Fld1702RRef == T2._Fld1702RRef) AND (T1._Value1_TYPE == T2._Value1_TYPE AND T1._Value1_RTRef == T2._Value1_RTRef AND T1._Value1_RRRef == T2._Value1_RRRef) AND T2._Splitter = CAST(0 AS NUMERIC) WHERE T2._Period IS NULL AND T1._EDCount = CAST(1 AS NUMERIC) 2024-02-15 12:07:17.359 +05 [2713] LOG: duration: 140.895 ms 2024-02-15 12:07:17.360 +05 [2713] LOG: statement: UPDATE _AccRgAT21725 SET _Fld1703 = _AccRgAT21725._Fld1703 + T2._Fld1703, _TurnoverDt1715 = _AccRgAT21725._TurnoverDt1715 + T2._TurnoverDt1715, _TurnoverCt1716 = _AccRgAT21725._TurnoverCt1716 + T2._TurnoverCt1716, _Turnover1717 = _AccRgAT21725._Turnover1717 + T2._Turnover1717, _Fld1704 = _AccRgAT21725._Fld1704 + T2._Fld1704, _TurnoverDt1718 = _AccRgAT21725._TurnoverDt1718 + T2._TurnoverDt1718, _TurnoverCt1719 = _AccRgAT21725._TurnoverCt1719 + T2._TurnoverCt1719, _Turnover1720 = _AccRgAT21725._Turnover1720 + T2._Turnover1720, _Fld1705 = _AccRgAT21725._Fld1705 + T2._Fld1705, _TurnoverDt1721 = _AccRgAT21725._TurnoverDt1721 + T2._TurnoverDt1721, _TurnoverCt1722 = _AccRgAT21725._TurnoverCt1722 + T2._TurnoverCt1722, _Turnover1723 = _AccRgAT21725._Turnover1723 + T2._Turnover1723 FROM pg_temp.tt8 T2 WHERE (T2._Period = _AccRgAT21725._Period AND T2._AccountRRef = _AccRgAT21725._AccountRRef AND T2._Fld1701RRef = _AccRgAT21725._Fld1701RRef AND (T2._Fld1702RRef == _AccRgAT21725._Fld1702RRef) AND (T2._Value1_TYPE == _AccRgAT21725._Value1_TYPE AND T2._Value1_RTRef == _AccRgAT21725._Value1_RTRef AND T2._Value1_RRRef == _AccRgAT21725._Value1_RRRef) AND (T2._Value2_TYPE == _AccRgAT21725._Value2_TYPE AND T2._Value2_RTRef == _AccRgAT21725._Value2_RTRef AND T2._Value2_RRRef == _AccRgAT21725._Value2_RRRef) AND _AccRgAT21725._Splitter = CAST(0 AS NUMERIC)) AND (T2._EDCount = CAST(2 AS NUMERIC)) 2024-02-15 12:07:30.265 +05 [2713] LOG: duration: 12905.457 ms 2024-02-15 12:07:30.266 +05 [2713] LOG: statement: INSERT INTO _AccRgAT21725 (_Period, _AccountRRef, _Fld1701RRef, _Fld1702RRef, _Value1_TYPE, _Value1_RTRef, _Value1_RRRef, _Value2_TYPE, _Value2_RTRef, _Value2_RRRef, _Fld1703, _TurnoverDt1715, _TurnoverCt1716, _Turnover1717, _Fld1704, _TurnoverDt1718, _TurnoverCt1719, _Turnover1720, _Fld1705, _TurnoverDt1721, _TurnoverCt1722, _Turnover1723, _Splitter) SELECT T1._Period, T1._AccountRRef, T1._Fld1701RRef, T1._Fld1702RRef, T1._Value1_TYPE, T1._Value1_RTRef, T1._Value1_RRRef, T1._Value2_TYPE, T1._Value2_RTRef, T1._Value2_RRRef, T1._Fld1703, T1._TurnoverDt1715, T1._TurnoverCt1716, T1._Turnover1717, T1._Fld1704, T1._TurnoverDt1718, T1._TurnoverCt1719, T1._Turnover1720, T1._Fld1705, T1._TurnoverDt1721, T1._TurnoverCt1722, T1._Turnover1723, CAST(CAST(0 AS NUMERIC) AS NUMERIC(10, 0)) FROM pg_temp.tt8 T1 LEFT OUTER JOIN _AccRgAT21725 T2 ON T1._Period = T2._Period AND T1._AccountRRef = T2._AccountRRef AND T1._Fld1701RRef = T2._Fld1701RRef AND (T1._Fld1702RRef == T2._Fld1702RRef) AND (T1._Value1_TYPE == T2._Value1_TYPE AND T1._Value1_RTRef == T2._Value1_RTRef AND T1._Value1_RRRef == T2._Value1_RRRef) AND (T1._Value2_TYPE == T2._Value2_TYPE AND T1._Value2_RTRef == T2._Value2_RTRef AND T1._Value2_RRRef == T2._Value2_RRRef) AND T2._Splitter = CAST(0 AS NUMERIC) WHERE T2._Period IS NULL AND T1._EDCount = CAST(2 AS NUMERIC) 2024-02-15 12:07:32.908 +05 [2713] LOG: duration: 2642.143 ms 2024-02-15 12:07:32.909 +05 [2713] LOG: statement: UPDATE _AccRgAT31726 SET _Fld1703 = _AccRgAT31726._Fld1703 + T2._Fld1703, _TurnoverDt1715 = _AccRgAT31726._TurnoverDt1715 + T2._TurnoverDt1715, _TurnoverCt1716 = _AccRgAT31726._TurnoverCt1716 + T2._TurnoverCt1716, _Turnover1717 = _AccRgAT31726._Turnover1717 + T2._Turnover1717, _Fld1704 = _AccRgAT31726._Fld1704 + T2._Fld1704, _TurnoverDt1718 = _AccRgAT31726._TurnoverDt1718 + T2._TurnoverDt1718, _TurnoverCt1719 = _AccRgAT31726._TurnoverCt1719 + T2._TurnoverCt1719, _Turnover1720 = _AccRgAT31726._Turnover1720 + T2._Turnover1720, _Fld1705 = _AccRgAT31726._Fld1705 + T2._Fld1705, _TurnoverDt1721 = _AccRgAT31726._TurnoverDt1721 + T2._TurnoverDt1721, _TurnoverCt1722 = _AccRgAT31726._TurnoverCt1722 + T2._TurnoverCt1722, _Turnover1723 = _AccRgAT31726._Turnover1723 + T2._Turnover1723 FROM pg_temp.tt8 T2 WHERE (T2._Period = _AccRgAT31726._Period AND T2._AccountRRef = _AccRgAT31726._AccountRRef AND T2._Fld1701RRef = _AccRgAT31726._Fld1701RRef AND (T2._Fld1702RRef == _AccRgAT31726._Fld1702RRef) AND (T2._Value1_TYPE == _AccRgAT31726._Value1_TYPE AND T2._Value1_RTRef == _AccRgAT31726._Value1_RTRef AND T2._Value1_RRRef == _AccRgAT31726._Value1_RRRef) AND (T2._Value2_TYPE == _AccRgAT31726._Value2_TYPE AND T2._Value2_RTRef == _AccRgAT31726._Value2_RTRef AND T2._Value2_RRRef == _AccRgAT31726._Value2_RRRef) AND (T2._Value3_TYPE == _AccRgAT31726._Value3_TYPE AND T2._Value3_RTRef == _AccRgAT31726._Value3_RTRef AND T2._Value3_RRRef == _AccRgAT31726._Value3_RRRef) AND _AccRgAT31726._Splitter = CAST(0 AS NUMERIC)) AND (T2._EDCount = CAST(3 AS NUMERIC)) 2024-02-15 12:17:42.386 +05 [2394] СООБЩЕНИЕ: начата контрольная точка: time |
|||
62
Hmster
15.02.24
✎
10:29
|
(61) покажи настройки СУБД
|
|||
63
Zycman
15.02.24
✎
11:08
|
Сейчас они сброшены до стандартных, за исключение включенного логирования.
|
|||
64
arsik
гуру
15.02.24
✎
11:10
|
(63) Стандарты у всех свои.
|
|||
65
Zycman
15.02.24
✎
11:10
|
# -----------------------------
# PostgreSQL configuration file # ----------------------------- # # This file consists of lines of the form: # # name = value # # (The "=" is optional.) Whitespace may be used. Comments are introduced with # "#" anywhere on a line. The complete list of parameter names and allowed # values can be found in the PostgreSQL documentation. # # The commented-out settings shown in this file represent the default values. # Re-commenting a setting is NOT sufficient to revert it to the default value; # you need to reload the server. # # This file is read on server startup and when the server receives a SIGHUP # signal. If you edit the file on a running system, you have to SIGHUP the # server for the changes to take effect, run "pg_ctl reload", or execute # "SELECT pg_reload_conf()". Some parameters, which are marked below, # require a server shutdown and restart to take effect. # # Any parameter can also be given as a command-line option to the server, e.g., # "postgres -c log_connections=on". Some parameters can be changed at run time # with the "SET" SQL command. # # Memory units: B = bytes Time units: us = microseconds # kB = kilobytes ms = milliseconds # MB = megabytes s = seconds # GB = gigabytes min = minutes # TB = terabytes h = hours # d = days #------------------------------------------------------------------------------ # FILE LOCATIONS #------------------------------------------------------------------------------ # The default values of these variables are driven from the -D command-line # option or PGDATA environment variable, represented here as ConfigDir. #data_directory = 'ConfigDir' # use data in another directory # (change requires restart) #hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file # (change requires restart) #ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file # (change requires restart) # If external_pid_file is not explicitly set, no extra PID file is written. #external_pid_file = '' # write an extra PID file # (change requires restart) #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - #listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) port = 5432 # (change requires restart) max_connections = 100 # (change requires restart) #reserved_connections = 0 # (change requires restart) #superuser_reserved_connections = 3 # (change requires restart) #unix_socket_directories = '/tmp' # comma-separated list of directories # (change requires restart) #unix_socket_group = '' # (change requires restart) #unix_socket_permissions = 0777 # begin with 0 to use octal notation # (change requires restart) #bonjour = off # advertise server via Bonjour # (change requires restart) #bonjour_name = '' # defaults to the computer name # (change requires restart) # - TCP settings - # see "man tcp" for details #tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; # 0 selects the system default #tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; # 0 selects the system default #tcp_keepalives_count = 0 # TCP_KEEPCNT; # 0 selects the system default #tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds; # 0 selects the system default #client_connection_check_interval = 0 # time between checks for client # disconnection while running queries; # 0 for never # - Authentication - #authentication_timeout = 1min # 1s-600s password_encryption = md5 # scram-sha-256 or md5 #scram_iterations = 4096 #db_user_namespace = off # GSSAPI using Kerberos #krb_server_keyfile = 'FILE:${sysconfdir}/krb5.keytab' #krb_caseins_users = off #gss_accept_delegation = off # - SSL - #ssl = off #ssl_ca_file = '' #ssl_cert_file = 'server.crt' #ssl_crl_file = '' #ssl_crl_dir = '' #ssl_key_file = 'server.key' #ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers #ssl_prefer_server_ciphers = on #ssl_ecdh_curve = 'prime256v1' #ssl_min_protocol_version = 'TLSv1.2' #ssl_max_protocol_version = '' #ssl_dh_params_file = '' #ssl_passphrase_command = '' #ssl_passphrase_command_supports_reload = off #------------------------------------------------------------------------------ # RESOURCE USAGE (except WAL) #------------------------------------------------------------------------------ # - Memory - shared_buffers = 128MB # min 128kB # (change requires restart) #huge_pages = try # on, off, or try # (change requires restart) #huge_page_size = 0 # zero for system default # (change requires restart) #temp_buffers = 8MB # min 800kB #max_prepared_transactions = 0 # zero disables the feature # (change requires restart) # Caution: it is not advisable to set max_prepared_transactions nonzero unless # you actively intend to use prepared transactions. #work_mem = 4MB # min 64kB #hash_mem_multiplier = 2.0 # 1-1000.0 multiplier on hash table work_mem #maintenance_work_mem = 64MB # min 1MB #autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem #logical_decoding_work_mem = 64MB # min 64kB #max_stack_depth = 2MB # min 100kB #shared_memory_type = mmap # the default is the first option # supported by the operating system: # mmap # sysv # windows # (change requires restart) dynamic_shared_memory_type = posix # the default is usually the first option # supported by the operating system: # posix # sysv # windows # mmap # (change requires restart) #min_dynamic_shared_memory = 0MB # (change requires restart) #vacuum_buffer_usage_limit = 256kB # size of vacuum and analyze buffer access strategy ring; # 0 to disable vacuum buffer access strategy; # range 128kB to 16GB # - Disk - #temp_file_limit = -1 # limits per-process temp file space # in kilobytes, or -1 for no limit # - Kernel Resources - #max_files_per_process = 1000 # min 64 # (change requires restart) # - Cost-Based Vacuum Delay - #vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables) #vacuum_cost_page_hit = 1 # 0-10000 credits #vacuum_cost_page_miss = 2 # 0-10000 credits #vacuum_cost_page_dirty = 20 # 0-10000 credits #vacuum_cost_limit = 200 # 1-10000 credits # - Background Writer - #bgwriter_delay = 200ms # 10-10000ms between rounds #bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables #bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round #bgwriter_flush_after = 512kB # measured in pages, 0 disables # - Asynchronous Behavior - #backend_flush_after = 0 # measured in pages, 0 disables #effective_io_concurrency = 1 # 1-1000; 0 disables prefetching #maintenance_io_concurrency = 10 # 1-1000; 0 disables prefetching #max_worker_processes = 8 # (change requires restart) #max_parallel_workers_per_gather = 2 # taken from max_parallel_workers #max_parallel_maintenance_workers = 2 # taken from max_parallel_workers #max_parallel_workers = 8 # maximum number of max_worker_processes that # can be used in parallel operations #parallel_leader_participation = on #old_snapshot_threshold = -1 # 1min-60d; -1 disables; 0 is immediate # (change requires restart) #------------------------------------------------------------------------------ # WRITE-AHEAD LOG #------------------------------------------------------------------------------ # - Settings - #wal_level = replica # minimal, replica, or logical # (change requires restart) #fsync = on # flush data to disk for crash safety # (turning this off can cause # unrecoverable data corruption) #synchronous_commit = on # synchronization level; # off, local, remote_write, remote_apply, or on #wal_sync_method = fsync # the default is the first option # supported by the operating system: # open_datasync # fdatasync (default on Linux and FreeBSD) # fsync # fsync_writethrough # open_sync #full_page_writes = on # recover from partial page writes #wal_log_hints = off # also do full page writes of non-critical updates # (change requires restart) #wal_compression = off # enables compression of full-page writes; # off, pglz, lz4, zstd, or on #wal_init_zero = on # zero-fill new WAL files #wal_recycle = on # recycle WAL files #wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers # (change requires restart) #wal_writer_delay = 200ms # 1-10000 milliseconds #wal_writer_flush_after = 1MB # measured in pages, 0 disables #wal_skip_threshold = 2MB #commit_delay = 0 # range 0-100000, in microseconds #commit_siblings = 5 # range 1-1000 # - Checkpoints - #checkpoint_timeout = 5min # range 30s-1d #checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0 #checkpoint_flush_after = 256kB # measured in pages, 0 disables #checkpoint_warning = 30s # 0 disables max_wal_size = 1GB min_wal_size = 80MB # - Prefetching during recovery - #recovery_prefetch = try # prefetch pages referenced in the WAL? #wal_decode_buffer_size = 512kB # lookahead window used for prefetching # (change requires restart) # - Archiving - #archive_mode = off # enables archiving; off, on, or always # (change requires restart) #archive_library = '' # library to use to archive a WAL file # (empty string indicates archive_command should # be used) #archive_command = '' # command to use to archive a WAL file # placeholders: %p = path of file to archive # %f = file name only # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' #archive_timeout = 0 # force a WAL file switch after this # number of seconds; 0 disables # - Archive Recovery - # These are only used in recovery mode. #restore_command = '' # command to use to restore an archived WAL file # placeholders: %p = path of file to restore # %f = file name only # e.g. 'cp /mnt/server/archivedir/%f %p' #archive_cleanup_command = '' # command to execute at every restartpoint #recovery_end_command = '' # command to execute at completion of recovery # - Recovery Target - # Set these only when performing a targeted recovery. #recovery_target = '' # 'immediate' to end recovery as soon as a # consistent state is reached # (change requires restart) #recovery_target_name = '' # the named restore point to which recovery will proceed # (change requires restart) #recovery_target_time = '' # the time stamp up to which recovery will proceed # (change requires restart) #recovery_target_xid = '' # the transaction ID up to which recovery will proceed # (change requires restart) #recovery_target_lsn = '' # the WAL LSN up to which recovery will proceed # (change requires restart) #recovery_target_inclusive = on # Specifies whether to stop: # just after the specified recovery target (on) # just before the recovery target (off) # (change requires restart) #recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID # (change requires restart) #recovery_target_action = 'pause' # 'pause', 'promote', 'shutdown' # (change requires restart) #------------------------------------------------------------------------------ # REPLICATION #------------------------------------------------------------------------------ # - Sending Servers - # Set these on the primary and on any standby that will send replication data. #max_wal_senders = 10 # max number of walsender processes # (change requires restart) #max_replication_slots = 10 # max number of replication slots # (change requires restart) #wal_keep_size = 0 # in megabytes; 0 disables #max_slot_wal_keep_size = -1 # in megabytes; -1 disables #wal_sender_timeout = 60s # in milliseconds; 0 disables #track_commit_timestamp = off # collect timestamp of transaction commit # (change requires restart) # - Primary Server - # These settings are ignored on a standby server. #synchronous_standby_names = '' # standby servers that provide sync rep # method to choose sync standbys, number of sync standbys, # and comma-separated list of application_name # from standby(s); '*' = all # - Standby Servers - # These settings are ignored on a primary server. #primary_conninfo = '' # connection string to sending server #primary_slot_name = '' # replication slot on sending server #hot_standby = on # "off" disallows queries during recovery # (change requires restart) #max_standby_archive_delay = 30s # max delay before canceling queries # when reading WAL from archive; # -1 allows indefinite delay #max_standby_streaming_delay = 30s # max delay before canceling queries # when reading streaming WAL; # -1 allows indefinite delay #wal_receiver_create_temp_slot = off # create temp slot if primary_slot_name # is not set #wal_receiver_status_interval = 10s # send replies at least this often # 0 disables #hot_standby_feedback = off # send info from standby to prevent # query conflicts #wal_receiver_timeout = 60s # time that receiver waits for # communication from primary # in milliseconds; 0 disables #wal_retrieve_retry_interval = 5s # time to wait before retrying to # retrieve WAL after a failed attempt #recovery_min_apply_delay = 0 # minimum delay for applying changes during recovery # - Subscribers - # These settings are ignored on a publisher. #max_logical_replication_workers = 4 # taken from max_worker_processes # (change requires restart) #max_sync_workers_per_subscription = 2 # taken from max_logical_replication_workers #max_parallel_apply_workers_per_subscription = 2 # taken from max_logical_replication_workers #------------------------------------------------------------------------------ # QUERY TUNING #------------------------------------------------------------------------------ # - Planner Method Configuration - #enable_async_append = on #enable_bitmapscan = on #enable_gathermerge = on #enable_hashagg = on #enable_hashjoin = on #enable_incremental_sort = on #enable_indexscan = on #enable_indexonlyscan = on #enable_material = on #enable_memoize = on #enable_mergejoin = on #enable_nestloop = on #enable_parallel_append = on #enable_parallel_hash = on #enable_partition_pruning = on #enable_partitionwise_join = off #enable_partitionwise_aggregate = off #enable_presorted_aggregate = on #enable_seqscan = on #enable_sort = on #enable_tidscan = on # - Planner Cost Constants - #seq_page_cost = 1.0 # measured on an arbitrary scale #random_page_cost = 4.0 # same scale as above #cpu_tuple_cost = 0.01 # same scale as above #cpu_index_tuple_cost = 0.005 # same scale as above #cpu_operator_cost = 0.0025 # same scale as above #parallel_setup_cost = 1000.0 # same scale as above #parallel_tuple_cost = 0.1 # same scale as above #min_parallel_table_scan_size = 8MB #min_parallel_index_scan_size = 512kB #effective_cache_size = 4GB #jit_above_cost = 100000 # perform JIT compilation if available # and query more expensive than this; # -1 disables #jit_inline_above_cost = 500000 # inline small functions if query is # more expensive than this; -1 disables #jit_optimize_above_cost = 500000 # use expensive JIT optimizations if # query is more expensive than this; # -1 disables # - Genetic Query Optimizer - #geqo = on #geqo_threshold = 12 #geqo_effort = 5 # range 1-10 #geqo_pool_size = 0 # selects default based on effort #geqo_generations = 0 # selects default based on effort #geqo_selection_bias = 2.0 # range 1.5-2.0 #geqo_seed = 0.0 # range 0.0-1.0 #enable_appendorpath = on # - Other Planner Options - #default_statistics_target = 100 # range 1-10000 #constraint_exclusion = partition # on, off, or partition #cursor_tuple_fraction = 0.1 # range 0.0-1.0 #from_collapse_limit = 8 #jit = on # allow JIT compilation #join_collapse_limit = 8 # 1 disables collapsing of explicit # JOIN clauses #plan_cache_mode = auto # auto, force_generic_plan or # force_custom_plan #recursive_worktable_factor = 10.0 # range 0.001-1000000 #------------------------------------------------------------------------------ # REPORTING AND LOGGING #------------------------------------------------------------------------------ # - Where to Log - #log_destination = 'stderr' # Valid values are combinations of # stderr, csvlog, jsonlog, syslog, and # eventlog, depending on platform. # csvlog and jsonlog require # logging_collector to be on. # This is used when logging to stderr: logging_collector = on # Enable capturing of stderr, jsonlog, # and csvlog into log files. Required # to be on for csvlogs and jsonlogs. # (change requires restart) # These are only used if logging_collector is on: log_directory = 'logss' # directory where log files are written, # can be absolute or relative to PGDATA log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern, # can include strftime() escapes #log_file_mode = 0600 # creation mode for log files, # begin with 0 to use octal notation #log_rotation_age = 1d # Automatic rotation of logfiles will # happen after that time. 0 disables. #log_rotation_size = 10MB # Automatic rotation of logfiles will # happen after that much log output. # 0 disables. #log_truncate_on_rotation = off # If on, an existing log file with the # same name as the new log file will be # truncated rather than appended to. # But such truncation only occurs on # time-driven rotation, not on restarts # or size-driven rotation. Default is # off, meaning append to existing files # in all cases. # These are relevant when logging to syslog: #syslog_facility = 'LOCAL0' #syslog_ident = 'postgres' #syslog_sequence_numbers = on #syslog_split_messages = on # This is only relevant when logging to eventlog (Windows): # (change requires restart) #event_source = 'PostgreSQL' # - When to Log - #log_min_messages = warning # values in order of decreasing detail: # debug5 # debug4 # debug3 # debug2 # debug1 # info # notice # warning # error # log # fatal # panic #log_min_error_statement = error # values in order of decreasing detail: # debug5 # debug4 # debug3 # debug2 # debug1 # info # notice # warning # error # log # fatal # panic (effectively off) log_min_duration_statement = 5000 # -1 is disabled, 0 logs all statements # and their durations, > 0 logs only # statements running at least this number # of milliseconds #log_min_duration_sample = -1 # -1 is disabled, 0 logs a sample of statements # and their durations, > 0 logs only a sample of # statements running at least this number # of milliseconds; # sample fraction is determined by log_statement_sample_rate #log_statement_sample_rate = 1.0 # fraction of logged statements exceeding # log_min_duration_sample to be logged; # 1.0 logs all such statements, 0.0 never logs #log_transaction_sample_rate = 0.0 # fraction of transactions whose statements # are logged regardless of their duration; 1.0 logs all # statements from all transactions, 0.0 never logs #log_startup_progress_interval = 10s # Time between progress updates for # long-running startup operations. # 0 disables the feature, > 0 indicates # the interval in milliseconds. # - What to Log - #debug_print_parse = off #debug_print_rewritten = off #debug_print_plan = off #debug_pretty_print = on #log_autovacuum_min_duration = 10min # log autovacuum activity; # -1 disables, 0 logs all actions and # their durations, > 0 logs only # actions running at least this number # of milliseconds. #log_checkpoints = on #log_connections = off #log_disconnections = off log_duration = on #log_error_verbosity = default # terse, default, or verbose messages #log_hostname = off #log_line_prefix = '%m [%p] ' # special values: # %a = application name # %u = user name # %d = database name # %r = remote host and port # %h = remote host # %b = backend type # %p = process ID # %P = process ID of parallel group leader # %t = timestamp without milliseconds # %m = timestamp with milliseconds # %n = timestamp with milliseconds (as a Unix epoch) # %Q = query ID (0 if none or not computed) # %i = command tag # %e = SQL state # %c = session ID # %l = session line number # %s = session start timestamp # %v = virtual transaction ID # %x = transaction ID (0 if none) # %q = stop here in non-session # processes # %% = '%' # e.g. '<%u%%%d> ' #log_lock_waits = off # log lock waits >= deadlock_timeout #log_recovery_conflict_waits = off # log standby recovery conflict waits # >= deadlock_timeout #log_parameter_max_length = -1 # when logging statements, limit logged # bind-parameter values to N bytes; # -1 means print in full, 0 disables #log_parameter_max_length_on_error = 0 # when logging an error, limit logged # bind-parameter values to N bytes; # -1 means print in full, 0 disables log_statement = 'all' # none, ddl, mod, all #log_replication_commands = off #log_temp_files = -1 # log temporary files equal or larger # than the specified size in kilobytes; # -1 disables, 0 logs all temp files log_timezone = 'Asia/Yekaterinburg' # - Process Title - #cluster_name = '' # added to process titles if nonempty # (change requires restart) #update_process_title = on #------------------------------------------------------------------------------ # STATISTICS #------------------------------------------------------------------------------ # - Cumulative Query and Index Statistics - #track_activities = on #track_activity_query_size = 1024 # (change requires restart) #track_counts = on #track_io_timing = off #track_wal_io_timing = off #track_functions = none # none, pl, all #stats_fetch_consistency = cache # cache, none, snapshot # - Monitoring - #compute_query_id = auto #log_statement_stats = off #log_parser_stats = off #log_planner_stats = off #log_executor_stats = off #------------------------------------------------------------------------------ # AUTOVACUUM #------------------------------------------------------------------------------ #autovacuum = on # Enable autovacuum subprocess? 'on' # requires track_counts to also be on. #autovacuum_max_workers = 3 # max number of autovacuum subprocesses # (change requires restart) #autovacuum_naptime = 1min # time between autovacuum runs #autovacuum_vacuum_threshold = 50 # min number of row updates before # vacuum #autovacuum_vacuum_insert_threshold = 1000 # min number of row inserts # before vacuum; -1 disables insert # vacuums #autovacuum_analyze_threshold = 50 # min number of row updates before # analyze #autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum #autovacuum_vacuum_insert_scale_factor = 0.2 # fraction of inserts over table # size before insert vacuum #autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze #autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum # (change requires restart) #autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age # before forced vacuum # (change requires restart) #autovacuum_vacuum_cost_delay = 2ms # default vacuum cost delay for # autovacuum, in milliseconds; # -1 means use vacuum_cost_delay #autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for # autovacuum, -1 means use # vacuum_cost_limit #------------------------------------------------------------------------------ # CLIENT CONNECTION DEFAULTS #------------------------------------------------------------------------------ # - Statement Behavior - #client_min_messages = notice # values in order of decreasing detail: # debug5 # debug4 # debug3 # debug2 # debug1 # log # notice # warning # error #search_path = '"$user", public' # schema names #row_security = on #default_table_access_method = 'heap' #default_tablespace = '' # a tablespace name, '' uses the default #default_toast_compression = 'pglz' # 'pglz' or 'lz4' #temp_tablespaces = '' # a list of tablespace names, '' uses # only default tablespace #check_function_bodies = on #default_transaction_isolation = 'read committed' #default_transaction_read_only = off #default_transaction_deferrable = off #session_replication_role = 'origin' #statement_timeout = 0 # in milliseconds, 0 is disabled #lock_timeout = 0 # in milliseconds, 0 is disabled #idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled #idle_session_timeout = 0 # in milliseconds, 0 is disabled #vacuum_freeze_table_age = 150000000 #vacuum_freeze_min_age = 50000000 #vacuum_failsafe_age = 1600000000 #vacuum_multixact_freeze_table_age = 150000000 #vacuum_multixact_freeze_min_age = 5000000 #vacuum_multixact_failsafe_age = 1600000000 #bytea_output = 'hex' # hex, escape #xmlbinary = 'base64' #xmloption = 'content' #gin_pending_list_limit = 4MB #createrole_self_grant = '' # set and/or inherit # - Locale and Formatting - datestyle = 'iso, dmy' #intervalstyle = 'postgres' timezone = 'Asia/Yekaterinburg' #timezone_abbreviations = 'Default' # Select the set of available time zone # abbreviations. Currently, there are # Default # Australia (historical usage) # India # You can create your own file in # share/timezonesets/. #extra_float_digits = 1 # min -15, max 3; any value >0 actually # selects precise output mode #client_encoding = sql_ascii # actually, defaults to database # encoding # These settings are initialized by initdb, but they can be changed. lc_messages = 'ru_RU.UTF-8' # locale for system error message # strings lc_monetary = 'ru_RU.UTF-8' # locale for monetary formatting lc_numeric = 'ru_RU.UTF-8' # locale for number formatting lc_time = 'ru_RU.UTF-8' # locale for time formatting #icu_validation_level = warning # report ICU locale validation # errors at the given level # default configuration for text search default_text_search_config = 'pg_catalog.russian' # - Shared Library Preloading - #local_preload_libraries = '' #session_preload_libraries = '' #shared_preload_libraries = '' # (change requires restart) #jit_provider = 'llvmjit' # JIT library to use # - Other Defaults - #dynamic_library_path = '$libdir' #gin_fuzzy_search_limit = 0 #------------------------------------------------------------------------------ # LOCK MANAGEMENT #------------------------------------------------------------------------------ #deadlock_timeout = 1s #max_locks_per_transaction = 64 # min 10 # (change requires restart) #max_pred_locks_per_transaction = 64 # min 10 # (change requires restart) #max_pred_locks_per_relation = -2 # negative values mean # (max_pred_locks_per_transaction # / -max_pred_locks_per_relation) - 1 #max_pred_locks_per_page = 2 # min 0 #------------------------------------------------------------------------------ # VERSION AND PLATFORM COMPATIBILITY #------------------------------------------------------------------------------ # - Previous PostgreSQL Versions - #array_nulls = on #backslash_quote = safe_encoding # on, off, or safe_encoding #escape_string_warning = on #lo_compat_privileges = off #quote_all_identifiers = off #standard_conforming_strings = on #synchronize_seqscans = on # - Other Platforms and Clients - #transform_null_equals = off #------------------------------------------------------------------------------ # ERROR HANDLING #------------------------------------------------------------------------------ #exit_on_error = off # terminate session on any error? #restart_after_crash = on # reinitialize after backend crash? #data_sync_retry = off # retry or panic on failure to fsync # data? # (change requires restart) #recovery_init_sync_method = fsync # fsync, syncfs (Linux 5.8+) #------------------------------------------------------------------------------ # CONFIG FILE INCLUDES #------------------------------------------------------------------------------ # These options allow settings to be loaded from files other than the # default postgresql.conf. Note that these are directives, not variable # assignments, so they can usefully be given more than once. #include_dir = '...' # include files ending in '.conf' from # a directory, e.g., 'conf.d' #include_if_exists = '...' # include file only if it exists #include = '...' # include file #------------------------------------------------------------------------------ # CUSTOMIZED OPTIONS #------------------------------------------------------------------------------ # Add settings for extensions here listen_addresses = '*' shared_buffers = 64359MB # 25% of RAM temp_buffers = 128MB max_files_per_process = 10000 max_parallel_workers_per_gather = 0 max_parallel_maintenance_workers = 6 # Количество CPU/4, минимум 2, максимум 6 commit_delay = 1000 max_wal_size = 40GB min_wal_size = 10GB checkpoint_timeout = 15min effective_cache_size = 193077MB # 75% of RAM work_mem=512MB maintenance_work_mem = 1024MB from_collapse_limit = 8 join_collapse_limit = 8 autovacuum_max_workers = 16 # Количество CPU/2, минимум 2 vacuum_cost_limit = 1600 # 100* autovacuum_max_workers autovacuum_naptime = 20s autovacuum_vacuum_scale_factor = 0.01 autovacuum_analyze_scale_factor = 0.005 max_locks_per_transaction = 256 escape_string_warning = off standard_conforming_strings = off shared_preload_libraries = 'online_analyze, plantuner' online_analyze.threshold = 50 online_analyze.scale_factor = 0.1 online_analyze.enable = on online_analyze.verbose = off online_analyze.min_interval = 10000 online_analyze.table_type = 'temporary' plantuner.fix_empty_table = on |
|||
66
Fram
15.02.24
✎
12:15
|
А железо?
|
|||
67
Zycman
15.02.24
✎
12:21
|
2 проца по 16 потоков
256 гигов оперативы рейд из 2 ssd samsung nvme на 3.2 ТБ суммарно |
|||
68
Garykom
гуру
15.02.24
✎
12:55
|
Есть подозрения что затык в дисковой системе
|
|||
69
Garykom
гуру
15.02.24
✎
12:27
|
#random_page_cost = 4.0 # same scale as above
random_page_cost = 1.5-2.0 для RAID, 1.1-1.3 для SSD
Стоимость чтения рандомной страницы, на которую будет опираться оптимизатор (по-умолчанию 4). Практическое значение параметра должно зависеть от «seek time» дисковой системы: чем он меньше, тем меньше должно быть значение random_page_cost (но не менее 1.0) . Излишне большое значение параметра увеличивает склонность PostgreSQL к выбору планов с сканированием всей таблицы (PostgreSQL считает, что дешевле последовательно читать всю таблицу, чем рандомно индекс). Оценка стоимости последовательного чтения делается, в свою очередь, с учетом параметра seq_page_cost, который равен по умолчанию 1. https://its.1c.ru/db/metod8dev/content/5866/hdoc |
|||
70
Garykom
гуру
15.02.24
✎
12:29
|
(69)+ для NVMe смело ставь
random_page_cost = 1.1 |
|||
71
arsik
гуру
15.02.24
✎
12:44
|
(67) 2 проца? Возможно стандартное ядро не подойдет.
В архитектуре процессоры разбиты на 2 ноды? Отключите 1 процессор и протестируйте снова |
|||
72
Zycman
15.02.24
✎
12:51
|
(71) Ну судя по синтетическим тестам, система корректно работает с процессорами, тот же гилев например, выдает нормальный результат. графики нагрузки, тоже отображают результат, аналогичный тестам на windows server
|
|||
73
ansh15
15.02.24
✎
12:53
|
Включить(временно) auto_explain
shared_preload_libraries = 'online_analyze, plantuner, auto_exlplain' auto_explain.log_min_duration = '10s' auto_explain.log_analyze = true Посмотреть что в плане запроса у которого duration: 12905.457 ms |
|||
74
arsik
гуру
15.02.24
✎
13:31
|
(72) Так синтетика не подразумевает нагрузку на оперативку. В многопроцессорных архитектурах память самое сложное в настройке.
|
|||
75
Hmster
15.02.24
✎
14:20
|
Попробуй поиграться с параметром effective_cache_size
Сталкивался, что иногда его надо ставить значительно меньше |
|||
76
Djelf
15.02.24
✎
14:54
|
(0) Может планировщик работы процессора неверно работает...
Попробуй поменять с помощью cpufreq-set. А процы точно на максимуме работают? Помониторь. #!/bin/bash watch -n1 "cat /proc/cpuinfo | grep \"MHz\"" Кстати, а analyze на базе запускали? /tmp как смонтирован? памяти у тебя много, монтируй в tmpfs, кроме повышения скорости еще и износ дисков значительно уменьшится. stats_temp_directory тоже стоит на tmpfs перевести, ну потеряется что-то при перезагрузке, ну и хрен с ним, не уверен насчет 15-16 PGSQL, но 14й в этот каталог пишет очень активно. Немного прироста еще дает указание сервера не как localhost, а как /tmp Но это всего 5% наверное, хотя даже столько уже хорошо.
|
|||
77
arsik
гуру
15.02.24
✎
14:52
|
||||
78
Djelf
15.02.24
✎
15:05
|
(77) Это все проверять надо, причем последовательно, это очень долго...
У меня на 14 PGSQL включение geqo, которое должно вроде бы ускорять запросы, замедляет проведение раз в 10. Ага, а вдруг он в 15 включен по-умолчанию? (0) а если попровать geqo=off |
|||
79
Garykom
гуру
15.02.24
✎
15:05
|
(76)
указание сервера не как localhost, а как /tmp
А суть этого в чем? Вместо через сеть начинает как то иначе 1С с PgSQL общаться? |
|||
80
arsik
гуру
15.02.24
✎
15:08
|
(78) Для начала достаточно NUMA отключить и посмотреть на результат.
|
|||
81
Djelf
15.02.24
✎
15:14
|
(79) Да, так работает иначе. Это передача данных напрямую через сокет/память, забыл как в MSSQL это называется. Это работает, и это проверено.
|
|||
82
arsik
гуру
15.02.24
✎
15:39
|
(81) Почему именно /tmp? Возможно он много где использоваться может.
Может лучше сделать свой - уникальный симлинк? |
|||
83
Garykom
гуру
15.02.24
✎
15:55
|
||||
84
Djelf
15.02.24
✎
16:29
|
(83) Жутковатое объяснение... Вообще ни чёрта не понятно, слишком заумно! Но так это работает и работает быстрее.
|
|||
85
edwin
16.02.24
✎
10:51
|
online_analyze.enable = off
|
|||
86
arsik
гуру
16.02.24
✎
11:27
|
(83) ну так в сервисе системд или в конфе постгри лучше симлинк уникальным сделать
Интересно что будет если сделать cp data.qwerty /tmp |
|||
87
nejtron
16.02.24
✎
13:42
|
(65) У вас shared_buffers дважды записан:
# - Memory - shared_buffers = 128MB # min 128kB # CUSTOMIZED OPTIONS #----------------------------------------------------------- # Add settings for extensions here listen_addresses = '*' shared_buffers = 64359MB # 25% of RAM |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |