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

Откуда:
Сообщений: 4
1с-ка формирует вот такой вот листинг в запросе:
SELECT DISTINCT
_Document53_VT842_Q_000_T_001._Fld844RRef AS f_1,
_Document53_VT842_Q_000_T_001._Fld848RRef AS f_2
FROM
_Document53_VT842 _Document53_VT842_Q_000_T_001 WITH(NOLOCK)
LEFT OUTER JOIN _Document53 _Document53_1 WITH(NOLOCK)
ON _Document53_VT842_Q_000_T_001._Document53_IDRRef = _Document53_1._IDRRef
LEFT OUTER JOIN _Document35 WITH(NOLOCK)
ON _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000023 AND _Document53_1._Fld838_RRRef = _Document35._IDRRef
LEFT OUTER JOIN _Document34 WITH(NOLOCK)
ON _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000022 AND _Document53_1._Fld838_RRRef = _Document34._IDRRef
WHERE
(_Document53_1._Fld838_TYPE = @P1 AND _Document53_1._Fld838_RTRef = @P2 AND _Document53_1._Fld838_RRRef = @P3 OR
CASE
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x01 OR
_Document34._Fld387_TYPE = 0x08 AND _Document34._Fld387_RTRef IS NOT NULL AND _Document34._Fld387_RRRef IS NOT NULL
THEN _Document34._Fld387_TYPE
ELSE NULL
END
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000023
THEN CASE
WHEN _Document35._Fld1203RRef IS NOT NULL
THEN 0x08
ELSE NULL
END
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x01 OR
0x00 = 0x01
THEN CAST(NULL AS BINARY(1))
ELSE NULL
END
END = @P1 AND CASE
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x08
THEN _Document34._Fld387_RTRef
WHEN _Document34._Fld387_TYPE IS NULL OR
_Document34._Fld387_TYPE NOT IN (0x01,0x08)
THEN NULL
ELSE 0x00000000
END
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000023
THEN CASE
WHEN _Document35._Fld1203RRef IS NOT NULL
THEN 0x00000023
ELSE NULL
END
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x08
THEN CAST(NULL AS BINARY(4))
WHEN 0x01 = 0x01 OR
0x01 = 0x01
THEN NULL
ELSE 0x00000000
END
END = @P2 AND CASE
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x08
THEN _Document34._Fld387_RRRef
WHEN _Document34._Fld387_TYPE IS NULL OR
_Document34._Fld387_TYPE NOT IN (0x01,0x08)
THEN NULL
ELSE 0x00000000000000000000000000000000
END
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000023
THEN _Document35._Fld1203RRef
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x08
THEN CAST(NULL AS BINARY(16))
WHEN 0x01 = 0x01 OR
0x01 = 0x01
THEN NULL
ELSE 0x00000000000000000000000000000000
END
END = @P3) AND _Document53_VT842_Q_000_T_001._Fld848RRef <> @P4 AND _Document53_VT842_Q_000_T_001._Fld844RRef <> @P4 AND _Document53_1._Marked = @P5


Эта хрень грузит процессор на 100% по всем потокам, производит много чтений и выполняется 4-5 секунд. Нагрузки на диск в эти моменты нет.

SELECT
_Document53_Q_000_T_001._IDRRef AS f_1
FROM
_Document53 _Document53_Q_000_T_001 WITH(NOLOCK)
LEFT OUTER JOIN _Document35 WITH(NOLOCK)
ON _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000023 AND _Document53_Q_000_T_001._Fld838_RRRef = _Document35._IDRRef
LEFT OUTER JOIN _Document34 WITH(NOLOCK)
ON _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000022 AND _Document53_Q_000_T_001._Fld838_RRRef = _Document34._IDRRef
WHERE
CASE
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x01 OR
_Document34._Fld387_TYPE = 0x08 AND _Document34._Fld387_RTRef IS NOT NULL AND _Document34._Fld387_RRRef IS NOT NULL
THEN _Document34._Fld387_TYPE
ELSE NULL
END
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000023
THEN CASE
WHEN _Document35._Fld1203RRef IS NOT NULL
THEN 0x08
ELSE NULL
END
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x01 OR
0x00 = 0x01
THEN CAST(NULL AS BINARY(1))
ELSE NULL
END
END = @P1 AND CASE
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x08
THEN _Document34._Fld387_RTRef
WHEN _Document34._Fld387_TYPE IS NULL OR
_Document34._Fld387_TYPE NOT IN (0x01,0x08)
THEN NULL
ELSE 0x00000000
END
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000023
THEN CASE
WHEN _Document35._Fld1203RRef IS NOT NULL
THEN 0x00000023
ELSE NULL
END
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x08
THEN CAST(NULL AS BINARY(4))
WHEN 0x01 = 0x01 OR
0x01 = 0x01
THEN NULL
ELSE 0x00000000
END
END = @P2 AND CASE
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x08
THEN _Document34._Fld387_RRRef
WHEN _Document34._Fld387_TYPE IS NULL OR
_Document34._Fld387_TYPE NOT IN (0x01,0x08)
THEN NULL
ELSE 0x00000000000000000000000000000000
END
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000023
THEN _Document35._Fld1203RRef
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x08
THEN CAST(NULL AS BINARY(16))
WHEN 0x01 = 0x01 OR
0x01 = 0x01
THEN NULL
ELSE 0x00000000000000000000000000000000
END
END = @P3 AND NOT _Document53_Q_000_T_001._Marked = @P4


Второй запрос выполняется 1.5 секунды, аналогично грузит процессор и много читает. Дисковая справляется в эти моменты.(очереди 0.01-0.05)

Логично предполагаю, что не хватает индексов под запрос, тюнинг по собранным профайлером данным ускорил запрос но не существенно.

В связи с чем вопросы к знатокам:
Можете порекомендовать индексы для ускорения запроса?
Или стоит брать за уши одинэсника и заставлять переписывать запрос на временные таблицы?

Не так давно встал вопрос с производительностью регистра сведений на другой базе, там всё решилось парой индексов и статистик, здесь к сожалению профайлер+перформансер не помогают.
5 апр 18, 21:02    [21316756]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
via4esslaw
Member

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

Совсем забыл, SQl- MS SQL 2005 x 64, 1с -8.1
5 апр 18, 21:04    [21316759]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
invm
Member

Откуда: Москва
Сообщений: 9401
via4esslaw
Можете порекомендовать индексы для ускорения запроса?
Такое индексами не лечится.
5 апр 18, 22:32    [21316917]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31432
via4esslaw
В связи с чем вопросы к знатокам:
Можете порекомендовать индексы для ускорения запроса?
Или стоит брать за уши одинэсника и заставлять переписывать запрос на временные таблицы?
Индексы не помогут, переписывание запросов на временные таблицы тоже, как и изменение раскраски ячеек в отчёте.
Нужно условия поиска поменять с невероятной конструкции CASE на нормальные.
5 апр 18, 22:42    [21316945]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Ну, вот, а так хотелось первым сказать: "В морг".
6 апр 18, 00:01    [21317103]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
uaggster
Member

Откуда:
Сообщений: 863
alexeyvg
via4esslaw
В связи с чем вопросы к знатокам:
Можете порекомендовать индексы для ускорения запроса?
Или стоит брать за уши одинэсника и заставлять переписывать запрос на временные таблицы?
Индексы не помогут, переписывание запросов на временные таблицы тоже, как и изменение раскраски ячеек в отчёте.
Нужно условия поиска поменять с невероятной конструкции CASE на нормальные.

Это ж 1С.
И запрос сгенерирован самой 1Синой.
Какие могут быть "переписывания на нормальные"?
6 апр 18, 10:09    [21317712]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31432
uaggster
alexeyvg
пропущено...
Индексы не помогут, переписывание запросов на временные таблицы тоже, как и изменение раскраски ячеек в отчёте.
Нужно условия поиска поменять с невероятной конструкции CASE на нормальные.

Это ж 1С.
И запрос сгенерирован самой 1Синой.
Какие могут быть "переписывания на нормальные"?
Тут я не могу ничего сказать, можно на это как то повлиять или нет. Я сказал про сам запрос. "Нет ничего кроме Сиквела и Датаинжина его" :-)

1С конечно уже давно мем, но мне не верится, что обычные стандартные запросы там рассчитаны на соединение таблиц сканами.
Либо это трансляция какого то пользовательского запроса, написанного на 1С языке, либо это какая то такая кастомная конфигурация.

Вот даже ТС сказал "Или стоит брать за уши одинэсника и заставлять переписывать запрос на временные таблицы?", из чего следует, что это результат работы своих программистов, а не злой 1С, и что они могут влиять на этот запрос.
6 апр 18, 10:19    [21317775]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
via4esslaw
Member

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

В 1с этот листинг формируется самописным отчётом. В общем и целом там вот такое :
+

Запрос.Текст = "ВЫБРАТЬ
| ВложенныйЗапрос.ЕУЗ КАК ЕУЗ,
| ВложенныйЗапрос.Количество КАК Количество,
| ВложенныйЗапрос.Короб КАК Короб,
| ВложенныйЗапрос.ТЕ КАК ТЕ,
| ВложенныйЗапрос.ЕУЗ.Код КАК Код,
| ВложенныйЗапрос.ЕУЗ.Наименование КАК Наименование,
| ВложенныйЗапрос.ЕУЗ.Вес / ВложенныйЗапрос.ЕУЗ.Коэффициент * ВложенныйЗапрос.Количество КАК Вес,
| ВложенныйЗапрос.Количество * ВложенныйЗапрос.ЕУЗ.Объем / 1000000 КАК Объем,
| ВложенныйЗапрос.Ячейка КАК Ячейка,
| ВложенныйЗапрос.Стандарт,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1 + (ВложенныйЗапрос.Количество - ((ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) + (ВложенныйЗапрос.Количество - (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| ИНАЧЕ ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент > 0
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество
| КОНЕЦ
| КОНЕЦ КАК КолКор,
| ВложенныйЗапрос.ЕУЗ.Родитель КАК Группа,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ КАК кор,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВложенныйЗапрос.Количество - ((ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВложенныйЗапрос.Количество - (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент > 0
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество
| КОНЕЦ
| КОНЕЦ КАК Бл
|ИЗ
| (ВЫБРАТЬ
| ПроверкаТовары.ЕУЗ КАК ЕУЗ,
| СУММА(ПроверкаТовары.КоличествоПроверено - ПроверкаТовары.Излишек) КАК Количество,
| ПроверкаТовары.Короб КАК Короб,
| ПроверкаТовары.ТЕ КАК ТЕ,
| ПроверкаТовары.ЕУЗ.Код КАК Код,
| ПроверкаТовары.ЕУЗ.Наименование КАК Наименование,
| ПроверкаТовары.Ячейка КАК Ячейка,
| ВЫБОР
| КОГДА ПроверкаТовары.ЕУЗ.Коэффициент2 > 1
| ТОГДА ПроверкаТовары.ЕУЗ.Коэффициент2
| КОГДА ПроверкаТовары.ЕУЗ.Коэффициент > 0
| ТОГДА ПроверкаТовары.ЕУЗ.Коэффициент
| ИНАЧЕ 1
| КОНЕЦ КАК Стандарт
| ИЗ
| Документ.Проверка.Товары КАК ПроверкаТовары
| ГДЕ
| ПроверкаТовары.Ссылка В(&Ссылка)
| И ПроверкаТовары.КоличествоПроверено - ПроверкаТовары.Излишек > 0
|
| СГРУППИРОВАТЬ ПО
| ПроверкаТовары.ТЕ,
| ПроверкаТовары.Короб,
| ПроверкаТовары.ЕУЗ,
| ПроверкаТовары.ЕУЗ.Код,
| ПроверкаТовары.ЕУЗ.Наименование,
| ПроверкаТовары.Ячейка,
| ВЫБОР
| КОГДА ПроверкаТовары.ЕУЗ.Коэффициент2 > 1
| ТОГДА ПроверкаТовары.ЕУЗ.Коэффициент2
| КОГДА ПроверкаТовары.ЕУЗ.Коэффициент > 0
| ТОГДА ПроверкаТовары.ЕУЗ.Коэффициент
| ИНАЧЕ 1
| КОНЕЦ) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.ЕУЗ,
| ВложенныйЗапрос.Короб,
| ВложенныйЗапрос.ТЕ,
| ВложенныйЗапрос.ЕУЗ.Код,
| ВложенныйЗапрос.ЕУЗ.Наименование,
| ВложенныйЗапрос.Ячейка,
| ВложенныйЗапрос.Стандарт,
| ВложенныйЗапрос.ЕУЗ.Вес / ВложенныйЗапрос.ЕУЗ.Коэффициент * ВложенныйЗапрос.Количество,
| ВложенныйЗапрос.Количество * ВложенныйЗапрос.ЕУЗ.Объем / 1000000,
| ВложенныйЗапрос.ЕУЗ.Родитель,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВложенныйЗапрос.Количество - ((ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВложенныйЗапрос.Количество - (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент > 0
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество
| КОНЕЦ
| КОНЕЦ,
| ВложенныйЗапрос.Количество,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1 + (ВложенныйЗапрос.Количество - ((ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) + (ВложенныйЗапрос.Количество - (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| ИНАЧЕ ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент > 0
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество
| КОНЕЦ
| КОНЕЦ,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| ТЕ,
| Короб,
| Группа,
| ЕУЗ
|ИТОГИ
| СУММА(Количество),
| СУММА(Вес),
| СУММА(Объем),
| МИНИМУМ(Ячейка),
| СУММА(КолКор)
|ПО
| ТЕ,
| Короб";




Увы, я не 1с-ник и не профи T-SQL, есть ли знакомые люди, которые за деньги/пиво/признательность проконсультируют, что не так и какие конструкции вместо "Выбор" стоит использовать? Или не парить мозг и заказать отчёт у внешней компании? (наш 1с-ник вызывает смутное понимание непонимания принципов производительности запросов)
6 апр 18, 10:58    [21317933]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
aleksrov
Member

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

1С'ники я думаю и не такую хрень могут написать.
Пару часов назад спорил с человеком из отдела который занимается 1С (ну как занимается, так, иногда обновления накатит и все), и он мне показывал распечатку с сайта разработчика конфигурации где написано:
1) Поставьте прирост 10% в БД.
2) Установите maxdop 1 (типа это лучшая конфигурация для 1с, чтоб дешевые запросы не использовали парллелизм, а про cost treshold parallelism эти придурки не слышали. И типа это чистая OLTP система, там половина сканов, ну да, maxdop 1)
3) Выполняйте периодически freeproccache (потому что мы придурки не умеем параметизировать запросы и кэш забит ad-hoc планами)
4) Делаем пересчет статистики один раз в день (и не важно как часто изменяются данные, и может от этого только хуже будет, частые и ненужные компиляции, хотя какая разниа учитывая пункт 3)
А терменология которую эти раки использовали это капец:
Дословно "Реиндексация и дефрагментация индексов - рекомендуется делать дефрагментацию\реиндексацию хотя бы раз в неделю. Реиндексация блокирует таблицы, поэтому лучше запускать в нерабочее время или периоды минимальной нагрузки. Нет смысла делать дефрагментацию после перестроения индекса (реиндексации). По рекомендациям Microsoft дефрагментацию делают в том случае, если фрагментация индекса не превышает 30%. Если выше рекомендуется делать реиндексацию".
Я минут 5 пытался вьехать в написанное, чем им Ребилд и реорганизация не угодили я не знаю.
6 апр 18, 11:11    [21317970]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
aleksrov,

вы хоть сами понимаете о чём возмущаетесь?
6 апр 18, 11:16    [21317987]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
via4esslaw,

тут по соседству есть форум 1Сников
вероятность, что там вам поиогут значительно выше
6 апр 18, 11:16    [21317988]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
aleksrov
Member

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

Да вроде да :)
6 апр 18, 11:18    [21317997]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
aleksrov
TaPaK,

Да вроде да :)

неа

автор
тут по соседству есть форум 1Сников
вероятность, что там вам поиогут значительно выше

правильно, убрать и сжечь :)
6 апр 18, 11:18    [21318001]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
aleksrov
Member

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

И в чем я не прав? Это не сарказм, правда интересно.
У нас база 1С небольшая, зарплата, и я вижу именно то что написал.
6 апр 18, 11:20    [21318012]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
via4esslaw
что не так и какие конструкции вместо


я не настоящий 1С, просто они рядом сидят ))
вся эта кривизна sql-запроса и описанна в данном запросе на языке 1С, который почти один к одному переведен на sql

т.е. вообще никаких проблем: взять грамотного 1Ска, и попросить его составить грамотный запрос
сама система 1С, тут вобще не при делах
6 апр 18, 11:22    [21318016]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
via4esslaw,
CREATE NONCLUSTERED INDEX [некошерный_индекс_однократный] ON [_Document53_VT842] -- таблица строк документа
(
	[_Fld848RRef] ASC -- ключ номенклатуры, селективность высокая
, [_Fld844RRef] ASC -- ключ торговой точки, селективность чуть пониже
)
INCLUDE ([_Document53_IDRRef]) -- ссылка на документ
6 апр 18, 11:39    [21318077]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
Yasha123
Member

Откуда:
Сообщений: 1837
aleksrov
Я минут 5 пытался вьехать в написанное, чем им Ребилд и реорганизация не угодили я не знаю
...
И в чем я не прав? Это не сарказм, правда интересно.
У нас база 1С небольшая, зарплата, и я вижу именно то что написал.

а что не то с ребилдом-то?
они пишут (некий корявый перевод с инглиша, как мне кажется):
делайте ребилд или реиндекс хотя бы раз в неделю.
нет смысла делать реорг после ребилда.
реорг рекомендуем делать при фрагментации до 30%,
если больше, то ребилд.

что неправильно-то?
6 апр 18, 11:40    [21318082]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
aleksrov
Member

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

Я про терминологию говорил, не сразу вьехал о чем пишется, я про это.
А TaPaK говорит что в остальном я на них нагавариваю.
6 апр 18, 11:43    [21318093]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
via4esslaw,

Ой-вей, немного ошибся. Это же "Розница 8.Аптека", проверка номенклатуры по коробкам? Документ - судя по всему некая инвентаризация.
6 апр 18, 11:46    [21318103]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
via4esslaw
В 1с этот листинг формируется самописным отчётом

Вы делаете мне смешно :)
via4esslaw
Или не парить мозг и заказать отчёт у внешней компании? (наш 1с-ник вызывает смутное понимание непонимания принципов производительности запросов)

Таки да.
6 апр 18, 11:47    [21318113]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
Yasha123
Member

Откуда:
Сообщений: 1837
aleksrov
Yasha123,

Я про терминологию говорил, не сразу вьехал о чем пишется, я про это.
А TaPaK говорит что в остальном я на них нагавариваю.

так я про что всю жизнь долблю:
надо в подлиннике читать,
а не корявенькие переводы.
----
а про наговоры.
да такие рекомендации лучше никаких.
пусть хоть раз в день статистику обновляют, не треснут поди.
вчера сервер смотрели, OLTP.
запрос по последним трем дням ушел в кому.
в плане вижу, что он 1 строку ожидает и пошел делать лукапы(NL),
выбрал голый индекс по дате, а тучу остальных полей в кластерном по GUID(!) ищет.
ну это бы до завтра работало.
говорю, что со статистикой?
ой, слов таких не знаем.
смотрю дату статистики: 1 апреля.
ну он и считает, что строк после 1ого вообще нет.
а там миллион.
миллион рандомных лукапов,
который по-любому ВСЮ таблицу в память подымет.
да уж лучше бы сразу сканил, прости господи, хотя бы подряд читал бы
6 апр 18, 11:51    [21318133]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
aleksrov
Member

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

Ну если так посмотреть то да, если нет DBA пускай лучше каждый день делают.
А зачем совет с maxdop 1 и с очисткой кэша я так и не понял.
6 апр 18, 11:58    [21318169]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
Yasha123
Member

Откуда:
Сообщений: 1837
aleksrov
Yasha123,

Ну если так посмотреть то да, если нет DBA пускай лучше каждый день делают.
А зачем совет с maxdop 1 и с очисткой кэша я так и не понял.

ну наверное они под тот самый сервер писали,
что мне вчера показали.
у него 24 ядра, maxdop 0 (по умолчанию).
вернее, у них вообще все по умолчанию.
а сервер вообще-то OLTP.

1 не 1, но если права дадут, 8 выставлю
---

про очистку кэша лажа какая-то,
может это какой-то DWH-шник писал?
там и правда можно себе позволить все перекомпилировать,
только лучше станет
6 апр 18, 12:10    [21318236]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
aleksrov
Member

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

У меня 8 стоит, вполне норм.
Я кстати довольно часто встречаю советты чиситить кэш, из свежего https://habrahabr.ru/post/349910/
Я даже не знал что есть проблема как "устаревание процедурного кэша"
Хабо кстати давно не читаю, там давно какая та лажа, зашел недавно посмотреть мож изменилось что, наткнулся на это, закрыл.
6 апр 18, 12:16    [21318271]     Ответить | Цитировать Сообщить модератору
 Re: Проблемный запрос, нужна помощь с индексами.  [new]
Владислав Колосов
Member

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

чистить кеш приходится при говнокодинге и такой же архитектуре.
6 апр 18, 12:18    [21318278]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить