2015-09-14 5 views
0

любой скрипт в sql-сервере для поиска пространства, используемого временными таблицами + имя базы данных, где эта временная таблица была создана в tempdb?Нераспределяйте неиспользуемое пространство в сервере tempdb sql

Размер моего tempDb вырос до 100 Гб, и я не могу восстановить пространство и не знаю, что занимает столько места.

Спасибо за любую помощь.

ответ

3

Временных таблицы всегда получают созданную в базе данных TempDb. Однако нет необходимости, чтобы размер TempDb был обусловлен только временными таблицами. TempDb используются различными способами

  1. Внутренних объекты (Сортировка & золотника, КТР, восстановление индекса, хеширования и т.д.)
  2. объектов пользователя (временные таблицы, таблицы переменных)
  3. Версии магазина (ПОСЛЕ/ВМЕСТО триггеры, MARS)

так, как это ясно, что это является использование в различных SQL-операций, так что размер может расти из-за других причин также

Вы можете проверить белый при вызывает TempDB расти его размер с ниже запроса

SELECT 
SUM (user_object_reserved_page_count)*8 as usr_obj_kb, 
SUM (internal_object_reserved_page_count)*8 as internal_obj_kb, 
SUM (version_store_reserved_page_count)*8 as version_store_kb, 
SUM (unallocated_extent_page_count)*8 as freespace_kb, 
SUM (mixed_extent_page_count)*8 as mixedextent_kb 
FROM sys.dm_db_file_space_usage 

, если выше показывает запроса,

  • Большее число пользовательских объектов, то это означает, что существует более использование временных таблиц, курсоров или временных переменных
  • Более высокое количество внутренних объектов указывает, что в плане запросов используется много базы данных. Пример: сортировка, Группа по пру
  • Большего количества версий магазинов показывает Длинные транзакции бега или высоких пропускной способность транзакций

основан на том, что вы можете настроить TempDb размера файла. Недавно я написал статью о лучших настройках конфигурации TempDB. Вы можете прочитать, что here

+0

Спасибо за подробную информацию Anuj, это было действительно информативно. Темп db в моем случае увеличивался при запуске скрипта, у которого был оператор объединения с таблицей, в которой были дубликаты записей. Он должен был увеличить количество внутренних объектов, которые вы упомянули. – pso

0

Может быть, вы можете использовать следующую команду SQL в файлах БД временных отдельно

DBCC SHRINKFILE 

Пожалуйста, обратитесь к https://support.microsoft.com/en-us/kb/307487 для получения дополнительной информации

+0

Спасибо Eralper, но сначала я хотел бы узнать размеры каждой временной таблицы, а также то, что создает эти таблицы. – pso

+0

Проверьте следующий учебник http://www.kodyaz.com/articles/sql-server-exec-sp_msforeachdb-sp_msforeachtable-example-tsql-code.aspx Уже создан код, который выполняет sp_MSForEachTable с sp_spaceused для всех таблиц в база данных. Но я не уверен, что вы можете найти то, что вызывает создание темповых таблиц. – Eralper