Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите оптимизировать исполнение запроса.  [new]
Igor Glushaev
Member

Откуда:
Сообщений: 176
Сразу прошу сильно не пинать, в SQL я почти полный дуб... Есть система, точнее база 1с, поднятая на в клиент-серверной конфигурации. в качестве sql стоит MS SQL Server 2008R2 Standart.
print @@version
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2796.0 (X64)
Dec 9 2011 11:27:20
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

С недавних пор, а точнее после обновления версии платформы 1с возникли провалы с производительностью.
Что было сделано:
1) переиндексация средствами 1с
2) переиндексация средствами SQL с очисткой процедурного кэша и пересчетом статистик.
3) установлен CU4

Результата нет. Точнее обратный ожидаемому.

Был проведена анализ с помощью 1С:ЦУП. В резуультате был выловлен запрос, который очень долго выполняется.
Вот его текст:
SELECT
T1.Q_003_F_010_,
T1.Q_003_F_011_,
T1.Q_003_F_000RRef,
T1.Q_003_F_006RRef,
T1.Q_003_F_003_TYPE,
T1.Q_003_F_003_RTRef,
T1.Q_003_F_003_RRRef,
T1.Q_003_F_004_TYPE,
T1.Q_003_F_004_RTRef,
T1.Q_003_F_004_RRRef,
T1.Q_003_F_005_TYPE,
T1.Q_003_F_005_RTRef,
T1.Q_003_F_005_RRRef,
T1.Q_003_F_007_TYPE,
T1.Q_003_F_007_RTRef,
T1.Q_003_F_007_RRRef,
T1.Q_003_F_008_TYPE,
T1.Q_003_F_008_RTRef,
T1.Q_003_F_008_RRRef,
T1.Q_003_F_009_TYPE,
T1.Q_003_F_009_RTRef,
T1.Q_003_F_009_RRRef
FROM (SELECT
T2.AccountCtRRef AS Q_003_F_000RRef,
CASE WHEN (T2.ValueCt1_TYPE = 0x08 AND T2.ValueCt1_RTRef = 0x0000002C) THEN T2.ValueCt1_TYPE WHEN (T2.ValueCt2_TYPE = 0x08 AND T2.ValueCt2_RTRef = 0x0000002C) THEN T2.ValueCt2_TYPE WHEN (T2.ValueCt3_TYPE = 0x08 AND T2.ValueCt3_RTRef = 0x0000002C) THEN T2.ValueCt3_TYPE ELSE 0x01 END AS Q_003_F_001_TYPE,
CASE WHEN (T2.ValueCt1_TYPE = 0x08 AND T2.ValueCt1_RTRef = 0x0000002C) THEN T2.ValueCt1_RTRef WHEN (T2.ValueCt2_TYPE = 0x08 AND T2.ValueCt2_RTRef = 0x0000002C) THEN T2.ValueCt2_RTRef WHEN (T2.ValueCt3_TYPE = 0x08 AND T2.ValueCt3_RTRef = 0x0000002C) THEN T2.ValueCt3_RTRef ELSE 0x00000000 END AS Q_003_F_001_RTRef,
CASE WHEN (T2.ValueCt1_TYPE = 0x08 AND T2.ValueCt1_RTRef = 0x0000002C) THEN T2.ValueCt1_RRRef WHEN (T2.ValueCt2_TYPE = 0x08 AND T2.ValueCt2_RTRef = 0x0000002C) THEN T2.ValueCt2_RRRef WHEN (T2.ValueCt3_TYPE = 0x08 AND T2.ValueCt3_RTRef = 0x0000002C) THEN T2.ValueCt3_RRRef ELSE 0x00000000000000000000000000000000 END AS Q_003_F_001_RRRef,
CASE WHEN (T2.ValueDt1_TYPE = 0x08 AND T2.ValueDt1_RTRef = 0x0000002C) THEN T2.ValueDt1_TYPE WHEN (T2.ValueDt2_TYPE = 0x08 AND T2.ValueDt2_RTRef = 0x0000002C) THEN T2.ValueDt2_TYPE WHEN (T2.ValueDt3_TYPE = 0x08 AND T2.ValueDt3_RTRef = 0x0000002C) THEN T2.ValueDt3_TYPE ELSE CAST(NULL AS BINARY(1)) END AS Q_003_F_002_TYPE,
CASE WHEN (T2.ValueDt1_TYPE = 0x08 AND T2.ValueDt1_RTRef = 0x0000002C) THEN T2.ValueDt1_RTRef WHEN (T2.ValueDt2_TYPE = 0x08 AND T2.ValueDt2_RTRef = 0x0000002C) THEN T2.ValueDt2_RTRef WHEN (T2.ValueDt3_TYPE = 0x08 AND T2.ValueDt3_RTRef = 0x0000002C) THEN T2.ValueDt3_RTRef ELSE CAST(NULL AS BINARY(4)) END AS Q_003_F_002_RTRef,
CASE WHEN (T2.ValueDt1_TYPE = 0x08 AND T2.ValueDt1_RTRef = 0x0000002C) THEN T2.ValueDt1_RRRef WHEN (T2.ValueDt2_TYPE = 0x08 AND T2.ValueDt2_RTRef = 0x0000002C) THEN T2.ValueDt2_RRRef WHEN (T2.ValueDt3_TYPE = 0x08 AND T2.ValueDt3_RTRef = 0x0000002C) THEN T2.ValueDt3_RRRef ELSE CAST(NULL AS BINARY(16)) END AS Q_003_F_002_RRRef,
CASE WHEN T18.Q_001_F_001_ = 0x01 THEN T2.ValueCt1_TYPE ELSE 0x01 END AS Q_003_F_003_TYPE,
CASE WHEN T18.Q_001_F_001_ = 0x01 THEN T2.ValueCt1_RTRef ELSE 0x00000000 END AS Q_003_F_003_RTRef,
CASE WHEN T18.Q_001_F_001_ = 0x01 THEN T2.ValueCt1_RRRef ELSE 0x00000000000000000000000000000000 END AS Q_003_F_003_RRRef,
CASE WHEN T18.Q_001_F_002_ = 0x01 THEN T2.ValueCt2_TYPE ELSE 0x01 END AS Q_003_F_004_TYPE,
CASE WHEN T18.Q_001_F_002_ = 0x01 THEN T2.ValueCt2_RTRef ELSE 0x00000000 END AS Q_003_F_004_RTRef,
CASE WHEN T18.Q_001_F_002_ = 0x01 THEN T2.ValueCt2_RRRef ELSE 0x00000000000000000000000000000000 END AS Q_003_F_004_RRRef,
CASE WHEN T18.Q_001_F_003_ = 0x01 THEN T2.ValueCt3_TYPE ELSE 0x01 END AS Q_003_F_005_TYPE,
CASE WHEN T18.Q_001_F_003_ = 0x01 THEN T2.ValueCt3_RTRef ELSE 0x00000000 END AS Q_003_F_005_RTRef,
CASE WHEN T18.Q_001_F_003_ = 0x01 THEN T2.ValueCt3_RRRef ELSE 0x00000000000000000000000000000000 END AS Q_003_F_005_RRRef,
T2.AccountDtRRef AS Q_003_F_006RRef,
CASE WHEN T22.Q_002_F_001_ = 0x01 THEN T2.ValueDt1_TYPE ELSE 0x01 END AS Q_003_F_007_TYPE,
CASE WHEN T22.Q_002_F_001_ = 0x01 THEN T2.ValueDt1_RTRef ELSE 0x00000000 END AS Q_003_F_007_RTRef,
CASE WHEN T22.Q_002_F_001_ = 0x01 THEN T2.ValueDt1_RRRef ELSE 0x00000000000000000000000000000000 END AS Q_003_F_007_RRRef,
CASE WHEN T22.Q_002_F_002_ = 0x01 THEN T2.ValueDt2_TYPE ELSE 0x01 END AS Q_003_F_008_TYPE,
CASE WHEN T22.Q_002_F_002_ = 0x01 THEN T2.ValueDt2_RTRef ELSE 0x00000000 END AS Q_003_F_008_RTRef,
CASE WHEN T22.Q_002_F_002_ = 0x01 THEN T2.ValueDt2_RRRef ELSE 0x00000000000000000000000000000000 END AS Q_003_F_008_RRRef,
CASE WHEN T22.Q_002_F_003_ = 0x01 THEN T2.ValueDt3_TYPE ELSE 0x01 END AS Q_003_F_009_TYPE,
CASE WHEN T22.Q_002_F_003_ = 0x01 THEN T2.ValueDt3_RTRef ELSE 0x00000000 END AS Q_003_F_009_RTRef,
CASE WHEN T22.Q_002_F_003_ = 0x01 THEN T2.ValueDt3_RRRef ELSE 0x00000000000000000000000000000000 END AS Q_003_F_009_RRRef,
CAST(SUM(CASE WHEN T2.Fld5526Turnover_ IS NULL THEN 0.0 ELSE T2.Fld5526Turnover_ END) AS NUMERIC(33, 8)) AS Q_003_F_010_,
CAST(SUM(CASE WHEN T2.Fld5528TurnoverCt_ IS NULL THEN 0.0 ELSE T2.Fld5528TurnoverCt_ END) AS NUMERIC(32, 8)) AS Q_003_F_011_
FROM (SELECT
T3._AccountDtRRef AS AccountDtRRef,
T5._Value_TYPE AS ValueDt1_TYPE,
T5._Value_RTRef AS ValueDt1_RTRef,
T5._Value_RRRef AS ValueDt1_RRRef,
T7._Value_TYPE AS ValueDt2_TYPE,
T7._Value_RTRef AS ValueDt2_RTRef,
T7._Value_RRRef AS ValueDt2_RRRef,
T9._Value_TYPE AS ValueDt3_TYPE,
T9._Value_RTRef AS ValueDt3_RTRef,
T9._Value_RRRef AS ValueDt3_RRRef,
T3._AccountCtRRef AS AccountCtRRef,
T11._Value_TYPE AS ValueCt1_TYPE,
T11._Value_RTRef AS ValueCt1_RTRef,
T11._Value_RRRef AS ValueCt1_RRRef,
T13._Value_TYPE AS ValueCt2_TYPE,
T13._Value_RTRef AS ValueCt2_RTRef,
T13._Value_RRRef AS ValueCt2_RRRef,
T15._Value_TYPE AS ValueCt3_TYPE,
T15._Value_RTRef AS ValueCt3_RTRef,
T15._Value_RRRef AS ValueCt3_RRRef,
CAST(SUM(T3._Fld5526) AS NUMERIC(27, 8)) AS Fld5526Turnover_,
CAST(SUM(T3._Fld5528Ct) AS NUMERIC(26, 8)) AS Fld5528TurnoverCt_
FROM _AccRg5523 T3 WITH(SERIALIZABLE)
LEFT OUTER JOIN _Acc6_ExtDim5518 T4 WITH(REPEATABLEREAD)
ON T4._Acc6_IDRRef = T3._AccountDtRRef AND T4._LineNo = @P1
LEFT OUTER JOIN _AccRgED5547 T5 WITH(SERIALIZABLE)
ON T5._RecorderTRef = T3._RecorderTRef AND T5._RecorderRRef = T3._RecorderRRef AND T5._LineNo = T3._LineNo AND T5._Period = T3._Period AND T5._Correspond = @P2 AND T5._KindRRef = T4._DimKindRRef
LEFT OUTER JOIN _Acc6_ExtDim5518 T6 WITH(REPEATABLEREAD)
ON T6._Acc6_IDRRef = T3._AccountDtRRef AND T6._LineNo = @P3
LEFT OUTER JOIN _AccRgED5547 T7 WITH(SERIALIZABLE)
ON T7._RecorderTRef = T3._RecorderTRef AND T7._RecorderRRef = T3._RecorderRRef AND T7._LineNo = T3._LineNo AND T7._Period = T3._Period AND T7._Correspond = @P2 AND T7._KindRRef = T6._DimKindRRef
LEFT OUTER JOIN _Acc6_ExtDim5518 T8 WITH(REPEATABLEREAD)
ON T8._Acc6_IDRRef = T3._AccountDtRRef AND T8._LineNo = @P4
LEFT OUTER JOIN _AccRgED5547 T9 WITH(SERIALIZABLE)
ON T9._RecorderTRef = T3._RecorderTRef AND T9._RecorderRRef = T3._RecorderRRef AND T9._LineNo = T3._LineNo AND T9._Period = T3._Period AND T9._Correspond = @P2 AND T9._KindRRef = T8._DimKindRRef
LEFT OUTER JOIN _Acc6_ExtDim5518 T10 WITH(REPEATABLEREAD)
ON T10._Acc6_IDRRef = T3._AccountCtRRef AND T10._LineNo = @P1
LEFT OUTER JOIN _AccRgED5547 T11 WITH(SERIALIZABLE)
ON T11._RecorderTRef = T3._RecorderTRef AND T11._RecorderRRef = T3._RecorderRRef AND T11._LineNo = T3._LineNo AND T11._Period = T3._Period AND T11._Correspond = @P1 AND T11._KindRRef = T10._DimKindRRef
LEFT OUTER JOIN _Acc6_ExtDim5518 T12 WITH(REPEATABLEREAD)
ON T12._Acc6_IDRRef = T3._AccountCtRRef AND T12._LineNo = @P3
LEFT OUTER JOIN _AccRgED5547 T13 WITH(SERIALIZABLE)
ON T13._RecorderTRef = T3._RecorderTRef AND T13._RecorderRRef = T3._RecorderRRef AND T13._LineNo = T3._LineNo AND T13._Period = T3._Period AND T13._Correspond = @P1 AND T13._KindRRef = T12._DimKindRRef
LEFT OUTER JOIN _Acc6_ExtDim5518 T14 WITH(REPEATABLEREAD)
ON T14._Acc6_IDRRef = T3._AccountCtRRef AND T14._LineNo = @P4
LEFT OUTER JOIN _AccRgED5547 T15 WITH(SERIALIZABLE)
ON T15._RecorderTRef = T3._RecorderTRef AND T15._RecorderRRef = T3._RecorderRRef AND T15._LineNo = T3._LineNo AND T15._Period = T3._Period AND T15._Correspond = @P1 AND T15._KindRRef = T14._DimKindRRef
WHERE T3._Active = @P5 AND ((T3._AccountDtRRef IN
(SELECT
T16._REFFIELDRRef AS REFFIELDRRef
FROM #tt65 T16 WITH(NOLOCK)))) AND ((T3._AccountCtRRef IN
(SELECT
T17._REFFIELDRRef AS REFFIELDRRef
FROM #tt67 T17 WITH(NOLOCK)))) AND ((T3._Fld5524RRef = @P6)) AND (T3._Period >= @P7 AND T3._Period <= @P8)
GROUP BY T3._AccountDtRRef,
T5._Value_TYPE,
T5._Value_RTRef,
T5._Value_RRRef,
T7._Value_TYPE,
T7._Value_RTRef,
T7._Value_RRRef,
T9._Value_TYPE,
T9._Value_RTRef,
T9._Value_RRRef,
T3._AccountCtRRef,
T11._Value_TYPE,
T11._Value_RTRef,
T11._Value_RRRef,
T13._Value_TYPE,
T13._Value_RTRef,
T13._Value_RRRef,
T15._Value_TYPE,
T15._Value_RTRef,
T15._Value_RRRef
HAVING (CAST(SUM(T3._Fld5526) AS NUMERIC(27, 8))) <> @P2 OR (CAST(SUM(T3._Fld5528Ct) AS NUMERIC(26, 8))) <> @P2) T2
INNER JOIN (SELECT
T20._IDRRef AS Q_001_F_000RRef,
MAX(CASE WHEN (T19._LineNo = 1.0) THEN T19._Fld5519 ELSE 0x00 END) AS Q_001_F_001_,
MAX(CASE WHEN (T19._LineNo = 2.0) THEN T19._Fld5519 ELSE 0x00 END) AS Q_001_F_002_,
MAX(CASE WHEN (T19._LineNo = 3.0) THEN T19._Fld5519 ELSE 0x00 END) AS Q_001_F_003_
FROM _Acc6_ExtDim5518 T19 WITH(REPEATABLEREAD)
LEFT OUTER JOIN _Acc6 T20 WITH(REPEATABLEREAD)
ON (T19._Acc6_IDRRef = T20._IDRRef)
WHERE (T20._IDRRef IN
(SELECT
T21._REFFIELDRRef AS REFFIELDRRef
FROM #tt62 T21 WITH(NOLOCK)))
GROUP BY T20._IDRRef) T18
ON (T2.AccountCtRRef = T18.Q_001_F_000RRef)
INNER JOIN (SELECT
T24._IDRRef AS Q_002_F_000RRef,
MAX(CASE WHEN (T23._LineNo = 1.0) THEN T23._Fld5519 ELSE 0x00 END) AS Q_002_F_001_,
MAX(CASE WHEN (T23._LineNo = 2.0) THEN T23._Fld5519 ELSE 0x00 END) AS Q_002_F_002_,
MAX(CASE WHEN (T23._LineNo = 3.0) THEN T23._Fld5519 ELSE 0x00 END) AS Q_002_F_003_
FROM _Acc6_ExtDim5518 T23 WITH(REPEATABLEREAD)
LEFT OUTER JOIN _Acc6 T24 WITH(REPEATABLEREAD)
ON (T23._Acc6_IDRRef = T24._IDRRef)
WHERE (T24._IDRRef IN
(SELECT
T25._REFFIELDRRef AS REFFIELDRRef
FROM #tt72 T25 WITH(NOLOCK)))
GROUP BY T24._IDRRef) T22
ON (T2.AccountDtRRef = T22.Q_002_F_000RRef)
GROUP BY T2.AccountCtRRef,
T2.AccountDtRRef,
CASE WHEN (T2.ValueCt1_TYPE = 0x08 AND T2.ValueCt1_RTRef = 0x0000002C) THEN T2.ValueCt1_TYPE WHEN (T2.ValueCt2_TYPE = 0x08 AND T2.ValueCt2_RTRef = 0x0000002C) THEN T2.ValueCt2_TYPE WHEN (T2.ValueCt3_TYPE = 0x08 AND T2.ValueCt3_RTRef = 0x0000002C) THEN T2.ValueCt3_TYPE ELSE 0x01 END,
CASE WHEN (T2.ValueCt1_TYPE = 0x08 AND T2.ValueCt1_RTRef = 0x0000002C) THEN T2.ValueCt1_RTRef WHEN (T2.ValueCt2_TYPE = 0x08 AND T2.ValueCt2_RTRef = 0x0000002C) THEN T2.ValueCt2_RTRef WHEN (T2.ValueCt3_TYPE = 0x08 AND T2.ValueCt3_RTRef = 0x0000002C) THEN T2.ValueCt3_RTRef ELSE 0x00000000 END,
CASE WHEN (T2.ValueCt1_TYPE = 0x08 AND T2.ValueCt1_RTRef = 0x0000002C) THEN T2.ValueCt1_RRRef WHEN (T2.ValueCt2_TYPE = 0x08 AND T2.ValueCt2_RTRef = 0x0000002C) THEN T2.ValueCt2_RRRef WHEN (T2.ValueCt3_TYPE = 0x08 AND T2.ValueCt3_RTRef = 0x0000002C) THEN T2.ValueCt3_RRRef ELSE 0x00000000000000000000000000000000 END,
CASE WHEN (T2.ValueDt1_TYPE = 0x08 AND T2.ValueDt1_RTRef = 0x0000002C) THEN T2.ValueDt1_TYPE WHEN (T2.ValueDt2_TYPE = 0x08 AND T2.ValueDt2_RTRef = 0x0000002C) THEN T2.ValueDt2_TYPE WHEN (T2.ValueDt3_TYPE = 0x08 AND T2.ValueDt3_RTRef = 0x0000002C) THEN T2.ValueDt3_TYPE ELSE CAST(NULL AS BINARY(1)) END,
CASE WHEN (T2.ValueDt1_TYPE = 0x08 AND T2.ValueDt1_RTRef = 0x0000002C) THEN T2.ValueDt1_RTRef WHEN (T2.ValueDt2_TYPE = 0x08 AND T2.ValueDt2_RTRef = 0x0000002C) THEN T2.ValueDt2_RTRef WHEN (T2.ValueDt3_TYPE = 0x08 AND T2.ValueDt3_RTRef = 0x0000002C) THEN T2.ValueDt3_RTRef ELSE CAST(NULL AS BINARY(4)) END,
CASE WHEN (T2.ValueDt1_TYPE = 0x08 AND T2.ValueDt1_RTRef = 0x0000002C) THEN T2.ValueDt1_RRRef WHEN (T2.ValueDt2_TYPE = 0x08 AND T2.ValueDt2_RTRef = 0x0000002C) THEN T2.ValueDt2_RRRef WHEN (T2.ValueDt3_TYPE = 0x08 AND T2.ValueDt3_RTRef = 0x0000002C) THEN T2.ValueDt3_RRRef ELSE CAST(NULL AS BINARY(16)) END,
CASE WHEN T18.Q_001_F_001_ = 0x01 THEN T2.ValueCt1_TYPE ELSE 0x01 END,
CASE WHEN T18.Q_001_F_001_ = 0x01 THEN T2.ValueCt1_RTRef ELSE 0x00000000 END,
CASE WHEN T18.Q_001_F_001_ = 0x01 THEN T2.ValueCt1_RRRef ELSE 0x00000000000000000000000000000000 END,
CASE WHEN T18.Q_001_F_002_ = 0x01 THEN T2.ValueCt2_TYPE ELSE 0x01 END,
CASE WHEN T18.Q_001_F_002_ = 0x01 THEN T2.ValueCt2_RTRef ELSE 0x00000000 END,
CASE WHEN T18.Q_001_F_002_ = 0x01 THEN T2.ValueCt2_RRRef ELSE 0x00000000000000000000000000000000 END,
CASE WHEN T18.Q_001_F_003_ = 0x01 THEN T2.ValueCt3_TYPE ELSE 0x01 END,
CASE WHEN T18.Q_001_F_003_ = 0x01 THEN T2.ValueCt3_RTRef ELSE 0x00000000 END,
CASE WHEN T18.Q_001_F_003_ = 0x01 THEN T2.ValueCt3_RRRef ELSE 0x00000000000000000000000000000000 END,
CASE WHEN T22.Q_002_F_001_ = 0x01 THEN T2.ValueDt1_TYPE ELSE 0x01 END,
CASE WHEN T22.Q_002_F_001_ = 0x01 THEN T2.ValueDt1_RTRef ELSE 0x00000000 END,
CASE WHEN T22.Q_002_F_001_ = 0x01 THEN T2.ValueDt1_RRRef ELSE 0x00000000000000000000000000000000 END,
CASE WHEN T22.Q_002_F_002_ = 0x01 THEN T2.ValueDt2_TYPE ELSE 0x01 END,
CASE WHEN T22.Q_002_F_002_ = 0x01 THEN T2.ValueDt2_RTRef ELSE 0x00000000 END,
CASE WHEN T22.Q_002_F_002_ = 0x01 THEN T2.ValueDt2_RRRef ELSE 0x00000000000000000000000000000000 END,
CASE WHEN T22.Q_002_F_003_ = 0x01 THEN T2.ValueDt3_TYPE ELSE 0x01 END,
CASE WHEN T22.Q_002_F_003_ = 0x01 THEN T2.ValueDt3_RTRef ELSE 0x00000000 END,
CASE WHEN T22.Q_002_F_003_ = 0x01 THEN T2.ValueDt3_RRRef ELSE 0x00000000000000000000000000000000 END) T1
WHERE (T1.Q_003_F_001_TYPE = T1.Q_003_F_002_TYPE AND T1.Q_003_F_001_RTRef = T1.Q_003_F_002_RTRef AND T1.Q_003_F_001_RRRef = T1.Q_003_F_002_RRRef) AND (T1.Q_003_F_001_TYPE = @P9 AND T1.Q_003_F_001_RTRef = @P10 AND T1.Q_003_F_001_RRRef IN (@P11, @P12, @P12, @P12, @P12, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P13, @P14, @P14, @P14, @P14, @P15, @P15, @P15, @P15, @P16, @P16, @P17, @P17, @P17, @P17, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18, @P18)) AND ((((T1.Q_003_F_006RRef <> T1.Q_003_F_000RRef) OR (((T1.Q_003_F_003_TYPE <> T1.Q_003_F_007_TYPE OR T1.Q_003_F_003_RTRef <> T1.Q_003_F_007_RTRef OR T1.Q_003_F_003_RRRef <> T1.Q_003_F_007_RRRef)))) OR (((T1.Q_003_F_004_TYPE <> T1.Q_003_F_008_TYPE OR T1.Q_003_F_004_RTRef <> T1.Q_003_F_008_RTRef OR T1.Q_003_F_004_RRRef <> T1.Q_003_F_008_RRRef)))) OR (((T1.Q_003_F_005_TYPE <> T1.Q_003_F_009_TYPE OR T1.Q_003_F_005_RTRef <> T1.Q_003_F_009_RTRef OR T1.Q_003_F_005_RRRef <> T1.Q_003_F_009_RRRef))))'
26 янв 12, 07:30    [11973188]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
Igor Glushaev
Member

Откуда:
Сообщений: 176
Igor Glushaev,

План выполнения запроса в файлике.

Средствами самой 1с тут оптимизировать не получиться, но может можно средствами SQL подсунуть другие индексы? Или может в настройках самого SQL нужно что-то подправить? Заранее спасибо за помощь.

К сообщению приложен файл (План выполнения.rar - 4Kb) cкачать
26 янв 12, 07:35    [11973191]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
aleks2
Guest
1. Этот монстр неоперабелен.
2. Проще написать новый ручками, если у вас есть представление о желаемом результате.
3. Какие, нафег, индексы на куче группировок?
26 янв 12, 07:47    [11973196]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
Igor Glushaev
Member

Откуда:
Сообщений: 176
aleks2,

по п2 не получиться - выше написано, что запрос сториться 1с-кой, и соответсвенно повлиять на это я не могу... Остается только попыться примастить какие либо костыли...
26 янв 12, 07:56    [11973199]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
PVC
Member

Откуда:
Сообщений: 319
Igor Glushaev,

посмотрите здесь
26 янв 12, 09:34    [11973362]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
Igor Glushaev
Member

Откуда:
Сообщений: 176
PVC,

Не совсем понял... Железо у меня не менялось, поменялась только версия самой 1с. Была 8.2.13, стала 8.2.14... На старой версии на этом железе все летало, после обновления - тормоза. Откат также результата не дал. ЦУП показал проблему с выполнением запроса, транслированный текст котрого и план его выполнения я приложил. Если я правильно прочитал и понял его, то проблема в следующих строчках:
| 1151  | 1151     | 1            | 0.00313    | 0.000158    | 36         | 5.05             | 1.63E+003          |                                           |    |         |    |                             |         |         |         |         |         |--Clustered Index Seek(OBJECT:([phbk_sql].[dbo].[_AccRgED5547].[_AccRgE5547_ByPeriod_TRNRN] AS [T5]), SEEK:([T5].[_Period]=[phbk_sql].[dbo].[_AccRg5523].[_Period] as [T3].[_Period] AND [T5].[_RecorderTRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderTRef] as [T3].[_RecorderTRef] AND [T5].[_RecorderRRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderRRef] as [T3].[_RecorderRRef] AND [T5].[_LineNo]=[phbk_sql].[dbo].[_AccRg5523].[_LineNo] as [T3].[_LineNo] AND [T5].[_KindRRef]=[phbk_sql].[dbo].[_Acc6_ExtDim5518].[_DimKindRRef] as [T4].[_DimKindRRef] AND [T5].[_Correspond]=[@P2]),  WHERE:([phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T5].[_Period]>=[@P7] AND [phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T5].[_Period]<=[@P8]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 1151  | 1151     | 1            | 0.00313    | 0.000158    | 36         | 6.64             | 2.18E+003          |                                           |    |         |    |                             |         |         |         |         |--Clustered Index Seek(OBJECT:([phbk_sql].[dbo].[_AccRgED5547].[_AccRgE5547_ByPeriod_TRNRN] AS [T7]), SEEK:([T7].[_Period]=[phbk_sql].[dbo].[_AccRg5523].[_Period] as [T3].[_Period] AND [T7].[_RecorderTRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderTRef] as [T3].[_RecorderTRef] AND [T7].[_RecorderRRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderRRef] as [T3].[_RecorderRRef] AND [T7].[_LineNo]=[phbk_sql].[dbo].[_AccRg5523].[_LineNo] as [T3].[_LineNo] AND [T7].[_KindRRef]=[phbk_sql].[dbo].[_Acc6_ExtDim5518].[_DimKindRRef] as [T6].[_DimKindRRef] AND [T7].[_Correspond]=[@P2]),  WHERE:([phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T7].[_Period]>=[@P7] AND [phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T7].[_Period]<=[@P8]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| 1151  | 1151     | 1            | 0.00313    | 0.000158    | 36         | 6.64             | 2.18E+003          |                                           |    |         |    |                             |         |         |         |--Clustered Index Seek(OBJECT:([phbk_sql].[dbo].[_AccRgED5547].[_AccRgE5547_ByPeriod_TRNRN] AS [T9]), SEEK:([T9].[_Period]=[phbk_sql].[dbo].[_AccRg5523].[_Period] as [T3].[_Period] AND [T9].[_RecorderTRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderTRef] as [T3].[_RecorderTRef] AND [T9].[_RecorderRRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderRRef] as [T3].[_RecorderRRef] AND [T9].[_LineNo]=[phbk_sql].[dbo].[_AccRg5523].[_LineNo] as [T3].[_LineNo] AND [T9].[_KindRRef]=[phbk_sql].[dbo].[_Acc6_ExtDim5518].[_DimKindRRef] as [T8].[_DimKindRRef] AND [T9].[_Correspond]=[@P2]),  WHERE:([phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T9].[_Period]>=[@P7] AND [phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T9].[_Period]<=[@P8]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| 1151  | 1151     | 1            | 0.00313    | 0.000158    | 36         | 9.78             | 3.33E+003          |                                           |    |         |    |                             |         |         |--Clustered Index Seek(OBJECT:([phbk_sql].[dbo].[_AccRgED5547].[_AccRgE5547_ByPeriod_TRNRN] AS [T11]), SEEK:([T11].[_Period]=[phbk_sql].[dbo].[_AccRg5523].[_Period] as [T3].[_Period] AND [T11].[_RecorderTRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderTRef] as [T3].[_RecorderTRef] AND [T11].[_RecorderRRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderRRef] as [T3].[_RecorderRRef] AND [T11].[_LineNo]=[phbk_sql].[dbo].[_AccRg5523].[_LineNo] as [T3].[_LineNo] AND [T11].[_KindRRef]=[phbk_sql].[dbo].[_Acc6_ExtDim5518].[_DimKindRRef] as [T10].[_DimKindRRef] AND [T11].[_Correspond]=[@P1]),  WHERE:([phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T11].[_Period]>=[@P7] AND [phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T11].[_Period]<=[@P8]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| 1151  | 1151     | 1            | 0.00313    | 0.000158    | 36         | 9.78             | 3.33E+003          |                                           |    |         |    |                             |         |--Clustered Index Seek(OBJECT:([phbk_sql].[dbo].[_AccRgED5547].[_AccRgE5547_ByPeriod_TRNRN] AS [T13]), SEEK:([T13].[_Period]=[phbk_sql].[dbo].[_AccRg5523].[_Period] as [T3].[_Period] AND [T13].[_RecorderTRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderTRef] as [T3].[_RecorderTRef] AND [T13].[_RecorderRRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderRRef] as [T3].[_RecorderRRef] AND [T13].[_LineNo]=[phbk_sql].[dbo].[_AccRg5523].[_LineNo] as [T3].[_LineNo] AND [T13].[_KindRRef]=[phbk_sql].[dbo].[_Acc6_ExtDim5518].[_DimKindRRef] as [T12].[_DimKindRRef] AND [T13].[_Correspond]=[@P1]),  WHERE:([phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T13].[_Period]>=[@P7] AND [phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T13].[_Period]<=[@P8]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| 1151  | 1151     | 1            | 0.00313    | 0.000158    | 66         | 0.53             | 3.33E+003          |                                           |    |         |    |                             |--Index Seek(OBJECT:([phbk_sql].[dbo].[_AccRgED5547].[_AccRgE5547_ByExtDim_RR] AS [T15]), SEEK:([T15].[_KindRRef]=[phbk_sql].[dbo].[_Acc6_ExtDim5518].[_DimKindRRef] as [T14].[_DimKindRRef]),  WHERE:([phbk_sql].[dbo].[_AccRgED5547].[_RecorderTRef] as [T15].[_RecorderTRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderTRef] as [T3].[_RecorderTRef] AND [phbk_sql].[dbo].[_AccRgED5547].[_RecorderRRef] as [T15].[_RecorderRRef]=[phbk_sql].[dbo].[_AccRg5523].[_RecorderRRef] as [T3].[_RecorderRRef] AND [phbk_sql].[dbo].[_AccRgED5547].[_LineNo] as [T15].[_LineNo]=[phbk_sql].[dbo].[_AccRg5523].[_LineNo] as [T3].[_LineNo] AND [phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T15].[_Period]=[phbk_sql].[dbo].[_AccRg5523].[_Period] as [T3].[_Period] AND [phbk_sql].[dbo].[_AccRgED5547].[_Correspond] as [T15].[_Correspond]=[@P1] AND [phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T15].[_Period]>=[@P7] AND [phbk_sql].[dbo].[_AccRgED5547].[_Period] as [T15].[_Period]<=[@P8]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |


Я так понимаю, что индексы он использует, но не рационально. Вот и возникла мысль, а может ему подсунуть свои, дополнительные какие-либо?
26 янв 12, 10:06    [11973522]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
В первую очередь на посмотреть на индексы
Информацию о индексах можно посмотреть так,запустить полученные скрипты

declare @tablevar table
  (
    lngid int identity(1, 1)
  , objectid int
  , index_id int
  )

insert  into @tablevar
        ( objectid
        , index_id
        )
        select  [object_id]
              , index_id
        from    sys.dm_db_index_physical_stats(db_id('cazon'), null, null, null, 'DETAILED')
        where   ( ( avg_fragmentation_in_percent > 15 ) 
                  or ( avg_page_space_used_in_percent < 60 )
                ) 
                and page_count > 8 
                and index_id not in ( 0 )
 

select  'ALTER INDEX ' + ind.[name] + ' ON ' + sc.[name] + '.' + object_name(objectid) + ' REBUILD'
from    @tablevar tv
inner join sys.indexes ind on tv.objectid = ind.[object_id]
                              and tv.index_id = ind.index_id
inner join sys.objects ob on tv.objectid = ob.[object_id]
inner join sys.schemas sc on sc.schema_id = ob.schema_id


Можно посмотреть информацию о недостающий индексах
26 янв 12, 10:07    [11973527]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
Igor Glushaev
Member

Откуда:
Сообщений: 176
denis2710,

скрипт не срабатывает.
Вот ошибка:
Сообщение 1205, уровень 13, состояние 56, строка 8
Транзакция (идентификатор процесса 122) вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно.

Хотя сейчас в этой базе нет никого.

Да, и каким образом можно посмотреть недостающие индексы?
26 янв 12, 10:22    [11973599]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
aleks2
Guest
Igor Glushaev
PVC,

Не совсем понял... Железо у меня не менялось, поменялась только версия самой 1с. Была 8.2.13, стала 8.2.14... На старой версии на этом железе все летало, после обновления - тормоза.

Я так понимаю, что индексы он использует, но не рационально. Вот и возникла мысль, а может ему подсунуть свои, дополнительные какие-либо?


Прежде всего - обновите статистику на всех таблицах со 100% сэмплингом.
exec sp_MSforeachtable @command1="UPDATE STATISTICS ? WITH FULLSCAN, ALL"
26 янв 12, 10:25    [11973624]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
Да, и каким образом можно посмотреть недостающие индексы?
SELECT
statement AS [database.scheme.table],
column_id , column_name, column_usage,
migs.user_seeks, migs.user_scans,
migs.last_user_seek, migs.avg_total_user_cost,
migs.avg_user_impact
FROM sys.dm_db_missing_index_details AS mid
CROSS APPLY sys.dm_db_missing_index_columns (mid.index_handle)
INNER JOIN sys.dm_db_missing_index_groups AS mig
ON mig.index_handle = mid.index_handle
INNER JOIN sys.dm_db_missing_index_group_stats AS migs
ON mig.index_group_handle=migs.group_handle
ORDER BY mig.index_group_handle, mig.index_handle, column_id

Но вам это не поможет.
Молитесь,что бы после перестройки всех индексов и обнолении статистики все заработало.

Хотя сейчас в этой базе нет никого.

sp_who2
26 янв 12, 10:31    [11973660]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Igor Glushaev,
м..да
сюда db_id('cazon') вместо cazon вставь имя своей базы.
Недостающие можно посмотреть в DMV sys.dm_db_missing_index_details
26 янв 12, 10:32    [11973665]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
Igor Glushaev
Member

Откуда:
Сообщений: 176
denis2710,

Я правильно понял, что даный скрипт строит другой, для пересоздания индексов? И то, что он посторил нужно выполнить и молиться, чтоб помогло? :)
26 янв 12, 12:29    [11974579]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Igor Glushaev
denis2710,

Я правильно понял, что даный скрипт строит другой, для пересоздания индексов? И то, что он посторил нужно выполнить и молиться, чтоб помогло? :)

В принципе да.Можно молиться,можно с бубном плясать,можно 1С удалить...,можно будет посмотреть как работает 1С, когда все скрипты,которые сгенерились применены .Если будет все как и есть,то надо смотреть недостающие индексы и строить их через 1С(по-моему там где-то галка "индексировать")
26 янв 12, 12:36    [11974639]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать исполнение запроса.  [new]
Igor Glushaev
Member

Откуда:
Сообщений: 176
denis2710
Igor Glushaev
denis2710,

Я правильно понял, что даный скрипт строит другой, для пересоздания индексов? И то, что он посторил нужно выполнить и молиться, чтоб помогло? :)

В принципе да.Можно молиться,можно с бубном плясать,можно 1С удалить...,можно будет посмотреть как работает 1С, когда все скрипты,которые сгенерились применены .Если будет все как и есть,то надо смотреть недостающие индексы и строить их через 1С(по-моему там где-то галка "индексировать")


Недостающие индексы можно будет создать только руками, так как в 1с этот запрос работает по регситру бухсчетов, а там нет этого.
26 янв 12, 13:23    [11975148]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить