Работа с базой TempDB

Системная база данных TEMPDB участвует в работе пользователей, подключённых ко всем пользовательским базам данных сервера СУБД.

TEMPDB используется при работе с временными таблицами и процедурами, в ней создаются внутренние (internal) и пользовательские объекты (user objects) промежуточных результатов запросов и т.п..

При запуске сервера, TEMPDB создаётся заново, если  TEMPDB по каким то причинам не может быть создана, то сервер СУБД не запуститься. По умолчанию размер этой базы данных неограничен и увеличение его осуществляется при необходимости автоматически, порциями по 10% от текущего размера TEMPDB, однако эти параметры могут быть переопределены пользователем. По умолчанию, минимальный размер этой базы данных, который устанавливается при старте Microsoft SQL Server, определяется размером системной базы данных MODEL. Очистка журнала транзакций в этой базе данных производится автоматически, при этом удаляются только неактивные записи журнала транзакций.

При работе 1С:Предприятия 8 в режиме клиент-сервер широко используются временные таблицы. Кроме того, TEMPDB используется Microsoft SQL Server при выполнении запросов, использующих операторы GROUP BY, ORDER BY, UNION, SORT, DISTINCT и т.п.

Наиболее частой проблемой, с которой сталкиваются пользователи, является значительное увеличение размера базы TEMPDB. Причиной увеличения размера базы данных TEMPDB, как правило, является невозможность автоматической очистки журнала транзакций и повторного использования свободного пространства в TEMPDB из-за наличия активных транзакций, использующих объекты этой базы данных.

Какие могут быть решения данной проблемы:

1. Перезапустить MS SQL Server. В этом случае размер базы данных TEMPDB будет установлен по умолчанию.

2. Сжать базу данных TEMPDB. Для этого нужно в Query Analyzer выполнить следующую команду: DBCC SHRINKDATABASE (TEMPDB).

3. Уменьшить размер отдельных файлов. Для этого нужно в Query Analyzer выполнить команды:

DBCC SHRINKFILE (Логическое_Имя_Файла_Данных, Желаемый_Размер_Файла_Данных_В_Мегабайтах)
go
DBCC SHRINKFILE (Логическое_Имя_Файла_Журнала_Транзакций,
Желаемый_Размер_Файла_Журнала_Транзакций_В_Мегабайтах)
go

Пример.

Уменьшение размера файлов базу TEMPDB до 20 мегабайт

USE TempDB
DBCC SHRINKFILE (tempdev, 20)
go
DBCC SHRINKFILE (templog,20)
go

Пункты 2 и з также можно выполнить с помощью Management Studio

Сжатие базы TempDB

4. Переместить базу данных TEMPDB нас диск большего размера. Изменить месторасположение файлов базы данных TEMPDB можно с помощью команды ALTER DATABASE. Для этого нужно в Query Analyzer выполнить следующую последовательность команд и перезапустить сервер СУБД:

USE master
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = ‘Новый_Диск:\Новый_Каталог\tempdb.mdf’)
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = ‘Новый_Диск:\Новый_Каталог\templog.ldf’)
GO

В завершении еще парочка советов по работе с базой TEMPDB:

1. Для оптимизации работы базы данных TEMPDB рекомендуется ее вынесение на отдельный жёсткий диск или RAM-диск и разбиение MDF файла на части (одинакового размера) по числу процессоров (ядер): если процессоров < 8, то количество файлов = количество процессоров; если процессоров > 8, то количество файлов для начала 8, а затем добавлять по мере необходимости.

2. При использовании временных таблиц используется кеширование, но это не относится к операциям создания индексов, сортировки, группировки и т.п. Например: создали таблицу, построили индекс (что разумно с точки зрения построения плана), то данная таблица кешироваться не будет. Но если таблица очень маленькая и почти наверняка она  SQL-сервером будет сканироваться и создается она очень часто, то возможно имеет смыл операцию создания индекса опустить, в этом случае за счет кеширования таблица будет создаваться быстрее.

Популярность: 45%

Запись опубликована в рубрике Настройка и оптимизация с метками . Добавьте в закладки постоянную ссылку.

3 комментария на «Работа с базой TempDB»

  1. Николай говорит:

    Не могли бы Вы более подробно прокомментировать данный пункт

    • Сергей Сопелев говорит:

      В работе с «1С Предприятие 8» в запросах очень часто используются временные таблицы, а это 90% использование базы TempDB. Соответственно нужен быстрый доступ к этой базе, а организовать его можно разными способами: нарастить оперативки и выделить отдельный диск в памяти и поместить туда TempDB, купить SSD диски и туда вынести базы и т.д. Что касается разбиения TemDB на несколько файлов, то данную информацию я подсмотрел в данном видео Работ с TempDB. Попробовал — хуже не стало, специальные замеры не делал, но по работе заметно, что стало немножко лучше.

  2. Руслан говорит:

    Привет!
    Если использовать ssd для пользовательских баз sql и tempdb типа intel 530 (которые по сути не серверные), советуют раздел делать на 20-30% меньше размера диска. Сейчас уже не вспомню ссылку где это было написанно. В общей сложности, при использовании двух ssd (на одном база tempdb, на другом файлы баз 1с) прирост к скорости работы был очень существенный. Правда одновременно работающих пользователей не много ~30. Конфигурация ут 11.1

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *