sp_spaceused (Transact-SQL)

Область применения: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Synapse Analytics Analytics Platform System (PDW)

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

Topic link iconСинтаксические обозначения в Transact-SQL

Синтаксис

sp_spaceused [[ @objname = ] 'objname' ]   
[, [ @updateusage = ] 'updateusage' ]  
[, [ @mode = ] 'mode' ]  
[, [ @oneresultset = ] oneresultset ]  
[, [ @include_total_xtp_storage = ] include_total_xtp_storage ]

Примечание

Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

Аргументы

Для Azure Synapse Аналитики и системы платформы аналитики (PDW) sp_spaceused необходимо указать именованные параметры (напримерsp_spaceused (@objname= N'Table1');, вместо того, чтобы полагаться на порядковое положение параметров.

[ @objname = ] 'objname'

Полное или неполное имя таблицы, индексированного представления или очереди, для которых были запрошены сведения по использованию места на диске. Кавычки необходимы только в том случае, если указано уточненное имя объекта. Если указано полностью уточненное имя, включающее имя базы данных, именем базы данных должно быть имя текущей базы данных.
Если objname не задано, результаты возвращаются для всей базы данных.
objnamenvarchar(776) с значением NULL по умолчанию.

Примечание

Azure Synapse Аналитика и система платформы аналитики (PDW) поддерживают только объекты базы данных и таблиц.

[ @updateusage = ] 'updateusage' Указывает, что инструкция DBCC UPDATEUSAGE должна выполняться для обновления сведений об использовании пространства. Если objname не указано, инструкция выполняется во всей базе данных; в противном случае инструкция выполняется в objname. Значения могут быть истинными или ложными. updateusagevarchar(5), по умолчанию — false.

[ @mode = ] 'mode' Указывает область результатов. Для растянутой таблицы или базы данных параметр режима позволяет включить или исключить удаленную часть объекта. Дополнительные сведения см. в разделе Stretch Database.

Важно!

Службу Stretch Database не рекомендуется использовать в предварительной версии SQL Server 2022 (16.x). В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

Аргумент режима может иметь следующие значения:

Значение Описание
ALL Возвращает статистику хранилища объекта или базы данных, включая локальную часть и удаленную часть.
LOCAL_ONLY Возвращает статистику хранилища только локальной части объекта или базы данных. Если объект или база данных не включена в Stretch, возвращает ту же статистику, что и если @mode = ALL.
REMOTE_ONLY Возвращает статистику хранилища только удаленной части объекта или базы данных. Этот параметр вызывает ошибку, если выполняется одно из следующих условий:

Таблица не включена для Stretch.

Таблица включена для Stretch, но вы никогда не включили миграцию данных. В этом случае удаленная таблица еще не имеет схемы.

Пользователь вручную снял удаленную таблицу.

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

режимvarchar(11) с значением по умолчанию N'ALL.

[ @oneresultset = ] oneresultset Указывает, следует ли возвращать один результирующий набор. Аргумент oneresultset может иметь следующие значения:

Значение Описание
0 Если @objname имеет значение NULL или не указано, возвращаются два результирующих набора. Два результирующих набора — это поведение по умолчанию.
1 Если @objname = null или не указан, возвращается один результирующий набор.

oneresultset имеет бит, по умолчанию — 0.

[ @include_total_xtp_storage] 'include_total_xtp_storage'Применимо к: SQL Server 2017 (14.x), База данных SQL.

Когда @oneresultset=1параметр @include_total_xtp_storage определяет, включает ли один набор результатов столбцы для MEMORY_OPTIMIZED_DATA хранилища. Значение по умолчанию равно 0, то есть по умолчанию (если параметр опущен) столбцы XTP не включаются в набор результатов.

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

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

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

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

Имя столбца Тип данных Описание
database_name nvarchar(128) Имя текущей базы данных.
database_size varchar(18) Размер текущей базы данных в мегабайтах. database_size включает файлы данных и журналов.
unallocated space varchar(18) Место в базе данных, не зарезервированное для объектов базы данных.
Имя столбца Тип данных Описание
Защищены varchar(18) Общий объем пространства, выделенный объектам в базе данных.
data varchar(18) Общий объем пространства, используемый данными.
index_size varchar(18) Общий объем пространства, используемый индексами.
unused varchar(18) Общий объем пространства, зарезервированный для объектов в базе данных, но пока не используемый.

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

Имя столбца Тип данных Описание
database_name nvarchar(128) Имя текущей базы данных.
database_size varchar(18) Размер текущей базы данных в мегабайтах. database_size включает файлы данных и журналов.
unallocated space varchar(18) Место в базе данных, не зарезервированное для объектов базы данных.
Защищены 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(20) Количество существующих строк в таблице. Если указанный объект является очередью компонента Service Broker, этот столбец указывает количество сообщений в очереди.
Защищены varchar(18) Общий объем зарезервированного пространства для objname.
data varchar(18) Общий объем пространства, используемого данными в objname.
index_size varchar(18) Общий объем пространства, используемого индексами в objname.
unused varchar(18) Общий объем пространства, зарезервированного для objname , но еще не использован.

Это режим по умолчанию, если параметры не указаны. Следующие результирующие наборы возвращают подробные сведения о размере базы данных на диске.

Имя столбца Тип данных Описание
database_name nvarchar(128) Имя текущей базы данных.
database_size varchar(18) Размер текущей базы данных в мегабайтах. database_size включает файлы данных и журналов. Если база данных имеет MEMORY_OPTIMIZED_DATA файловую группу, это включает общий размер всех файлов контрольных точек на диске в файловой группе.
unallocated space varchar(18) Место в базе данных, не зарезервированное для объектов базы данных. Если база данных имеет MEMORY_OPTIMIZED_DATA файловую группу, это включает общий размер файлов контрольных точек на диске с состоянием PRECREATED в файловой группе.

Пространство, используемое таблицами в базе данных: (этот набор результатов не отражает оптимизированные для памяти таблицы таблицы, так как нет учета использования дисков для каждой таблицы).

Имя столбца Тип данных Описание
Защищены varchar(18) Общий объем пространства, выделенный объектам в базе данных.
data varchar(18) Общий объем пространства, используемый данными.
index_size varchar(18) Общий объем пространства, используемый индексами.
unused varchar(18) Общий объем пространства, зарезервированный для объектов в базе данных, но пока не используемый.

Следующий результирующий набор возвращается только в том случае, если база данных имеет MEMORY_OPTIMIZED_DATA файловую группу с хотя бы одним контейнером:

Имя столбца Тип данных Описание
xtp_precreated varchar(18) Общий размер файлов контрольных точек с предварительно созданным состоянием в КБ. Подсчитывает нераспределенный объем пространства в базе данных в целом. [Например, если имеется 600 000 КБ предварительно созданных файлов контрольных точек, этот столбец содержит 600000 КБ]
xtp_used varchar(18) Общий размер файлов контрольных точек с состояниями UNDER CONSTRUCTION, ACTIVE и MERGE TARGET в КБ. Это место на диске, активно используемое для данных в таблицах, оптимизированных для памяти.
xtp_pending_truncation varchar(18) Общий размер файлов контрольных точек с WAITING_FOR_LOG_TRUNCATION состояния в КБ. Это место на диске, используемое для файлов контрольных точек, ожидающих очистки, после усечения журнала.

Если значение objname опущено, значение oneresultset равно 1, а include_total_xtp_storage равно 1, возвращается следующий результирующий набор для предоставления сведений о текущем размере базы данных. Если include_total_xtp_storage значение равно 0 (значение по умолчанию), последние три столбца опущены.

Имя столбца Тип данных Описание
database_name nvarchar(128) Имя текущей базы данных.
database_size varchar(18) Размер текущей базы данных в мегабайтах. database_size включает файлы данных и журналов. Если база данных имеет MEMORY_OPTIMIZED_DATA файловую группу, это включает общий размер всех файлов контрольных точек на диске в файловой группе.
unallocated space varchar(18) Место в базе данных, не зарезервированное для объектов базы данных. Если база данных имеет MEMORY_OPTIMIZED_DATA файловую группу, это включает общий размер файлов контрольных точек на диске с состоянием PRECREATED в файловой группе.
Защищены varchar(18) Общий объем пространства, выделенный объектам в базе данных.
data varchar(18) Общий объем пространства, используемый данными.
index_size varchar(18) Общий объем пространства, используемый индексами.
unused varchar(18) Общий объем пространства, зарезервированный для объектов в базе данных, но пока не используемый.
xtp_precreated varchar(18) Общий размер файлов контрольных точек с предварительно созданным состоянием в КБ. Это подсчитывает нераспределенный объем пространства в базе данных в целом. Возвращает значение NULL, если база данных не имеет memory_optimized_data файловой группы с хотя бы одним контейнером. *Этот столбец включается только в том случае @include_total_xtp_storage=1*.
xtp_used varchar(18) Общий размер файлов контрольных точек с состояниями UNDER CONSTRUCTION, ACTIVE и MERGE TARGET в КБ. Это место на диске, активно используемое для данных в таблицах, оптимизированных для памяти. Возвращает значение NULL, если база данных не имеет memory_optimized_data файловой группы с хотя бы одним контейнером. *Этот столбец включается только в том случае @include_total_xtp_storage=1*.
xtp_pending_truncation varchar(18) Общий размер файлов контрольных точек с WAITING_FOR_LOG_TRUNCATION состояния в КБ. Это место на диске, используемое для файлов контрольных точек, ожидающих очистки, после усечения журнала. Возвращает значение NULL, если база данных не имеет memory_optimized_data файловой группы с хотя бы одним контейнером. Этот столбец включается только в том случае @include_total_xtp_storage=1.

Комментарии

database_size обычно больше суммы зарезервированного + нераспределенного пространства , так как она включает размер файлов журнала, но зарезервированные и unallocated_space рассматривать только страницы данных. В некоторых случаях с Azure Synapse Analytics эта инструкция может быть неверной.

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

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

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

Примечание

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

Разрешения

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

Примеры

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

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

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

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

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

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

C. Отображение сведений об использовании пространства для удаленной таблицы, связанной с таблицей с поддержкой Stretch

В следующем примере суммируется пространство, используемое удаленной таблицей, связанной с таблицей с поддержкой Stretch, с помощью аргумента @mode для указания удаленного целевого объекта. Дополнительные сведения см. в разделе Stretch Database.

USE StretchedAdventureWorks2016  
GO  
EXEC sp_spaceused N'Purchasing.Vendor', @mode = 'REMOTE_ONLY'  

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

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

USE AdventureWorks2016  
GO  
EXEC sp_spaceused @oneresultset = 1  

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

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

USE WideWorldImporters
GO
EXEC sp_spaceused @updateusage = 'FALSE', @mode = 'ALL', @oneresultset = '1', @include_total_xtp_storage = '1';
GO

F. Отображение сведений об использовании пространства для объекта таблицы MEMORY_OPTIMIZED в базе данных.

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

USE WideWorldImporters
GO
EXEC sp_spaceused
@objname = N'VehicleTemparatures',
@updateusage = 'FALSE',
@mode = 'ALL',
@oneresultset = '0',
@include_total_xtp_storage = '1';
GO

См. также

Инструкция CREATE INDEX (Transact-SQL)
Инструкция CREATE TABLE (Transact-SQL)
DBCC UPDATEUSAGE (Transact-SQL)
SQL Server Service Broker
sys.allocation_units (Transact-SQL)
sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL)
sys.objects (Transact-SQL)
sys.partitions (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)