Содержание:
2. Как производить индексирование таблиц
3. Удаление временных таблиц в конфигурации системы 1С
1. Что такое временные таблицы в запросе 1С и их хранение
Временные таблицы в запросе 1С – это особые объекты системы управления базами данных (СУБД). Не стоит путать с таблицами значений, которые хранятся на 1С сервере. Они используются внутри 1С кода для повышения его производительности.
Глобально, временные таблицы в системе 1С хранятся в оперативной памяти, либо на жёстком диске. А если рассматривать более локально, то создание и хранение временных таблиц происходит обычно внутри базы TempDB. Если углубиться в вопрос подробнее, то можно понять, что по стандартным настройкам временные таблицы в запросе 1С создаются внутри оперативной памяти, внутри буферного кэша. Однако, следует отметить, что есть исключение – это тот вариант, когда временная таблица в системе 1С имеет слишком большой размер, в таком случае – таблица будет записана на диск.
Временные таблицы в запросе 1С создаются в памяти потому что чтение с оперативной памяти будет, в любом случае, быстрее, чем чтение с диска.
Экспериментально проверим где будет создана временная таблица в системе 1С, для этого нужно внутри консоли прописать такой запрос:
Внутри консоли прописываем запрос
Далее нужно запустить трассировку SQL Profiler, с событием SQL:BatchComplited, и выполним внутри консоли запрос, результатом которого будет:
Выполнение внутри консоли запрос 8.2, его результат
Таким образом, увидим лишь внесение данных (заполнение) временной таблицы в запросе 1С, код создания отображён не будет.
Для начала, определим откуда происходит считка сведений, для этого нужно знать считываются данные с диска или с памяти. Воспользуемся, чтобы это выяснить, показатель physical reads (данный показатель отвечает за количество чтений перед выполнением запроса, страницы по 8Кб). Далее создаём и читаем временную таблицу в системе 1С внутри Management Studio, чтобы узнать величину показателя.
В новом запросе нужно прописать следующее по порядку:
В новом запросе прописываем следующее
Как только код выше будет выполнен, то во вкладке «Сообщения» будет текст такого вида:
Вкладка «Сообщение»
Наиболее важное из такого сообщения – это число физических чтений, которое равно 0, и число логических чтений, которое равно единице, - что означает, что сведения читались лишь из самой памяти.
2. Как производить индексирование таблиц
На экзамене 1С требуют проводить индексацию полей внутри временных таблиц в системе 1С, в обязательном порядке. В обычной работе также используют индексирование таблиц, так как она стала уже привычной, однако с ней запросы выполняются медленнее. Стоит отметить, что случаев, когда индексация не нужна гораздо больше, чем обратных, это связано, в первую очередь, с оптимизацией.
Посмотрим, как на самом деле работает индексирование таблиц. Для начала, нужно создать новую временную таблицу в запросе 1С, которая будет иметь одно числовое поле со значениями от одного до одного миллиона. Это будет делаться через такой пакетный запрос:
Пакетный запрос
Запрос будет осуществлён примерно за 1.2 секунды. В трассировке SQL Profiler будет следующее:
Tрассировка SQL Profiler
Таблица будет создана за 1.1 секунды, а за 0.1 секунду будет произведено сканирование всей таблицы для возврата одной строки. Рассмотрим, что поменяется, если добавить индекс в таблицу ВТ_Числа.
Запрос будет выполнен примерно за 6 секунд. Таблица будет создаваться за 5.3 секунды. А поиск по индексу будет проходить за 0.5 секунд, однако без индекса будет длиться 0.1 секунды. Преимуществом запроса с индексированием будет то, что он имеет меньшее количество логических чтений (2057, а не 2233).
3. Удаление временных таблиц в конфигурации системы 1С
Рассмотрим то, нужно ли удалять временные таблицы в конфигурации системы 1С, после того, как они были созданы. Это будет зависеть от того, каким способом создавалась таблица. Для случая, когда временная таблица в запросе 1С была задействована для одного пакетного запроса, то она будет существовать до выполнения пакетного запроса, то есть, менеджер временных таблиц создан скрыто. В таком случае, MS SQL создаст новую временную таблицу в системе 1С ЕРП, которая будет локальной, и она будет иметь одну решётку. По окончанию пакетного запроса, менеджер временных таблиц 1С будет закрыт и будет команда «Truncate table», - именно она удалит временную таблицу.
В случае наличия индексации таблицы – сначала будет она удалена, а потом сама таблица.
Если используется менеджер временных таблиц 1С, то лучше удалять таблицу при помощи команды «Уничтожить», или же при помощи метода МВТ.Закрыть().
Специалист компании "Кодерлайн"
Айдар Фархутдинов