Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
Все доброго дня. Поставила меня в ступор следующая ситуация. Имеем таблицу с кластерным уникальным индексам по полям Period+ID Period - datetime2, ID - binary(16). Колонок > 2 (с десяток). Таблица и кластерный индекс одинаково секционированы (одной функцией, по кварталам) по полю Period. в таблице под 40 млн записей. Имеем запрос вида Код: sql 1. 2. 3. На совместимостях 110, 120 - работает прекрасно (CIseek). При переключении на совместимость 130 - CIscan. "Хм", подумал я... и пошел забавляться с флагами трассировки, статистикой, перестроением индекса и т.д. Самое странное, что это даже не новый оптимизатор, т.к. на 120 - все ок (хотя как знать - новый активно развивают). Оказывается, скуль (130) невзлюбил формат даты! Любые другие варианты работают отлично WHERE T._Period >= convert(datetime2, {ts '2018-08-01 00:00:00'}) WHERE T._Period >= '2018-08-01' и т.п. - всегда CIseek Может кто-нибудь объяснить В ЧЕМ ФИШКА? Что случилось, если на более ранних совместимостях все прекрасно работало? Какие-то изменения может были правилах применения форматов дат? PS: СУБД - mssql 2016 (enterprise) sp1 cu8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 00:30 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
Кто не делает явного преобразования литералов/констант в нужный тип, тот страдает. Вы же смотрели, что там в Predicate написано, когда CIscan? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 00:53 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, Содержимым запроса, текстом, параметрами управляет приложение. Я тут никак не повлияю. Какой предикат в скане? Их там нет. Поясните свои слова. Преобразования над самим столбцомп (периодом) ведь не выполняются. Попробовал воспроизвести на других данных без секционирования- пока не получается получить скан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 08:28 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
nvvКакой предикат в скане? Их там нет.Их там есть. Свойства итератора смотрите. Должны увидеть примерно это - https://littlekendra.com/2016/03/10/the-case-of-datetime2-and-partition-elimination/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 08:57 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
invm, виноват... ИхТамЕсть ......Period >= '2018-08-06 00:00:00.000' При том что при "поиске по индексу" поиск по предикату выглядит так: ......Period >= Скалярный оператор('2018-08-06 00:00:00.0000000') Значит ли это, что в первом случае СУБД не выполнила неявное преобразование значения и выполняется сравнение разных типов? То, что нужно самому беспокоится о правильном преобразовании и что отсутствие такого является моветоном - я уже понял. Какова вероятная причина такого поведения СУБД? Ошибка движка? До совместимости 130 этого косяка не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 09:50 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
nvv, в 130 поменялось преобpазование сравните для 120 и 130 Код: sql 1. 2. 3. 4. как это влияет на предикат индекса я не знаю. Но правильный ответ как всегда: преобразовуйте явно. Ну и есть масса ссылок на баг, но коннект убит и искать лень :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 09:55 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
TaPaK, посмотрел, увидел. Что-то в таком духе я и ожидал (( Последний вопрос: MS это никак не исправляла? Так оно все и висит до последних версий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:28 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
nvvTaPaK, посмотрел, увидел. Что-то в таком духе я и ожидал (( Последний вопрос: MS это никак не исправляла? Так оно все и висит до последних версий? что он должен исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:30 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
nvvПоследний вопрос: MS это никак не исправляла? Так оно все и висит до последних версий?Зачем исправлять то, что было сделано специально? Сидите на 120 CL, для того CL и придумали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:31 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
nvv, авторСодержимым запроса, текстом, параметрами управляет приложение. Я тут никак не повлияю. влияйте, если в базе datetime2 то и приложение должно отдавать DateTime2, всё остальное это ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:37 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
авторЗачем исправлять то, что было сделано специально? Сидите на 120 CL, для того CL и придумали. Т.е. в 130 они специально отказались от преобразования? Это где-то документировано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:49 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичnvvПоследний вопрос: MS это никак не исправляла? Так оно все и висит до последних версий?Зачем исправлять то, что было сделано специально? Сидите на 120 CL, для того CL и придумали.А не знаете, зачем это было сделано? Семантически ведь запрос не меняется, при изменении типа константы - "получить записи с значением поля больше заданного". Тем более причина должна быть веской, потому что последствия - потеря совместимости с предыдущими версиями - достаточно тяжёлые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:52 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
TaPaKnvv, авторСодержимым запроса, текстом, параметрами управляет приложение. Я тут никак не повлияю. влияйте, если в базе datetime2 то и приложение должно отдавать DateTime2, всё остальное это ошибкаПриложение то чужое, поменять они его не могут. Понятно, что приложение совместимо с определённой версией сиквела, и с новой работать не будет, если совместимость версий производитель не поддерживает. Так что решение перевести приложение на другую версию, конечно, несколько поспешное. Придётся откатывать назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:54 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
alexeyvgTaPaKnvv, пропущено... влияйте, если в базе datetime2 то и приложение должно отдавать DateTime2, всё остальное это ошибкаПриложение то чужое, поменять они его не могут. Понятно, что приложение совместимо с определённой версией сиквела, и с новой работать не будет, если совместимость версий производитель не поддерживает. Так что решение перевести приложение на другую версию, конечно, несколько поспешное. Придётся откатывать назад. ну я так подозреваю что вводить тип datetime2 было не решение сопровождателей, а значить это ошибка не приведение в соотвествие клиента и сервера. авторТ.е. в 130 они специально отказались от преобразования? Это где-то документировано? где сказано что нет преобразования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:58 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
alexeyvg, приложение совместимо с 2016. Но тот функционал, на котором это проявилось - это интеграция с внешними базами, т.е. не часто используется и сделан по принципу "чтобы всем было хорошо". Поэтому тут даже не угадаешь и особо не протестируешь. Конечно же установил 120. С этим нет проблем. Единственное, что интересовало - причина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 11:04 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
FYI http://www.dbdelta.com/sql-server-2016-and-azure-sql-database-v12-breaking-change/ ну и вывод тот же авторThese datetime behavior changes have the benefit of improved accuracy and performance of datetime conversion/comparison. Affected applications can use a pre-SQL Server 2016 database compatibility level until they can be remediated. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 11:22 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
nvv, обычная ошибка новобранцев... Несовпадение типа данных аргумента функции секционирования и сравниваемого значения приводит к просмотру всех секций. Оно и в нативном 110 так работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 14:38 |
|
||
|
Clustered Index Scan (Top Order) из-за формата даты в условии
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов, ну передать вендору ПО, что они новобранцы, я не смогу. До царя далеко. Но в поддержку обращусь ) Я кстати попробовал с не секционированной таблицей такой тест проделать. В плане появляется вычисление скалярного значения, но уже работает быстро. Прикрепил планы. 1-3 на секционированной таблице, 4-6 на не секционированной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 18:24 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=138&tid=1689238]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 439ms |

| 0 / 0 |
