После конвертации 8.0 на 8.1.7.37 Стали жутко тормозить все

Вопросы программирования БД, их оптимизации, резервирования и восстановления данных.

Модераторы: Trinity admin`s, Free-lance moderator`s

Ответить
Molochnikov
Junior member
Сообщения: 2
Зарегистрирован: 27 июн 2007, 12:33
Откуда: Петербург

После конвертации 8.0 на 8.1.7.37 Стали жутко тормозить все

Сообщение Molochnikov » 27 июн 2007, 12:59

Платформа 2003 руский + 2 сервис пак.
2000 SQL  сервер + 4 сервис пак. Разница во времени выполнения запроса в 50 Раз.
Пример запроса:
В 1С:
Запрос.Текст = "ВЫБРАТЬ
    | ERP_ПланированиеОтгрузки.Заказ КАК Заказ,
    | ERP_ПланированиеОтгрузки.Заказ.Контрагент как Контрагент,
    | ERP_ПланированиеОтгрузки.Заказ.ДоговорКонтрагента.ВалютаВзаиморасчетов как Валюта,
    | ERP_ПланированиеОтгрузки.ДатаОтправки КАК ДеньОтгрузки,
    | ERP_ПланированиеОтгрузки.СуммаЗаказа КАК Сумма,
    | ВСборкеЗаказовОстатки.СуммаОстаток КАК СуммаСборки,
    | ГотовностьКОтгрузкеЗаказовОстатки.СуммаОстаток КАК СуммаСобрано,
    | -ОтгрузкаЗаказовОстатки.СуммаОстаток КАК СуммаОтгружено
    | ,СборкаЗаказов.КоличествоКонечныйОстаток КАК СборкаКоличествоОстаток
    |
    |ИЗ РегистрСведений.ERP_ПланированиеОтгрузки КАК ERP_ПланированиеОтгрузки
   
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ERP_СборкаЗаказов.ОстаткиИОбороты КАК СборкаЗаказов
    | ПО ERP_ПланированиеОтгрузки.Заказ = СборкаЗаказов.ЗаказПокупателя
   
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ERP_СборкаЗаказов.Остатки КАК ВСборкеЗаказовОстатки
    | ПО ERP_ПланированиеОтгрузки.Заказ = ВСборкеЗаказовОстатки.ЗаказПокупателя
    | И ВСборкеЗаказовОстатки.Статус = &Сборка
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ERP_СборкаЗаказов.Остатки КАК ГотовностьКОтгрузкеЗаказовОстатки
    | ПО ERP_ПланированиеОтгрузки.Заказ = ГотовностьКОтгрузкеЗаказовОстатки.ЗаказПокупателя
    | И ГотовностьКОтгрузкеЗаказовОстатки.СтатусСборки = &СтатусСобран
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ERP_СборкаЗаказов.Остатки КАК ОтгрузкаЗаказовОстатки
    | ПО ERP_ПланированиеОтгрузки.Заказ = ОтгрузкаЗаказовОстатки.ЗаказПокупателя
    | И ОтгрузкаЗаказовОстатки.Статус = &Отгрузка
    |ГДЕ
    | ERP_ПланированиеОтгрузки.ДатаОтправки = &ДатаОтправки
   
   
    |"+?(ПоказыватьЗакрытыеОперации,"","И (СборкаЗаказов.КоличествоПриход ЕСТЬ NULL ИЛИ СборкаЗаказов.КоличествоКонечныйОстаток > 0)")+"
   
    |
    |УПОРЯДОЧИТЬ ПО
                | ДеньОтгрузки,
                | ERP_ПланированиеОтгрузки.Заказ.Дата,
    | ERP_ПланированиеОтгрузки.Заказ";
______________________________________________________________________________________________________________________

Запрос в SQL от 8.0:

exec sp_executesql N'SELECT
_InfoReg5942_Q_000_T_001._Fld5943RRef _sf_3RRef,
_Document45._Fld588RRef f_1,
_Reference9._Fld179RRef f_2,
_InfoReg5942_Q_000_T_001._Fld5944 _sf_1,
_InfoReg5942_Q_000_T_001._Fld5945 f_3,
#V8TmpTable4_Q_000_T_003._Fld5960Balance f_4,
#V8TmpTable6_Q_000_T_004._Fld5960Balance f_5,
- #V8TmpTable8_Q_000_T_005._Fld5960Balance f_6,
#V8TmpTable2_Q_000_T_002._Fld5959FinalBalance f_7,
_Document45._Date_Time _sf_2
FROM
_InfoReg5942 _InfoReg5942_Q_000_T_001 WITH(NOLOCK)
LEFT OUTER JOIN _Document45 WITH(NOLOCK)
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = _Document45._IDRRef
LEFT OUTER JOIN (
SELECT
#V8TmpTable1_T3._Fld5950RRef _Fld5950RRef,
SUM(#V8TmpTable1_T3._Fld5959Receipt) _Fld5959Receipt,
SUM(#V8TmpTable1_T3._Fld5959Balance + #V8TmpTable1_T3._Fld5959Turnover) _Fld5959FinalBalance,
SUM(#V8TmpTable1_T3._Fld5959Expense) _Fld5959Expense
FROM
(
SELECT
_AccumReg5949._Fld5950RRef _Fld5950RRef,
CAST(0 AS NUMERIC(1,0)) _Fld5959Balance,
CASE
WHEN _AccumReg5949._RecordKind = CAST(0 AS NUMERIC(1,0))
THEN _AccumReg5949._Fld5959
WHEN _AccumReg5949._RecordKind = CAST(1 AS NUMERIC(1,0))
THEN - _AccumReg5949._Fld5959
ELSE CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3))
END _Fld5959Turnover,
CASE
WHEN _AccumReg5949._RecordKind = CAST(0 AS NUMERIC(1,0))
THEN _AccumReg5949._Fld5959
ELSE CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3))
END _Fld5959Receipt,
CASE
WHEN _AccumReg5949._RecordKind = CAST(1 AS NUMERIC(1,0))
THEN _AccumReg5949._Fld5959
ELSE CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3))
END _Fld5959Expense
FROM
_AccumReg5949 WITH(NOLOCK)
WHERE
_AccumReg5949._Active = @P1
) #V8TmpTable1_T3
GROUP BY
#V8TmpTable1_T3._Fld5950RRef
HAVING
SUM(#V8TmpTable1_T3._Fld5959Receipt) <> CAST(@P2 AS NUMERIC(1,0)) OR
SUM(#V8TmpTable1_T3._Fld5959Balance + #V8TmpTable1_T3._Fld5959Turnover) <> CAST(@P2 AS NUMERIC(1,0)) OR
SUM(#V8TmpTable1_T3._Fld5959Expense) <> CAST(@P2 AS NUMERIC(1,0))
) #V8TmpTable2_Q_000_T_002
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = #V8TmpTable2_Q_000_T_002._Fld5950RRef
LEFT OUTER JOIN (
SELECT
#V8TmpTable3_B._Fld5950RRef _Fld5950RRef,
#V8TmpTable3_B._Fld5953RRef _Fld5953RRef,
SUM(#V8TmpTable3_B._Fld5960Balance) _Fld5960Balance
FROM
(
SELECT
_AccumRegTotals5969._Fld5950RRef _Fld5950RRef,
_AccumRegTotals5969._Fld5953RRef _Fld5953RRef,
_AccumRegTotals5969._Fld5960 _Fld5960Balance
FROM
_AccumRegTotals5969 WITH(NOLOCK)
WHERE
_AccumRegTotals5969._Period = @P3
) #V8TmpTable3_B
GROUP BY
#V8TmpTable3_B._Fld5950RRef,
#V8TmpTable3_B._Fld5953RRef
HAVING
SUM(#V8TmpTable3_B._Fld5960Balance) <> CAST(@P2 AS NUMERIC(1,0))
) #V8TmpTable4_Q_000_T_003
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = #V8TmpTable4_Q_000_T_003._Fld5950RRef AND #V8TmpTable4_Q_000_T_003._Fld5953RRef = 0xba76e993c8e67c254f2afebf05dc4076
LEFT OUTER JOIN (
SELECT
#V8TmpTable5_B._Fld5950RRef _Fld5950RRef,
#V8TmpTable5_B._Fld5954RRef _Fld5954RRef,
SUM(#V8TmpTable5_B._Fld5960Balance) _Fld5960Balance
FROM
(
SELECT
_AccumRegTotals5969._Fld5950RRef _Fld5950RRef,
_AccumRegTotals5969._Fld5954RRef _Fld5954RRef,
_AccumRegTotals5969._Fld5960 _Fld5960Balance
FROM
_AccumRegTotals5969 WITH(NOLOCK)
WHERE
_AccumRegTotals5969._Period = @P3
) #V8TmpTable5_B
GROUP BY
#V8TmpTable5_B._Fld5950RRef,
#V8TmpTable5_B._Fld5954RRef
HAVING
SUM(#V8TmpTable5_B._Fld5960Balance) <> CAST(@P2 AS NUMERIC(1,0))
) #V8TmpTable6_Q_000_T_004
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = #V8TmpTable6_Q_000_T_004._Fld5950RRef AND #V8TmpTable6_Q_000_T_004._Fld5954RRef = 0x9ee7022fc43fe40542eb69a468a9442a
LEFT OUTER JOIN (
SELECT
#V8TmpTable7_B._Fld5950RRef _Fld5950RRef,
#V8TmpTable7_B._Fld5953RRef _Fld5953RRef,
SUM(#V8TmpTable7_B._Fld5960Balance) _Fld5960Balance
FROM
(
SELECT
_AccumRegTotals5969._Fld5950RRef _Fld5950RRef,
_AccumRegTotals5969._Fld5953RRef _Fld5953RRef,
_AccumRegTotals5969._Fld5960 _Fld5960Balance
FROM
_AccumRegTotals5969 WITH(NOLOCK)
WHERE
_AccumRegTotals5969._Period = @P3
) #V8TmpTable7_B
GROUP BY
#V8TmpTable7_B._Fld5950RRef,
#V8TmpTable7_B._Fld5953RRef
HAVING
SUM(#V8TmpTable7_B._Fld5960Balance) <> CAST(@P2 AS NUMERIC(1,0))
) #V8TmpTable8_Q_000_T_005
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = #V8TmpTable8_Q_000_T_005._Fld5950RRef AND #V8TmpTable8_Q_000_T_005._Fld5953RRef = 0xa2bed958f147b39448e5efac886e3ba6
LEFT OUTER JOIN _Reference9 WITH(NOLOCK)
ON _Document45._Fld599RRef = _Reference9._IDRRef
WHERE
_InfoReg5942_Q_000_T_001._Fld5944 = @P4 AND (#V8TmpTable2_Q_000_T_002._Fld5959Receipt IS NULL OR
#V8TmpTable2_Q_000_T_002._Fld5959FinalBalance > CAST(@P2 AS NUMERIC(1,0)))
ORDER BY
_InfoReg5942_Q_000_T_001._Fld5944,
_Document45._Date_Time,
_InfoReg5942_Q_000_T_001._Fld5943RRef
SELECT @@TRANCOUNT', N'@P1 varbinary(1),@P2 numeric(1,0),@P3 datetime,@P4 datetime', 0x01, 0, {ts '3999-11-01 00:00:00'}, {ts '2007-06-25 00:00:00'}
______________________________________________________________________________________________________________________

Запрос в SQL от 8.1:

exec sp_executesql N'SELECT
_InfoReg5942_Q_000_T_001._Fld5943RRef AS _sf_3RRef,
_Document45._Fld588RRef AS f_1,
_Reference9._Fld179RRef AS f_2,
_InfoReg5942_Q_000_T_001._Fld5944 AS _sf_1,
_InfoReg5942_Q_000_T_001._Fld5945 AS f_3,
#V8TblAli2_Q_000_T_003._Fld5960Balance AS f_4,
#V8TblAli3_Q_000_T_004._Fld5960Balance AS f_5,
- #V8TblAli4_Q_000_T_005._Fld5960Balance AS f_6,
#V8TblAli1_Q_000_T_002._Fld5959FinalBalance AS f_7,
_Document45._Date_Time AS _sf_2
FROM
_InfoReg5942 _InfoReg5942_Q_000_T_001 WITH(NOLOCK)
LEFT OUTER JOIN _Document45 WITH(NOLOCK)
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = _Document45._IDRRef
LEFT OUTER JOIN (
SELECT
#V8TblAli1_T._Fld5950RRef AS _Fld5950RRef,
CAST(SUM(#V8TblAli1_T._Fld5959Receipt) AS NUMERIC(28,3)) AS _Fld5959Receipt,
CAST(SUM(#V8TblAli1_T._Fld5959Balance + #V8TblAli1_T._Fld5959Receipt - #V8TblAli1_T._Fld5959Expense) AS NUMERIC(30,3)) AS _Fld5959FinalBalance
FROM
(
SELECT
_AccumReg5949._Fld5950RRef AS _Fld5950RRef,
CAST(SUM(CAST(0 AS NUMERIC(1,0))) AS NUMERIC(7,0)) AS _Fld5959Balance,
CAST(SUM(CASE
WHEN _AccumReg5949._RecordKind = CAST(0 AS NUMERIC(1,0))
THEN _AccumReg5949._Fld5959
ELSE CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3))
END) AS NUMERIC(21,3)) AS _Fld5959Receipt,
CAST(SUM(CASE
WHEN _AccumReg5949._RecordKind = CAST(0 AS NUMERIC(1,0))
THEN CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3))
ELSE _AccumReg5949._Fld5959
END) AS NUMERIC(21,3)) AS _Fld5959Expense
FROM
_AccumReg5949 WITH(NOLOCK)
WHERE
_AccumReg5949._Active = @P1
GROUP BY
_AccumReg5949._Fld5950RRef
HAVING
CAST(SUM(CAST(@P2 AS NUMERIC(1,0))) AS NUMERIC(7,0)) <> CAST(@P2 AS NUMERIC(1,0)) OR
CAST(SUM(CASE
WHEN _AccumReg5949._RecordKind = CAST(0 AS NUMERIC(1,0))
THEN _AccumReg5949._Fld5959
ELSE CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3))
END) AS NUMERIC(21,3)) <> CAST(@P2 AS NUMERIC(1,0)) OR
CAST(SUM(CASE
WHEN _AccumReg5949._RecordKind = CAST(0 AS NUMERIC(1,0))
THEN CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3))
ELSE _AccumReg5949._Fld5959
END) AS NUMERIC(21,3)) <> CAST(@P2 AS NUMERIC(1,0))
) #V8TblAli1_T
GROUP BY
#V8TblAli1_T._Fld5950RRef
HAVING
CAST(SUM(#V8TblAli1_T._Fld5959Receipt) AS NUMERIC(28,3)) <> CAST(@P2 AS NUMERIC(1,0)) OR
CAST(SUM(#V8TblAli1_T._Fld5959Balance + #V8TblAli1_T._Fld5959Receipt - #V8TblAli1_T._Fld5959Expense) AS NUMERIC(30,3)) <> CAST(@P2 AS NUMERIC(1,0))
) #V8TblAli1_Q_000_T_002
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = #V8TblAli1_Q_000_T_002._Fld5950RRef
LEFT OUTER JOIN (
SELECT
_AccumRegTotals5969._Fld5950RRef AS _Fld5950RRef,
_AccumRegTotals5969._Fld5953RRef AS _Fld5953RRef,
CAST(SUM(_AccumRegTotals5969._Fld5960) AS NUMERIC(27,2)) AS _Fld5960Balance
FROM
_AccumRegTotals5969 WITH(NOLOCK)
WHERE
_AccumRegTotals5969._Period = @P3
GROUP BY
_AccumRegTotals5969._Fld5950RRef,
_AccumRegTotals5969._Fld5953RRef
HAVING
CAST(SUM(_AccumRegTotals5969._Fld5960) AS NUMERIC(27,2)) <> CAST(@P2 AS NUMERIC(1,0))
) #V8TblAli2_Q_000_T_003
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = #V8TblAli2_Q_000_T_003._Fld5950RRef AND #V8TblAli2_Q_000_T_003._Fld5953RRef = 0xba76e993c8e67c254f2afebf05dc4076
LEFT OUTER JOIN (
SELECT
_AccumRegTotals5969._Fld5950RRef AS _Fld5950RRef,
_AccumRegTotals5969._Fld5954RRef AS _Fld5954RRef,
CAST(SUM(_AccumRegTotals5969._Fld5960) AS NUMERIC(27,2)) AS _Fld5960Balance
FROM
_AccumRegTotals5969 WITH(NOLOCK)
WHERE
_AccumRegTotals5969._Period = @P3
GROUP BY
_AccumRegTotals5969._Fld5950RRef,
_AccumRegTotals5969._Fld5954RRef
HAVING
CAST(SUM(_AccumRegTotals5969._Fld5960) AS NUMERIC(27,2)) <> CAST(@P2 AS NUMERIC(1,0))
) #V8TblAli3_Q_000_T_004
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = #V8TblAli3_Q_000_T_004._Fld5950RRef AND #V8TblAli3_Q_000_T_004._Fld5954RRef = 0x9ee7022fc43fe40542eb69a468a9442a
LEFT OUTER JOIN (
SELECT
_AccumRegTotals5969._Fld5950RRef AS _Fld5950RRef,
_AccumRegTotals5969._Fld5953RRef AS _Fld5953RRef,
CAST(SUM(_AccumRegTotals5969._Fld5960) AS NUMERIC(27,2)) AS _Fld5960Balance
FROM
_AccumRegTotals5969 WITH(NOLOCK)
WHERE
_AccumRegTotals5969._Period = @P3
GROUP BY
_AccumRegTotals5969._Fld5950RRef,
_AccumRegTotals5969._Fld5953RRef
HAVING
CAST(SUM(_AccumRegTotals5969._Fld5960) AS NUMERIC(27,2)) <> CAST(@P2 AS NUMERIC(1,0))
) #V8TblAli4_Q_000_T_005
ON _InfoReg5942_Q_000_T_001._Fld5943RRef = #V8TblAli4_Q_000_T_005._Fld5950RRef AND #V8TblAli4_Q_000_T_005._Fld5953RRef = 0xa2bed958f147b39448e5efac886e3ba6
LEFT OUTER JOIN _Reference9 WITH(NOLOCK)
ON _Document45._Fld599RRef = _Reference9._IDRRef
WHERE
_InfoReg5942_Q_000_T_001._Fld5944 = @P4 AND (#V8TblAli1_Q_000_T_002._Fld5959Receipt IS NULL OR
#V8TblAli1_Q_000_T_002._Fld5959FinalBalance > CAST(@P2 AS NUMERIC(1,0)))
ORDER BY
_InfoReg5942_Q_000_T_001._Fld5944,
_Document45._Date_Time,
_InfoReg5942_Q_000_T_001._Fld5943RRef', N'@P1 varbinary(1),@P2 numeric(1,0),@P3 datetime,@P4 datetime', 0x01, 0, {ts '3999-11-01 00:00:00'}, {ts '2007-06-25 00:00:00'}

______________________________________________________________________________________________________________________

Некоторые эксперименты: Запрос от 8.0 прекрасно и без тормозов выполняется на базе 8.0

Кто-нибудь сможет прокоментировать, помочь?

Аватара пользователя
gs
Сотрудник Тринити
Сотрудник Тринити
Сообщения: 16650
Зарегистрирован: 23 авг 2002, 17:34
Откуда: Москва
Контактная информация:

Сообщение gs » 27 июн 2007, 13:01

Если Вам надо оптимизировать запросы 1С, то это к Рарусу, а не к нам...

Molochnikov
Junior member
Сообщения: 2
Зарегистрирован: 27 июн 2007, 12:33
Откуда: Петербург

Сообщение Molochnikov » 29 июн 2007, 09:51

Уже сами разобрались. 8.1 виртуальные таблицы без явно указанных периодов обрабатывает на 2 порядка дольше.

Ответить

Вернуться в «Серверы - ПО, Базы Данных и их использование»

Кто сейчас на конференции

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