sp_spaceused (Transact-SQL)

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

В системной хранимой процедуре отображается следующее sp_spaceused :

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

  • дисковое пространство зарезервировано и используется всей базой данных

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Примечание.

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

Аргументы

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

[ @objname = ] N'objname'

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

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

Примечание.

Azure Synapse Analytics и analytics Platform System (PDW) поддерживают только объекты базы данных и таблиц.

[ @updateusage = ] 'updateusage'

DBCC UPDATEUSAGE Указывает, что следует запускать для обновления сведений об использовании пространства. @updateusage — varchar(5) с значением по умолчаниюfalse. Если @objname не указан, инструкция выполняется во всей базе данных. В противном случае инструкция выполняется в @objname. Возможные значения — true или false.

[ @mode = ] 'mode'

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

Внимание

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

@mode — varchar(11) и может быть одним из этих значений.

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

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

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

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

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

[ @oneresultset = ] oneresultset

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

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

[ @include_total_xtp_storage = ] include_total_xtp_storage

Область применения: SQL Server 2017 (14.x) и более поздних версий и База данных SQL

Если задано 1значение @oneresultset, этот параметр определяет, содержит ли один набор результатов столбцы для MEMORY_OPTIMIZED_DATA хранилища. @include_total_xtp_storage бит с значением по умолчанию0. Если 1столбцы XTP включены в набор результатов.

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

0 (успешно) или 1 (сбой).

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

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

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

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

Имя столбца Тип данных Description
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 , для указанного объекта возвращается следующий результирующий набор.

Имя столбца Тип данных Description
name nvarchar(128) Имя объекта, для которого были запрошены сведения об используемом пространстве.

Имя схемы объекта не возвращается. Если требуется имя схемы, используйте sys.dm_db_partition_stats или sys.dm_db_index_physical_stats динамические административные представления для получения эквивалентных сведений о размере.
rows char(20) Количество существующих строк в таблице. Если указанный объект является очередью Service Broker, этот столбец указывает количество сообщений в очереди.
reserved varchar(18) Общий объем зарезервированного пространства для @objname.
data varchar(18) Общий объем пространства, используемого данными в @objname.
index_size varchar(18) Общий объем пространства, используемого индексами в @objname.
unused varchar(18) Общий объем пространства, зарезервированного для @objname , но еще не использован.

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

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

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

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

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

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

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

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

1 Только если для @include_total_xtp_storage задано 1значение .

Замечания

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

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

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

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

Примечание.

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

Разрешения

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

Примеры

А. Отображение сведений о пространстве диска для таблицы

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

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

B. Отображение обновленных сведений о пространстве базы данных

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

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

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

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

USE StretchedAdventureWorks2022;
GO

EXEC sp_spaceused N'Purchasing.Vendor', @mode = 'REMOTE_ONLY';

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

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

USE AdventureWorks2022;
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