Робота з базою 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 до 50 мегабайт:
USE TempDB
DBCC SHRINKFILE (tempdev, 50)
go
DBCC SHRINKFILE (templog, 50)
go

Перемістити базу даних 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 рекомендується її винесення на окремий жорсткий диск або RAM-диск і розбиття MDF файлу на частини (однакового розміру) по числу процесорів (ядер): якщо процесорів <8, то количество файлов = количество процессоров; если процессоров> 8, то кількість файлів для початку 8, а потім додавати по мірі необхідності.

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

Схожі статті