Postgresql 9.0 и 1c 8.3

Модератор: Дмитрий Юхтимовский

Postgresql 9.0 и 1c 8.3

Сообщение Чирков Антон » 02 дек 2015, 13:37

Здравствуйте, имеется проблема с сильными "тормозами" в 1с. Проведение документов может заставить базу зависнуть на пару минут или зависнуть так, что снимать диспечером задач.

---О железе---
ЦП- Intel xeon x3430 2.4 GHz
ОЗУ - 32 ГБ
Диск: WD Red 2TB в рейд массиве "зеркало"

---О софте---
ОС Windows server2008r2, которая крутится на proxmox. Postgresql 9.0 и 1c 8.3.

---Подробнее о проблеме---
Второй день ковыряюсь в конфигах postgresql, тестирую результаты изменений через TPC+G1C. Мой результат с 3.81 поднялся до 7.56 на данный момент, которого для работы 40-50 пользователей не достаточно.
Базы разные по размеру - от маленьких на 50мб, до гигантских в 22гб.

---Испробовано---
1) переиндексация таблиц
2) Включен autovacuum
3) Оптимизация postgresql.conf - увеличение effective_cache_size до 10 GB, work_mem до 57283kB, maintenance_work_mem до 1920MB, shared_buffers до 512MB. Игра с настройками адекватного прироста производительности не дает.
Функцию fsync включать запретили для безопасности данных.

Что можно ещё сделать с данной проблемой и где искать первопричины таких зависаний.
Чирков Антон
 
Сообщений: 5
Зарегистрирован: 02 дек 2015, 13:12
Откуда: Россия, Челябинск

локализовать: дело в субд или во внешней среде

Сообщение Гилёв Вячеслав » 03 дек 2015, 15:18

Чирков Антон писал(а):Здравствуйте, имеется проблема с сильными "тормозами" в 1с. Проведение документов может заставить базу зависнуть на пару минут или зависнуть так, что снимать диспечером задач.

---О железе---
ЦП- Intel xeon x3430 2.4 GHz
ОЗУ - 32 ГБ
Диск: WD Red 2TB в рейд массиве "зеркало"

---О софте---
ОС Windows server2008r2, которая крутится на proxmox. Postgresql 9.0 и 1c 8.3.

---Подробнее о проблеме---
Второй день ковыряюсь в конфигах postgresql, тестирую результаты изменений через TPC+G1C. Мой результат с 3.81 поднялся до 7.56 на данный момент, которого для работы 40-50 пользователей не достаточно.
Базы разные по размеру - от маленьких на 50мб, до гигантских в 22гб.

---Испробовано---
1) переиндексация таблиц
2) Включен autovacuum
3) Оптимизация postgresql.conf - увеличение effective_cache_size до 10 GB, work_mem до 57283kB, maintenance_work_mem до 1920MB, shared_buffers до 512MB. Игра с настройками адекватного прироста производительности не дает.
Функцию fsync включать запретили для безопасности данных.

Что можно ещё сделать с данной проблемой и где искать первопричины таких зависаний.


А со скулем тест чего показывает?
Гилёв Вячеслав
 
Сообщений: 2264
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Postgresql 9.0 и 1c 8.3

Сообщение Dmitry Vasiliyev » 03 дек 2015, 15:24

Привет!
У вас KVM виртуализация? Что у вас с дисками, каким образом они предоставлены для виртуалки?
Попробуйте выделить RAW-девайс напрямую, конкретно под базу PostrgreSQL, без прослоек виртулизаций.

На втором этапе: скоро заканчивается поддержка PostgreSQL 9.2 а у вас все еще 9.0 :)
Сдампите средствами 1С и установите PostgreSQL 9.4, там есть масса улучшений на производительность.
В сборке http://www.postgrespro.ru/products/1c_build есть дополнительные патчи, которые повышают отказоустойчивость.

И да. fsync нужно ОТКЛЮЧАТЬ если вы хотите ПОТЕРЯТЬ данные :)
Dmitry Vasiliyev
 
Сообщений: 9
Зарегистрирован: 16 сен 2015, 19:45

Re: Postgresql 9.0 и 1c 8.3

Сообщение Чирков Антон » 07 дек 2015, 08:57

Dmitry Vasiliyev писал(а):Привет!
У вас KVM виртуализация? Что у вас с дисками, каким образом они предоставлены для виртуалки?
Попробуйте выделить RAW-девайс напрямую, конкретно под базу PostrgreSQL, без прослоек виртулизаций.

На втором этапе: скоро заканчивается поддержка PostgreSQL 9.2 а у вас все еще 9.0 :)
Сдампите средствами 1С и установите PostgreSQL 9.4, там есть масса улучшений на производительность.
В сборке http://www.postgrespro.ru/products/1c_build есть дополнительные патчи, которые повышают отказоустойчивость.

И да. fsync нужно ОТКЛЮЧАТЬ если вы хотите ПОТЕРЯТЬ данные :)

Решил пока перенести для теста postgresql с базами на физический сервер. Тестирую, прирост чувствуется, но не значительный, поставил postgresql 9.4

Про fsync ошибся, он включен :)
Чирков Антон
 
Сообщений: 5
Зарегистрирован: 02 дек 2015, 13:12
Откуда: Россия, Челябинск

Re: Postgresql 9.0 и 1c 8.3

Сообщение Dmitry Vasiliyev » 07 дек 2015, 15:20

А конфижек покажите? :)
Dmitry Vasiliyev
 
Сообщений: 9
Зарегистрирован: 16 сен 2015, 19:45

Re: Postgresql 9.0 и 1c 8.3

Сообщение Чирков Антон » 08 дек 2015, 05:58

Dmitry Vasiliyev писал(а):А конфижек покажите? :)

файл прикрепить нельзя, но если речь про конфиг postgresql - вот он (всё закомментированное вырезал):
Код: выделить все
listen_addresses = '*'         # what IP address(es) to listen on;
port = 5432            # (change requires restart)
max_connections = 100         # (change requires restart)
shared_buffers = 512MB         # min 128kB
#temp_buffers = 8MB         
work_mem = 28641kB            
maintenance_work_mem = 2048MB      # min 1MB
shared_preload_libraries = '$libdir/plugins/plugin_debugger.dll'      # (change requires restart)

fsync = on            # turns forced synchronization on or off
synchronous_commit = on      # immediate fsync at commit
wal_sync_method = fsync      # the default is the first option
               
wal_buffers = 16MB         # min 32kB
   
effective_cache_size = 7680MB
log_destination = 'stderr'      # Valid values are combinations of
logging_collector = on      # Enable capturing of stderr and csvlog
log_line_prefix = '%t '         # special values:
               
autovacuum = on         # Enable autovacuum subprocess?  'on'
log_autovacuum_min_duration = -1   # -1 disables, 0 logs all actions and
autovacuum_max_workers = 3      # max number of autovacuum subprocesses
autovacuum_naptime = 1min      # time between autovacuum runs
autovacuum_vacuum_threshold = 50   # min number of row updates before
#autovacuum_analyze_threshold = 50   # min number of row updates before
autovacuum_vacuum_scale_factor = 0.2   # fraction of table size before vacuum
autovacuum_analyze_scale_factor = 0.1   # fraction of table size before analyze
autovacuum_freeze_max_age = 200000000   # maximum XID age before forced vacuum
autovacuum_vacuum_cost_delay = 20ms   # default vacuum cost delay for
autovacuum_vacuum_cost_limit = -1   # default vacuum cost limit for
 datestyle = 'iso, dmy'

lc_messages = 'Russian_Russia'         # locale for system error message
lc_monetary = 'Russian_Russia'         # locale for monetary formatting
lc_numeric = 'Russian_Russia'         # locale for number formatting
lc_time = 'Russian_Russia'            # locale for time formatting


default_text_search_config = 'pg_catalog.russian'
max_locks_per_transaction = 150      # min 10
escape_string_warning = off
Чирков Антон
 
Сообщений: 5
Зарегистрирован: 02 дек 2015, 13:12
Откуда: Россия, Челябинск

Re: Postgresql 9.0 и 1c 8.3

Сообщение Dmitry Vasiliyev » 08 дек 2015, 16:03

work_mem - побольше Full memory / max_connections,
autovacuum пооактивнее (больше воркеров, меньше cost)

покажите bloat с рабочей базы?
Код: выделить все
\set bloat 'SELECT tablename as table_name, ROUND(CASE WHEN otta=0 THEN 0.0 ELSE sml.relpages/otta::numeric END,1) AS table_bloat, CASE WHEN relpages < otta THEN ''0'' ELSE pg_size_pretty((bs*(sml.relpages-otta)::bigint)::bigint) END AS table_waste, iname as index_name, ROUND(CASE WHEN iotta=0 OR ipages=0 THEN 0.0 ELSE ipages/iotta::numeric END,1) AS index_bloat, CASE WHEN ipages < iotta THEN ''0'' ELSE pg_size_pretty((bs*(ipages-iotta))::bigint) END AS index_waste FROM ( SELECT schemaname, tablename, cc.reltuples, cc.relpages, bs, CEIL((cc.reltuples*((datahdr+ma- (CASE WHEN datahdr%ma=0 THEN ma ELSE datahdr%ma END))+nullhdr2+4))/(bs-20::float)) AS otta, COALESCE(c2.relname,''?'') AS iname, COALESCE(c2.reltuples,0) AS ituples, COALESCE(c2.relpages,0) AS ipages, COALESCE(CEIL((c2.reltuples*(datahdr-12))/(bs-20::float)),0) AS iotta FROM ( SELECT ma,bs,schemaname,tablename, (datawidth+(hdr+ma-(case when hdr%ma=0 THEN ma ELSE hdr%ma END)))::numeric AS datahdr, (maxfracsum*(nullhdr+ma-(case when nullhdr%ma=0 THEN ma ELSE nullhdr%ma END))) AS nullhdr2 FROM ( SELECT schemaname, tablename, hdr, ma, bs, SUM((1-null_frac)*avg_width) AS datawidth, MAX(null_frac) AS maxfracsum, hdr+( SELECT 1+count(*)/8 FROM pg_stats s2 WHERE null_frac<>0 AND s2.schemaname = s.schemaname AND s2.tablename = s.tablename) AS nullhdr FROM pg_stats s, ( SELECT (SELECT current_setting(''block_size'')::numeric) AS bs, CASE WHEN substring(v,12,3) IN (''8.0'',''8.1'',''8.2'') THEN 27 ELSE 23 END AS hdr, CASE WHEN v ~ ''mingw32'' THEN 8 ELSE 4 END AS ma FROM (SELECT version() AS v) AS foo) AS constants GROUP BY 1,2,3,4,5) AS foo) AS rs JOIN pg_class cc ON cc.relname = rs.tablename JOIN pg_namespace nn ON cc.relnamespace = nn.oid AND nn.nspname = rs.schemaname AND nn.nspname <> ''information_schema'' LEFT JOIN pg_index i ON indrelid = cc.oid LEFT JOIN pg_class c2 ON c2.oid = i.indexrelid) AS sml ORDER BY CASE WHEN relpages < otta THEN 0 ELSE bs*(sml.relpages-otta)::bigint END DESC;'
Dmitry Vasiliyev
 
Сообщений: 9
Зарегистрирован: 16 сен 2015, 19:45

Re: Postgresql 9.0 и 1c 8.3

Сообщение Чирков Антон » 08 дек 2015, 16:51

Отказался от виртуализации. TPC+G1C тест теперь показал 19.87 (предыдущий результат 7.56). Завтра проверю в работе :D

Замечания к конфигу принял к сведению, спасибо!
Чирков Антон
 
Сообщений: 5
Зарегистрирован: 02 дек 2015, 13:12
Откуда: Россия, Челябинск

Re: Postgresql 9.0 и 1c 8.3

Сообщение Dmitry Vasiliyev » 08 дек 2015, 18:21

:bloat все-таки проверьте!
Dmitry Vasiliyev
 
Сообщений: 9
Зарегистрирован: 16 сен 2015, 19:45

Re: Postgresql 9.0 и 1c 8.3

Сообщение Чирков Антон » 09 дек 2015, 07:51

Dmitry Vasiliyev писал(а):покажите bloat с рабочей базы?

Скрипт выполнил, вопрос: каким образом выгрузить результаты?
Чирков Антон
 
Сообщений: 5
Зарегистрирован: 02 дек 2015, 13:12
Откуда: Россия, Челябинск


Вернуться в Осуждаем проблемы производительности 1с

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1