Имя: Пароль:
1C
 
Когда обновляется статистика на ms sql?
0 breezee
 
22.06.24
23:16
Коллеги, добрый вечер. Для теста сделал в базе 1с свой регистр сведений с 1 измерением. Создал запрос запрос к этому регистру с самим собой. На mssql. План запроса выдал nested loops. Логично. Записал туда 10к записей, выполнил запрос. Ожидал тоже вложенные циклы. Выдало мердж джоин. Почему так? В курсах говорилось что кэшируется 1 раз запрос. По идее должно было быть тоже нестед лупс. Потом я должен был выполнить DBCC FREEPROCCAHCE и только тогда должно было измениться соединение. Но оно поменялось сразу. То есть стазу при запросе выполнился Мердж джони. При чем кол-во плановое и фактическое строк 10к. Подскажите, пожалуйста, в какой момент мог обновиться процедурный кэш? Или курсы врут и кэшируется не первый запрос? Текст запроса не менялся.

Текст запрос, если кому надо:

ВЫБРАТЬ
    РегистрСведений1.Измерение1 КАК Измерение1
ИЗ
    РегистрСведений.РегистрСведений1 КАК РегистрСведений1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений1 КАК РегистрСведений11
        ПО РегистрСведений1.Измерение1 = РегистрСведений11.Измерение1

Текст обработки по заполнения регистра:

//для ит = 1 по 10000 цикл
    //ф = РегистрыСведений.РегистрСведений1.СоздатьМенеджерЗаписи();
    //ф.Измерение1 = Строка(Новый УникальныйИдентификатор);
    //ф.Записать();
    //КонецЦикла;    
    
    //ф = РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей();
    //ф.Записать();

    ф = РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей();
    для ит = 1 по 10000 цикл
        
        фф = ф.Добавить();
        фф.Измерение1 = Строка(Новый УникальныйИдентификатор);
        
        
    КонецЦикла;
    
    ф.Записать();


!!!Специально оставил то что выполнял закомменчено. Может этот как-то виляет
1 timurhv
 
22.06.24
23:40
>В курсах говорилось что кэшируется 1 раз запрос.
В каких курсах, кто говорит?

>Или курсы врут и кэшируется не первый запрос?
https://wiki.it-kb.ru/1c/setting-up-microsoft-sql-server-for-1c-enterprise-8-3/automatic-creation-and-updating-of-statistics-for-the-database

Тут что установлено? Запрос никак не может кэшироваться, только план запроса может на основе статистики.
2 H A D G E H O G s
 
22.06.24
23:43
(1) Ну он по делу же говорит. Планы запросов кэшируются. Другое дело, что перед выполнением запроса идет оценка статистики.

И если, в настройках базы стоит AUTO_UPDATE_STATISTICS - перед выполнением запроса будет производится оценка. НО.

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

AUTO_UPDATE_STATISTICS_ASYC - почти тоже самое, только запрос не ждет обновления статистики а запускается на выполнение при этом создается фоновый процесс обновления статистики и 2 раз выполнения запроса будет использоваться новая стата.
3 breezee
 
22.06.24
23:52
(1) Спасибо, реально автопадейст он стоит. В курсах такого не было) (2) Большое спасибо за подробный ответ
4 Волшебник
 
23.06.24
07:39
(0) РегистрСведений1 - плохое название регистра
Измерение1 - плохое название измерения
5 breezee
 
23.06.24
07:50
(4) да, спасибо, знаю. Для теста запросов создал просто
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.