sp_spaceused (Transact-SQL)

Выводит количество строк, зарезервированное место на диске и место на диске, которое используется таблицей, индексированным представлением или очередью компонента Service Broker в текущей базе данных, либо выводит место на диске, зарезервированное и используемое всей базой данных.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

sp_spaceused [[ @objname = ] 'objname' ] 
[,[ @updateusage = ] 'updateusage' ]

Аргументы

  • [ @objname=] 'objname'
    Полное или неполное имя таблицы, индексированного представления или очереди, для которых были запрошены сведения по использованию места на диске. Кавычки необходимы только в том случае, если указано уточненное имя объекта. Если указано полностью уточненное имя, включающее имя базы данных, именем базы данных должно быть имя текущей базы данных.

    Если аргумент objname не указан, результаты возвращаются для всей базы данных.

    Аргумент objname имеет тип nvarchar(776) и значение по умолчанию NULL.

  • [ @updateusage=] 'updateusage'
    Указывает, что для обновления сведений об использовании места на диске следует запустить инструкцию DBCC UPDATEUSAGE. Если аргумент objname не указан, инструкция запускается в отношении всей базы данных. В противном случае она запускается в отношении объекта objname. Возможные значения: true или false. Аргумент updateusage имеет тип varchar(5) и значение false по умолчанию.

Значения кода возврата

0 (успешное завершение) или 1 (ошибка)

Результирующие наборы

Если аргумент objname не указан, возвращаются следующие результирующие наборы для предоставления сведений о текущем размере базы данных.

Имя столбца

Тип данных

Описание

database_name

nvarchar(128)

Имя текущей базы данных.

database_size

varchar(18)

Размер текущей базы данных в мегабайтах. Значение database_size включает как файлы данных, так и файлы журналов.

unallocated space

varchar(18)

Место в базе данных, не зарезервированное для объектов базы данных.

Имя столбца

Тип данных

Описание

reserved

varchar(18)

Общий объем пространства, выделенный объектам в базе данных.

data

varchar(18)

Общий объем пространства, используемый данными.

index_size

varchar(18)

Общий объем пространства, используемый индексами.

unused

varchar(18)

Общий объем пространства, зарезервированный для объектов в базе данных, но пока не используемый.

Если указан аргумент objname, для указанного объекта возвращается следующий результирующий набор.

Имя столбца

Тип данных

Описание

name

nvarchar(128)

Имя объекта, для которого были запрошены сведения об используемом пространстве.

Имя схемы объекта не возвращается. Если требуется имя схемы, для получения эквивалентных сведений о размере используется динамическое административное представление sys.dm_db_partition_stats или sys.dm_db_index_physical_stats.

rows

char(11)

Количество существующих строк в таблице. Если объект указан как очередь компонента Service Broker, этот столбец указывает число сообщений в очереди.

reserved

varchar(18)

Общий объем зарезервированного пространства для объекта objname.

data

varchar(18)

Общий объем пространства, используемый данными объекта objname.

index_size

varchar(18)

Общий объем пространства, используемый индексами объекта objname.

unused

varchar(18)

Общий объем пространства, зарезервированный для объекта objname, но пока не используемый.

Замечания

Значение столбца database_size всегда будет больше, чем сумма значений столбцов reserved + unallocated space, потому что он включает размер файлов журналов, а значения столбцов reserved и unallocated_space учитывают только страницы данных.

Страницы XML-индексов и полнотекстовых индексов в обоих результирующих наборах включены в значение столбца index_size. Если указан аргумент objname, страницы XML-индексов и полнотекстовых индексов для этого объекта также учитываются в общих результирующих значениях reserved и index_size.

Если вычисляется используемое место на диске для базы данных или объекта с пространственным индексом, то столбцы, относящиеся к пространственным размерам, такие как database_size, reserved и index_size, содержат размер пространственного индекса.

Если указан аргумент updateusage, компонент SQL Server Database Engine просматривает страницы данных в базе данных и вносит все необходимые изменения в представления каталога sys.allocation_units и sys.partitions в отношении места для хранения каждой таблицы. Иногда возникают ситуации, например при удалении индекса, когда сведения о таблице могут устареть. Если указан аргумент updateusage, выполнение процедуры может занимать некоторое время при запуске в отношении больших таблиц или баз данных. Используйте аргумент updateusage только в том случае, если есть сомнения в достоверности возвращаемых значений и если выполнение процедуры не будет неблагоприятно влиять на других пользователей и процессы в базе данных. При необходимости инструкцию DBCC UPDATEUSAGE можно запускать отдельно.

ПримечаниеПримечание

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

Разрешения

Разрешение на выполнение процедуры sp_spaceused предоставлено роли public. Аргумент @updateusage указывается только членами предопределенной роли базы данных db_owner.

Примеры

А. Вывод сведений о месте на диске для таблицы

В следующем примере предоставляются сведения о месте на диске для таблицы Vendor и ее индексах.

USE AdventureWorks2008R2;
GO
EXEC sp_spaceused N'Purchasing.Vendor';
GO

Б. Вывод обновленных сведений о месте на диске для базы данных

В следующем примере приводятся итоговые сведения об использовании места на диске текущей базой данных с применением необязательного параметра @updateusage, чтобы получить достоверные текущие значения.

USE AdventureWorks2008R2;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
GO