Имя: Пароль:
1C
 
В чем может быть причина медленной записи документов в базу на Постгрес?
,
0 Mihasya
 
08.10.24
03:54
Ситуация такая, в связи с импортнозамещением, нужно переходить на Постгрес...
Собрали тестовый сервер, 256Гигов оперативы, 14 ядер, диски ссд, в общем достаточно мощный!
Так вот, решили потестить скорость записи документов на конфигурации ЗУП 3.1
Тест заключается в следующем: тупо в БД перезаписываются документы Больничный лист, берем какое-то количество документов за период, замеряем время начала записи документов и окончание, делим на количество документов перезаписанных, получаем среднее количество записи документов в секунду.
Результаты такие, 1,5-1,7 документа в секунду: Всего обработано 153 документов БольничныйЛист (Скорость обработки 1,51 док./сек., время отбработки 101,474 сек.)

Версия Постгреса 16 Про, система Astra Linux 1.7 x86-64

Таже самая конфигурация ЗУП, на сервере SQL перезаписывает документы в разы быстрее! Всего обработано 153 документов БольничныйЛист (Скорость обработки 25,65 док./сек., время отбработки 5,965 сек.)

Причем сервер где крутится SQL он на винде 2012 и менее мощный, оперативы 72Гига, 12 процов, плюс ко всему он еще и рабочий, т.е. на нем помимо этой тестовой ЗУП крутятся еще и рабочая ЗУП и еще несколько баз БП...

Оба сервера на виртуалке, даже ставили на виндовый сервер Постгрес 16 от 1С, ну думали настройки там прям под 1С заточены и может диски на виндовом сервере шустрее... Неа, по скорости записи тест даже чуть меньше показывает...

Еще вот что заметил, скорость записи не зависит от скольких пользователей запущена обработка, по началу запускал только от одного, потом параллельно от трех, правда первые два запуска на Постгрес у третьего пользователя вываливался конфликт блокировок и обработки работали только от двух пользователей одновременной (скорость та же 1,5 док/сек), после стали от трех, скорость осталась та же 1,5 док/сек, а вот на SQL первые пару запусков конфликта блокировок не было, но скорость была при первом запуске от троих пользователей 0,7д/с, на втором запуске 1,7д/с, а после стала 25-27 д/с!!! не знаю почему первые два раза так медленно, может сервер был перегружен (он же рабочий)

Настройки Постгреса меняли, включали/выключали автовакуумы, увеличивали/уменьшали буферы и т.д., особой разницы вообще не почувствовали (((

Так вот вопрос, в какую сторону копать?
1 breezee
 
08.10.24
06:43
А код полностью типовой?
2 Mihasya
 
08.10.24
07:39
(1) Код чего?
3 breezee
 
08.10.24
08:04
(2) Код конфигурации
4 Волшебник
 
08.10.24
08:04
(0) И кто же там будет вводить тысячу больничных? Плохой тест!
5 d_Fyodor
 
08.10.24
09:37
Ну чистый постгрес не взлетит по любому. Ставить нужно от 1С и необязательно виндовый.
А кроме того, когда качаете с 1С постгрес, потрудитесь посомтреть под какую платформу он заточен, например 16 постгрес от 1С  не ниже 8.3.22.2501, 8.3.23.2144, 8.3.24.1528, 8.3.25.1257
Ну и настраивать надо постгрес под существующие размеры оперативки и т.д. А не только автовакуум врубать/отрубать...
6 Krendel
 
08.10.24
09:35
(5) легко взлетает при наличии грамотных админов субд.

Я это реальными глазами видел в 13 году, когда про оптимизацию под другие субд никто даже не помышлял.
7 Eiffil123
 
08.10.24
09:39
(6) с бесплатным постгрессом нужно покупать платного сопровождающего
8 Krendel
 
08.10.24
10:30
(7) да я видел как платные сопровождающие настроили мску в 2 раза медленне настроек поумолчанию и постили статьи в хабр про высоконагруженные системы
9 Krendel
 
08.10.24
10:31
Оборудование должно быть настроено профессионалами и обслужено, а держать ли их в штате или платить за аутсорс решает каждый
10 H A D G E H O G s
 
08.10.24
12:42
(9) Да, гайки в сервере должны быть закручены с усилием в 20 ньютонов.
11 osa1C
 
08.10.24
13:43
(10) 20 ньютонов это уже для самолетов
12 asady
 
08.10.24
17:18
(0) postgresql.conf хотя бы показал.
13 Feanor
 
08.10.24
19:28
(0) а сервер 1С один и тот же?
14 novichok79
 
08.10.24
19:58
(0) explain analyze пробовал делать?
вообще есть такое
https://www.postgresql.org/docs/current/pgstatstatements.html
и да, Linux предпочтительнее для postgresql, Linux быстрее Windows работает с кучей мелких файликов, на которых работает PostgreSQL.
у нас как-то прирост x2 по записи был после того как PostgreSQL переставили на Linux'овую тачку с аналогичным конфигом.


PS: и да, log_statement=all надо сделать разумеется
https://postgresqlco.nf/doc/en/param/log_statement/
15 Chai Nic
 
08.10.24
19:48
(0) "тупо в БД перезаписываются документы "
А тупо ли? Может там при записи выполняется некий алгоритм с запросами к базе? А в запросах - соединение с виртуальной таблицей. Со всеми вытекающими для постгреса..
16 Asmody
 
08.10.24
19:52
17 timurhv
 
08.10.24
19:55
>по началу запускал только от одного, потом параллельно от трех, правда первые два запуска на Постгрес у третьего пользователя вываливался конфликт блокировок и обработки работали только от двух пользователей одновременной

>а вот на SQL первые пару запусков конфликта блокировок не было, но скорость была при первом запуске от троих пользователей 0,7д/с, на втором запуске 1,7д/с, а после стала 25-27 д/с!!! не знаю почему первые два раза так медленно, может сервер был перегружен (он же рабочий)

Правьте запросы, убирайте группировки подзапросов и соединения с подзапросами.
18 Чеширский
 
08.10.24
20:52
Что значит "Правьте запросы" ?
Есть две СУБД, и есть "скриптовый код", которому должно быть без разницы, чем там эти СУБД занимаются. Если одна из них на голову выше - просто напишите об это и не морочьте людям голову. Так же, если этот "Скриптовый код" оптимизрован только под одну СУБД, а под друю "для галочки" -  то просто напишите это и не делайте мине нервы :)
19 timurhv
 
08.10.24
23:00
(18) Какой скриптовый код в ЗУП? Там все построено на транзакциях, выполнении запросов и отмене транзакции.
Правильный ответ в вебинарах по ссылке (16), там весь процесс перехода на Linux + PG разложен.

P.S: глянул документ, перепровел 100 шт, на 1 документ в один и тот же регистр сведений записываются движения 5 раз и 24 раза выполняются запросы к регистрам. Не думаю что MSSQL перепроводит 25-27 документов в таком режиме. Сравнение необъективное.
20 Mihasya
 
09.10.24
01:00
(3) Типовой
21 Mihasya
 
09.10.24
01:01
(4) Вопрос не в этом, в скуле в 16 раз быстрее при том же тесте, почему?! вот в чем вопрос...
22 Волшебник
 
09.10.24
01:02
(21) импортнозамещение требует
23 Mihasya
 
09.10.24
01:03
(12)
Подробности
autovacuum = on
autovacuum_analyze_scale_factor = 0.005
autovacuum_max_workers = 4
autovacuum_max_workers = 5 # Количество CPU/2, минимум 2
autovacuum_naptime = 20s
autovacuum_vacuum_scale_factor = 0.01
bgwriter_delay = 20ms                 # 10-10000ms between rounds
bgwriter_lru_maxpages = 400            # max buffers written/round, 0 disables
bgwriter_lru_multiplier = 4.0          # 0-10.0 multiplier on buffers scanned/round
checkpoint_completion_target = 0.9
checkpoint_completion_target = 0.9
checkpoint_timeout = 15min
commit_delay = 1000
commit_delay = 1000
commit_siblings = 5
cpu_index_tuple_cost = 0.005
cpu_operator_cost = 0.0025
cpu_tuple_cost = 0.01
datestyle = 'iso, dmy'
default_statistics_target = 1000 # from 1000 to 10000
default_statistics_target = 500
default_text_search_config = 'pg_catalog.russian'
dynamic_shared_memory_type = posix
effective_cache_size = 192GB
effective_cache_size = 192GB
effective_cache_size = 48235MB # 75% of RAM
effective_io_concurrency = 200
effective_io_concurrency = 200
escape_string_warning = off
escape_string_warning = off
escape_string_warning = off
from_collapse_limit = 8
fsync = on
join_collapse_limit = 8
lc_messages = 'ru_RU.UTF-8'
lc_monetary = 'ru_RU.UTF-8'
lc_numeric = 'ru_RU.UTF-8'
lc_time = 'ru_RU.UTF-8'
listen_addresses = '*'
log_line_prefix= '%m [%p]: [%l-1] db=%d, user=%u, app=%a, dient=%r'
log_rotation_age = 1d
log_timezone = 'Asia/Magadan'
log_truncate_on_rotation = on
logging_collector = on # Enable capturing of stderr, jsonlog,
maintenance_work_mem = 1024MB
maintenance_work_mem = 2GB
maintenance_work_mem = 2GB
max_connections = 100
max_connections = 1000
max_connections = 500
max_files_per_process = 10000
max_locks_per_transaction = 256
max_locks_per_transaction = 256
max_parallel_maintenance_workers = 2 # Количество CPU/4, минимум 2, максимум 6
max_parallel_maintenance_workers = 4
max_parallel_maintenance_workers = 4
max_parallel_workers = 14
max_parallel_workers = 14
max_parallel_workers_per_gather = 0
max_parallel_workers_per_gather = 7
max_parallel_workers_per_gather = 7
max_wal_size = 16GB
max_wal_size = 16GB
max_wal_size = 16GB
max_wal_size = 4GB
max_worker_processes = 14
max_worker_processes = 14
min_wal_size = 2GB
min_wal_size = 4GB
min_wal_size = 4GB
min_wal_size = 80MB
online_analyze.enable = on
online_analyze.enable = on
online_analyze.local_tracking = 'on'
online_analyze.min_interval = 10000
online_analyze.scale_factor = 0.1
online_analyze.table_type = 'temporary'
online_analyze.table_type = 'temporary'
online_analyze.threshold = 50
online_analyze.verbose = off
online_analyze.verbose = 'off'
password_encryption = md5
plantuner.fix_empty_table = on
plantuner.fix_empty_table = 'on'  
port = 5432 # (change requires restart)
random_page_cost = 0.5
random_page_cost = 1.1
random_page_cost = 4.0
row_security = off
seq_page_cost = 0.5
seq_page_cost = 1.0
shared_buffers = 128MB
shared_buffers = 16078MB # 25% of RAM
shared_buffers = 64GB
shared_buffers = 64GB
shared_preload_libraries = 'online_analyze, plantuner'
shared_preload_libraries = 'online_analyze, plantuner'
standard_conforming_strings = off
standard_conforming_strings = off
standard_conforming_strings = off
synchronous_commit = off
temp_buffers = 128MB
temp_buffers = 32MB
temp_buffers = 512MB
timezone = 'Asia/Magadan'
vacuum_cost_limit = 500 # 100* autovacuum_max_workers
wal_buffers = 16MB
wal_buffers = 16MB
work_mem = 32MB
work_mem = 512MB
work_mem = 9586kB
work_mem=512MB


Это текущий, но конфиг всяко разно переписывали, результат ваще нулевой ((
24 Mihasya
 
09.10.24
01:03
(14) Делал, никак не помогло
25 Волшебник
 
09.10.24
01:03
(23) Вам что-то непонятно в слове "импортнозамещение"?
26 Mihasya
 
09.10.24
01:04
(15) Записываю с ОбменДанными.Загрузка = Истина, и см. (21)
27 Волшебник
 
09.10.24
01:04
(26) Перестаньте тупить!
29 Mihasya
 
09.10.24
01:21
(27) Если есть что сказать по делу, говори, нет, скройся!