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 AdventureWorks2012;
GO
EXEC sp_spaceused N'Purchasing.Vendor';
GO
Б.Вывод обновленных сведений о занимаемом месте на диске для базы данных
В следующем примере приводятся итоговые сведения об использовании места на диске текущей базой данных с применением необязательного параметра @updateusage, чтобы получить достоверные текущие значения.
USE AdventureWorks008R2;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
GO
См. также
Справочник
Инструкция CREATE TABLE (Transact-SQL)
DBCC UPDATEUSAGE (Transact-SQL)
sys.allocation_units (Transact-SQL)
sys.index_columns (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)