Временные таблицы в 1С:Предприятие — это неотъемлемый инструмент для ускорения обработки данных, особенно при работе с большими объемами информации. Они позволяют снизить нагрузку на основную базу, кэшируя промежуточные результаты запросов, отчетов или сложных вычислений. Однако у многих администраторов и разработчиков возникает вопрос: где физически хранятся эти таблицы? Ответ зависит от режима работы (файловый или клиент-серверный), версии платформы и даже от настроек конкретной конфигурации.
В этой статье мы детально разберем все возможные варианты хранения временных таблиц — от классической файловой базы до распределенных SQL-серверов. Вы узнаете, как найти эти данные на диске, какие файлы за них отвечают, и как правильно управлять их очисткой без риска для работоспособности системы. Особое внимание уделим скрытым нюансам, которые часто становятся причиной ошибок при администрировании 1С.
Если вы когда-нибудь сталкивались с сообщениями типа "Недостаточно места для создания временной таблицы" или "Ошибка при работе с временным хранилищем", эта инструкция поможет разобраться в корне проблемы. А для разработчиков мы подготовили рекомендации по оптимизации работы с временными таблицами в коде.
1. Временные таблицы в файловой базе 1С: где и как хранятся
В файловом режиме работы 1С:Предприятие временные таблицы хранятся непосредственно в каталоге базы данных. Это самый простой для понимания, но и самый ограниченный вариант с точки зрения производительности. Все временные данные записываются в отдельные файлы с расширением .cdx и .tmp, которые создаются динамически по мере необходимости.
Основные особенности хранения в файловой базе:
- 📁 Расположение: временные файлы появляются в корневой папке базы (рядом с
1Cv8.1CD). Имена файлов обычно начинаются с префиксаv8илиtemp, например:v8temp_12345.cdx. - 🔄 Удаление: файлы должны автоматически очищаться при корректном завершении сеанса. Однако при аварийном закрытии 1С они могут оставаться на диске, занимая место.
- ⚠️ Ограничение: размер временных файлов ограничен свободным местом на диске. При нехватке пространства вы получите ошибку
"Недостаточно места для операции".
Чтобы вручную найти и удалить временные файлы (если они не очистились автоматически), выполните следующие шаги:
- Закройте все сеансы 1С:Предприятие, работающие с этой базой.
- Перейдите в папку с базой данных (например,
C:\Bases\MyBase\). - Отсортируйте файлы по дате изменения — временные файлы обычно имеют свежие метки.
- Удалите файлы с расширениями
.tmpи.cdx, имена которых содержатtempилиv8.
Перед ручной очисткой временных файлов обязательно сделайте резервную копию базы! В редких случаях удаление "живых" временных данных может привести к повреждению сеанса.
2. Клиент-серверный режим: временные таблицы на сервере 1С
В клиент-серверном режиме (при использовании сервера 1С:Предприятие) временные таблицы хранятся иначе. Здесь за их обработку отвечает серверный процесс ragent, а физическое хранение зависит от настроек кластера серверов. По умолчанию временные данные размещаются в рабочем каталоге сервера, но путь можно переназначить в конфигурационном файле.
Ключевые моменты для клиент-серверного режима:
- 🖥️ Расположение по умолчанию:
C:\Program Files\1cv8\srvinst\<имя_кластера>\temp\(для Windows) или/opt/1C/v8.3/<имя_кластера>/temp/(для Linux). - 📝 Настройка пути: путь к временным файлам можно изменить в файле конфигурации кластера
conf.cfg, добавив параметрTempDataPath. - 🔒 Права доступа: убедитесь, что у пользователя, под которым работает сервер 1С, есть права на запись в указанную папку.
Пример настройки пути для временных таблиц в conf.cfg:
# Путь к временным данным сервера 1С
TempDataPath = D:\1C_TempData\
3. Временные таблицы в SQL-базах: особенности хранения
Если ваша 1С работает с SQL-сервером (Microsoft SQL Server, PostgreSQL, IBM DB2), временные таблицы могут храниться как в файловой системе сервера 1С, так и непосредственно в tempdb — системной базе данных SQL. Выбор механизма зависит от версии платформы и настроек совместимости.
Разберем два основных сценария:
| Сценарий | Где хранятся временные таблицы | Особенности |
|---|---|---|
| Совместимость 8.2 и ниже | В файловой системе сервера 1С (аналогично клиент-серверному режиму) | Используются файлы .cdx и .tmp. Медленнее, но совместимо со старыми конфигурациями. |
| Совместимость 8.3.6+ | В tempdb SQL-сервера |
Быстрее, но требует достаточного места на SQL-сервере. Настройки tempdb критически важны. |
| Гибридный режим | Часть в файловой системе, часть в tempdb |
Возможно при переходных настройках или специфических запросах. |
Для проверки текущего режима хранения временных таблиц в SQL-базе выполните следующий запрос к системной таблице 1С:
SELECT * FROM v8params WHERE name = 'UseTempDBForTempTables'
Если значение параметра 1 — временные таблицы хранятся в tempdb. Если 0 — в файловой системе сервера 1С.
В SQL-режиме настройка tempdb (размер, авторасширение) напрямую влияет на производительность временных таблиц. Рекомендуемый размер — не менее 20-30% от размера основной базы.
4. Как очистить временные таблицы без риска для данных
Некорректная очистка временных таблиц может привести к повреждению активных сеансов или потере промежуточных данных отчетов. Поэтому важно следовать безопасным методам. Вот проверенные способы:
- 🔄 Перезапуск сервера 1С: самый безопасный способ — перезагрузить сервер 1С:Предприятие (службу
ragent). При этом все временные данные будут очищены автоматически. - 🗑️ Ручная очистка: если временные файлы остались после аварийного завершения, их можно удалить вручную (см. раздел 1). Но только после закрытия всех сеансов!
- 📊 SQL-команда для tempdb: если временные таблицы хранятся в SQL, выполните:
Внимание: это очистит кэш для всех баз на сервере, что может временно снизить производительность.DBCC FREEPROCCACHEDBCC FREESYSTEMCACHE('tempdb')
Для автоматизации очистки временных файлов на сервере 1С можно создать задачу в Планировщике Windows или cron (Linux), которая будет запускать скрипт удаления устаревших файлов. Пример батника для Windows:
@echo off
cd /d "D:\1C_TempData\"
forfiles /p . /s /m temp.* /d -7 /c "cmd /c del @path"
Этот скрипт удаляет все файлы с temp в имени, старше 7 дней.
Убедиться, что все пользователи вышли из базы|Проверить активные сеансы в Консоли администрирования|Сделать резервную копию базы|Очистить файлы или перезапустить сервер|Проверить свободное место на диске-->
5. Ошибки, связанные с временными таблицами, и их решения
Работа с временными таблицами может сопровождаться ошибками, которые часто ставят администраторов в тупик. Рассмотрим наиболее распространенные проблемы и способы их устранения.
1. "Недостаточно места для создания временной таблицы"
- 🔹 Причина: не хватает места на диске, где хранятся временные файлы (или в
tempdbдля SQL). - 🔹 Решение:
- Очистите диск от ненужных файлов.
- Для SQL увеличьте размер
tempdbили настройте авторасширение. - Перенастройте путь хранения временных таблиц на диск с большим свободным местом.
2. "Ошибка при открытии временного хранилища"
- 🔹 Причина: повреждение временных файлов или отсутствие прав доступа.
- 🔹 Решение:
- Удалите временные файлы вручную (см. раздел 4).
- Проверьте права на папку хранения (сервис
ragentдолжен иметь полный доступ). - Перезапустите сервер 1С.
3. "Превышен лимит временных таблиц"
- 🔹 Причина: в конфигурации или настройках сервера установлено ограничение на количество временных таблиц.
- 🔹 Решение:
- Проверьте параметр
MaxTempTablesвconf.cfg(по умолчанию — 1000). - Для SQL-режима увеличьте лимиты в
tempdb. - Оптимизируйте запросы в конфигурации, чтобы уменьшить использование временных таблиц.
- Проверьте параметр
Что делать, если ошибка повторяется после всех действий?
Если очистка временных файлов и перезапуск сервера не помогают, проблема может быть глубже:
1. Проверьте целостность базы данных (тестирование и исправление через Конфигуратор).
2. Обновите платформу 1С до последней версии — в старых релизах были баги с работой временных таблиц.
3. Для SQL-режима выполните реиндексацию системных таблиц, особенно если ошибка сопровождается сообщениями о блокировках.
6. Оптимизация работы с временными таблицами для разработчиков
Если вы разработчик 1С, то можете влиять на то, как и где создаются временные таблицы. Несколько советов по оптимизации:
1. Явное управление временными таблицами
Вместо того чтобы полагаться на автоматическое создание временных таблиц, используйте явные конструкции в коде:
Запрос = Новый Запрос;
Запрос.ВременныеТаблицы.Добавить("ВременнаяТаблица1");
Это дает больше контроля над их жизненным циклом.
2. Ограничение объема данных
Избегайте выборки всех полей из больших таблиц. Используйте конструкцию ВЫБРАТЬ ПЕРВЫЕ 1000 или фильтры по датам, если это возможно:
ВЫБРАТЬ ПЕРВЫЕ 1000
Товар.Наименование,
Товар.Артикул
ИЗ
Каталог.Товары КАК Товар
3. Использование индексов
Если временная таблица создается часто, добавьте индексы для ускорения запросов:
Запрос.Текст =
"ВЫБРАТЬ
| Товар.Наименование КАК Наименование,
| Товар.Артикул КАК Артикул
|ИЗ
| Каталог.Товары КАК Товар
|ИНДЕКСИРОВАТЬ ПО
| Наименование";
4. Контроль за размером
Следите за размером временных таблиц в Журнале регистрации (раздел "Производительность"). Если таблица превышает 100 МБ, стоит пересмотреть логику запроса.
Избегайте создания временных таблиц в циклах! Лучше один раз сформировать большую таблицу, чем многократно пересоздавать мелкие. Это сократит нагрузку на диск и ускорит выполнение.
7. Мониторинг и диагностика временных таблиц
Для проактивного управления временными таблицами настройте мониторинг их использования. Вот ключевые инструменты и методы:
1. Журнал регистрации 1С
Включите регистрацию событий, связанных с временными таблицами:
- Перейдите в
Администрирование → Журнал регистрации. - Добавьте фильтр по событиям:
"Создание временной таблицы","Ошибка временной таблицы". - Настройте оповещения при превышении пороговых значений (например, размер таблицы > 500 МБ).
2. SQL Profiler для баз на MS SQL Server
Если используете Microsoft SQL Server, запустите SQL Profiler и отфильтруйте события по:
TempTableCreateTempTableDropTempdb Space Usage
3. Системные представления SQL
Для анализа использования tempdb выполните запрос:
SELECT
SUM(unallocated_extent_page_count) * 8 AS [free_space_MB],
SUM(user_object_reserved_page_count) * 8 AS [used_by_user_MB],
SUM(internal_object_reserved_page_count) * 8 AS [used_by_internal_MB]
FROM sys.dm_db_file_space_usage;
4. Внешние инструменты
Для комплексного мониторинга можно использовать:
- 📊 Zabbix с шаблонами для 1С и SQL.
- 📈 Grafana + Prometheus для визуализации метрик.
- 🛠️ 1C:Enterprise Development Tools (EDT) для анализа производительности.
FAQ: Частые вопросы о временных таблицах 1С
Можно ли перенести временные таблицы на другой диск?
Да, в клиент-серверном режиме путь хранения временных таблиц настраивается в файле conf.cfg параметром TempDataPath. Для файловой базы перенос возможен только путем перемещения всей базы на другой диск.
Почему временные таблицы не очищаются автоматически?
Это может происходить из-за:
- Аварийного завершения сеанса 1С (например, при падении сервера или отключении электричества).
- Ошибок в коде конфигурации, где временные таблицы создаются, но не удаляются явно.
- Нехватки прав у сервиса
ragentна удаление файлов.
Решение: настройте автоматическую очистку через планировщик задач или исправьте код конфигурации.
Как узнать, сколько места занимают временные таблицы в SQL?
Выполните запрос к системным представлениям:
SELECT
SUM(user_object_reserved_page_count) * 8 AS [UsedByTempTables_MB]
FROM sys.dm_db_file_space_usage
WHERE database_id = DB_ID('tempdb');
Это покажет объем, занятый пользовательскими объектами (в том числе временными таблицами) в tempdb.
Влияют ли временные таблицы на производительность?
Да, и очень сильно! Чрезмерное использование временных таблиц может:
- Замедлить выполнение запросов из-за дискового ввода-вывода.
- Привести к фрагментации
tempdbв SQL-режиме. - Вызвать ошибки блокировок, если несколько сеансов одновременно работают с большими временными наборами данных.
Рекомендация: оптимизируйте запросы, чтобы минимизировать объем временных данных.
Можно ли отключить использование временных таблиц?
Нет, полностью отключить временные таблицы нельзя — они являются частью механизма работы платформы 1С. Однако вы можете:
- Сократить их использование за счет оптимизации кода (например, избегать лишних объединений таблиц).
- Настроить хранение в
tempdbдля SQL-режима (быстрее, чем файловая система). - Увеличить лимиты и квоты на сервере для уменьшения ошибок.