Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 04:01

Медленная работа 8.3 с Postgresql

Автор agp14, 08 мая 2014, 17:06

0 Пользователей и 1 гость просматривают эту тему.

agp14

Добрый день.

Данные:
   1.   Два одинаковых по мощности сервера. ОС == CentOS 6.5
   2.   На одном  Postgresql 9.1.2-1.1C  и 1С:Предприятие 8.2 (8.2.19.83)
      На втором Postgresql 9.2.4-1.1C  и 1С:Предприятие 8.3 (8.3.4.465)
   3.   Конфигурация: 1С:Медицина. Зарплата и кадры бюджетного учреждения, редакция 1.0 (1.0.71.2)
   4.   База одна и та же (перенесена через .dt)
   
Что делаем:
   1.   Делаем начисление зарплаты: Расчет зарплаты - Начисление зарплаты - Добавить - Выбираем сотрудника - Рассчитать - Полный расчет
   
В чем проблема:
   1. На платформе 8.2 - расчет происходит 3-5 секунд.
   2. На платформе 8.3 - расчет происходит несколько минут!
   
Что еще знаю:
   1. Процесс postmaster при расчете на 8.3 загружает проц на 100%
   2. Вывел медленные запросы в лог, оказалось самые медленные запросы - это delete
      Вот пример для сравнения:
На 8.2:
LOG:  duration: 0.567 ms  statement: DELETE FROM _CRgActP685
WHERE EXISTS(
SELECT 1
FROM tt65 T2
WHERE (_CRgActP685._RecorderTRef = T2._RecorderTRef AND _CRgActP685._RecorderRRef = T2._RecorderRRef AND _CRgActP685._LineNo = T2._LineNo)
AND _CRgActP685._RecorderTRef = T2._RecorderTRef AND _CRgActP685._RecorderRRef = T2._RecorderRRef AND _CRgActP685._LineNo = T2._LineNo)


На 8.3:
LOG:  duration: 26744.827 ms  statement: DELETE FROM _CRgActP685
WHERE EXISTS
SELECT 1
FROM (SELECT 1 AS SDBL_DUMMY) SDBL_DUAL
INNER JOIN (SELECT
T4._RecorderTRef AS RecorderTRef,
T4._RecorderRRef AS RecorderRRef,
T4._LineNo AS LineNo_
FROM _CRgActP685 T4
INNER JOIN tt65 T5
ON T4._RecorderTRef = T5._RecorderTRef AND T4._RecorderRRef = T5._RecorderRRef AND T4._LineNo = T5._LineNo LIMIT 100000) T3
ON _CRgActP685._RecorderTRef = T3.RecorderTRef AND _CRgActP685._RecorderRRef = T3.RecorderRRef AND _CRgActP685._LineNo = T3.LineNo_
WHERE _CRgActP685._RecorderTRef = T3.RecorderTRef AND _CRgActP685._RecorderRRef = T3.RecorderRRef AND _CRgActP685._LineNo = T3.LineNo_)


Заранее спасибо за любые подсказки.

Besart


1c-brigita

Такой вопрос лучше "1С"-у задавать в поддержке. :dfbbdrfb:

DmitriyF

Цитата: agp14 от 08 мая 2014, 17:06
Добрый день.

Данные:
   1.   Два одинаковых по мощности сервера. ОС == CentOS 6.5
   2.   На одном  Postgresql 9.1.2-1.1C  и 1С:Предприятие 8.2 (8.2.19.83)
      На втором Postgresql 9.2.4-1.1C  и 1С:Предприятие 8.3 (8.3.4.465)
   3.   Конфигурация: 1С:Медицина. Зарплата и кадры бюджетного учреждения, редакция 1.0 (1.0.71.2)
   4.   База одна и та же (перенесена через .dt)
   
Что делаем:
   1.   Делаем начисление зарплаты: Расчет зарплаты - Начисление зарплаты - Добавить - Выбираем сотрудника - Рассчитать - Полный расчет
   
В чем проблема:
   1. На платформе 8.2 - расчет происходит 3-5 секунд.
   2. На платформе 8.3 - расчет происходит несколько минут!
   
Что еще знаю:
   1. Процесс postmaster при расчете на 8.3 загружает проц на 100%
   2. Вывел медленные запросы в лог, оказалось самые медленные запросы - это delete
      Вот пример для сравнения:
На 8.2:
LOG:  duration: 0.567 ms  statement: DELETE FROM _CRgActP685
WHERE EXISTS(
SELECT 1
FROM tt65 T2
WHERE (_CRgActP685._RecorderTRef = T2._RecorderTRef AND _CRgActP685._RecorderRRef = T2._RecorderRRef AND _CRgActP685._LineNo = T2._LineNo)
AND _CRgActP685._RecorderTRef = T2._RecorderTRef AND _CRgActP685._RecorderRRef = T2._RecorderRRef AND _CRgActP685._LineNo = T2._LineNo)


На 8.3:
LOG:  duration: 26744.827 ms  statement: DELETE FROM _CRgActP685
WHERE EXISTS
SELECT 1
FROM (SELECT 1 AS SDBL_DUMMY) SDBL_DUAL
INNER JOIN (SELECT
T4._RecorderTRef AS RecorderTRef,
T4._RecorderRRef AS RecorderRRef,
T4._LineNo AS LineNo_
FROM _CRgActP685 T4
INNER JOIN tt65 T5
ON T4._RecorderTRef = T5._RecorderTRef AND T4._RecorderRRef = T5._RecorderRRef AND T4._LineNo = T5._LineNo LIMIT 100000) T3
ON _CRgActP685._RecorderTRef = T3.RecorderTRef AND _CRgActP685._RecorderRRef = T3.RecorderRRef AND _CRgActP685._LineNo = T3.LineNo_
WHERE _CRgActP685._RecorderTRef = T3.RecorderTRef AND _CRgActP685._RecorderRRef = T3.RecorderRRef AND _CRgActP685._LineNo = T3.LineNo_)


Заранее спасибо за любые подсказки.

Настройки Слонов одинаковы на обоих серверах?

agp14

1. По-крайней мере postgresql.conf одинаков.

kirill1970


DmitriyF

Цитата: agp14 от 12 мая 2014, 10:00
1. По-крайней мере postgresql.conf одинаков.
Пробуйте настраивать. Возможно что то изменилось в самой проге. Или на крайняк возьмите сборку от etersoft установите настройте так же и проверьте скорость работы.

imozg

Присоединяюсь к теме. Беда такая же. УПП 1.3, релиз платформы 8.3.5.1146
Добавлено: 08 окт 2014, 08:48


На чуть чуть получилось увеличить время работы за счет замены значений в postgres.conf
seq_page_cost = 0.1
random_page_cost = 0.11

Но это совсем не то чтобы хотелось. Пока решили перейти обратно на 8.2
Добавлено: 08 окт 2014, 10:29


Похожие проблемы так же не решены на тут и тут

IBR83

У меня была такая-же проблема на Зарплата и кадры бюджетного учреждения, но затем я попробовал установить вместо PostgreSQL от поставить PostgreSQL от Etersoft, заработало влет, сегодня запущу в продакшен, завтра посмотрю как будет работать.

ScannerDarkly

У нас такая же трабла с регистром расчетов на 8.3.6

При записи движений, вот этот запрос выполняется наверное секунд 90.

DELETE FROM _CRgActP6122                                                                                                                 
WHERE EXISTS(                                                                                                                             
SELECT 1                                                                                                                                 
FROM (SELECT 1 AS SDBL_DUMMY) SDBL_DUAL                                                                                                   
INNER JOIN (SELECT                                                                                                                       
T4._RecorderTRef AS RecorderTRef,                                                                                                         
T4._RecorderRRef AS RecorderRRef,                                                                                                         
T4._LineNo AS LineNo_                                                                                                                     
FROM _CRgActP6122 T4                                                                                                                     
INNER JOIN tt24 T5                                                                                                                       
ON T4._RecorderTRef = T5._RecorderTRef AND T4._RecorderRRef = T5._RecorderRRef AND T4._LineNo = T5._LineNo LIMIT 100000) T3               
ON _CRgActP6122._RecorderTRef = T3.RecorderTRef AND _CRgActP6122._RecorderRRef = T3.RecorderRRef AND _CRgActP6122._LineNo = T3.LineNo_   
WHERE _CRgActP6122._RecorderTRef = T3.RecorderTRef AND _CRgActP6122._RecorderRRef = T3.RecorderRRef AND _CRgActP6122._LineNo = T3.LineNo_)


На MSSQL или в файловой это пара секунд.
Решение Postgres от Etersoft выдает те же результаты

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск