Перейти к основному содержанию

MSSQL — изменить количество файлов в tempdb

Microsoft SQL Server

Допустим, у нас в tempdb только один файл данных и один файл лога. Иногда требуется добавить файлы данных.

К примеру, добавим ещё семь файлов данных:

USE [master]
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev1', FILENAME = N'R:\tempdb1.mdf' , SIZE = 8192KB , FILEGROWTH = 102400KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'R:\tempdb2.mdf' , SIZE = 8192KB , FILEGROWTH = 102400KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'R:\tempdb3.mdf' , SIZE = 8192KB , FILEGROWTH = 102400KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev4', FILENAME = N'R:\tempdb4.mdf' , SIZE = 8192KB , FILEGROWTH = 102400KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev5', FILENAME = N'R:\tempdb5.mdf' , SIZE = 8192KB , FILEGROWTH = 102400KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev6', FILENAME = N'R:\tempdb6.mdf' , SIZE = 8192KB , FILEGROWTH = 102400KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev7', FILENAME = N'R:\tempdb7.mdf' , SIZE = 8192KB , FILEGROWTH = 102400KB )
GO

Здесь:

  • NAME — название файла данных
  • FILENAME — полный путь к файлу данных
  • SIZE — размер, в данном случае начальный, 8 МБ
  • FILEGROWTH — автоматический прирост, я поставил 100 МБ

Можно ещё указывать при необходимости:

  • MAXSIZE — максимальный размер, например, MAXSIZE = 35840000KB

tempdb

Удалить файл данных

Если нужно удалить один из файлов данных...

USE tempdb
GO
CHECKPOINT
GO
USE tempdb
GO
DBCC SHRINKFILE (tempdev7, EMPTYFILE)
ALTER DATABASE tempdb REMOVE FILE tempdev7
GO

Более сильное колдунство удаления:

USE [tempdb]
GO
DBCC DROPCLEANBUFFERS
GO
DBCC FREEPROCCACHE
GO
DBCC FREESESSIONCACHE
GO
DBCC FREESYSTEMCACHE ( 'ALL')
GO
DBCC SHRINKFILE (N'temp7' , EMPTYFILE)
GO
ALTER DATABASE [tempdb] REMOVE FILE temp7
GO

Если файлы заблокированы, то изменяем размер и рост файла. Затем перезапускаем службу SQL. Файлы маленькие и заблокированы для роста? можно их легко удалить.

--before the sql server restart
USE [master]
ALTER DATABASE TempDB MODIFY FILE
(NAME = temp7, SIZE = 1KB, FILEGROWTH = 0 )
GO

--then after the sql server restart
USE [TempDB]
DBCC SHRINKFILE (N'temp7' , EMPTYFILE)
GO
ALTER DATABASE [tempdb] REMOVE FILE [temp7]
GO

Теги

 

Похожие материалы

MSSQL — уменьшаем Initial Size в tempdb

Срочно понадобилось уменьшить размер tempdb. Можно выполнить сжатие, перезапуск сервера, танцы с бубнами. Всё это уменьшит размер tempdb, но не сделает его меньше Initial Size. И это большая проблема, особенно для тех экземпляров, где база tempdb вынесена в оперативную память.

Теги