ALTER DATABASE REMOVE FILE занимает очень много времени - PullRequest
0 голосов
/ 24 октября 2019

Есть ли аналогия Мгновенная инициализация файла для удаления файлов БД? Если нет, есть ли хотя бы способ, как удалить файл без блокировки секционированной таблицы, в которой была файловая группав своей схеме разделов?

Мы наблюдаем очень длительное удаление относительно больших файлов данных (десятки ГБ), которые, однако, уже не содержат никаких данных. Это занимает от нескольких минут до десятков минут.

Полный сценарий:

У нас есть большие таблицы многораздельных данных, которые мы автоматически удаляем, обрезая ненужные разделы изатем удаление ненужных разделов с последующим объединением диапазона в функции разделов и удаление файловой группы.

Это упрощенный скрипт:

PRINT 'Space reclaim starting'
PRINT CONVERT( VARCHAR(24), GETUTCDATE(), 121)

TRUNCATE TABLE [A]
WITH (PARTITIONS (@OrdinalPartitionId))

--...

PRINT 'Truncates done'
PRINT CONVERT( VARCHAR(24), GETUTCDATE(), 121)

ALTER DATABASE [DATABASE_NAME]
REMOVE FILE [Filename]

PRINT 'File removed'
PRINT CONVERT( VARCHAR(24), GETUTCDATE(), 121)

ALTER PARTITION FUNCTION Fn()
MERGE RANGE (<PartId>)

PRINT ''Partition function range merged''
PRINT CONVERT( VARCHAR(24), GETUTCDATE(), 121)

ALTER DATABASE [DATABASE_NAME]  
REMOVE FILEGROUP [FILEGROUP]

PRINT 'Filegroup removed'
PRINT CONVERT( VARCHAR(24), GETUTCDATE(), 121)

Удаление файлов (ALTER DATABASE ... REMOVE FILE) занимаетвозраст, а что еще хуже - он запирает весь стол. Все остальное делается за второе время.

...