sp_spaceused (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

El sp_spaceused procedimiento almacenado del sistema muestra:

  • el número de filas, espacio en disco reservado y espacio en disco usado por una tabla, vista indizada o cola de Service Broker en la base de datos actual

  • espacio en disco reservado y utilizado por toda la base de datos

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Nota:

El grupo de SQL sin servidor no admite esta sintaxis en Azure Synapse Analytics.

Argumentos

En el caso del sistema de plataforma de Azure Synapse Analytics y Analytics (PDW), sp_spaceused debe especificar parámetros con nombre (por ejemplo sp_spaceused (@objname= N'Table1');), en lugar de confiar en la posición ordinal de los parámetros.

[ @objname = ] N'objname'

Nombre completo o no calificado de la tabla, vista indizada o cola para la que se solicita información de uso del espacio. @objname es nvarchar(776), con un valor predeterminado de NULL. Las comillas solo son necesarias si se especifica un nombre de objeto completo. Si se proporciona un nombre de objeto completo, incluido el nombre de una base de datos, el nombre de la base de datos debe ser el nombre de la base de datos actual.

Si no se especifica @objname , se devuelven los resultados de toda la base de datos.

Nota:

Azure Synapse Analytics and Analytics Platform System (PDW) solo admite objetos de base de datos y tablas.

[ @updateusage = ] 'updateusage'

Indica que DBCC UPDATEUSAGE se debe ejecutar para actualizar la información de uso del espacio. @updateusage es varchar(5), con un valor predeterminado de false. Cuando no se especifica @objname , la instrucción se ejecuta en toda la base de datos. De lo contrario, la instrucción se ejecuta en @objname. Los valores pueden ser true o false.

[ @mode = ] 'mode'

Indica el ámbito de los resultados. Para una tabla o base de datos estirada, el parámetro @mode permite incluir o excluir la parte remota del objeto. Para obtener más información, vea Stretch Database.

Importante

Stretch Database está en desuso en SQL Server 2022 (16.x) y Azure SQL Database. Esta característica se quitará en una versión futura del motor de base de datos. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

@mode es varchar(11) y puede ser uno de estos valores.

Valor Descripción
ALL (valor predeterminado) Devuelve las estadísticas de almacenamiento del objeto o la base de datos, incluida la parte local y la parte remota.
LOCAL_ONLY Devuelve las estadísticas de almacenamiento de solo la parte local del objeto o la base de datos. Si el objeto o la base de datos no están habilitados para Stretch, devuelve las mismas estadísticas que cuando @mode es ALL.
REMOTE_ONLY Devuelve las estadísticas de almacenamiento de solo la parte remota del objeto o la base de datos. Esta opción genera un error cuando se cumple una de las condiciones siguientes:

La tabla no está habilitada para Stretch.

La tabla está habilitada para Stretch, pero nunca ha habilitado la migración de datos. En este caso, la tabla remota aún no tiene un esquema.

El usuario quitó manualmente la tabla remota.

El aprovisionamiento del archivo de datos remoto devolvió un estado correcto, pero de hecho se produjo un error.

[ @oneresultset = ] oneresultset

Indica si se va a devolver un único conjunto de resultados. @oneresultset es bit y puede ser uno de estos valores:

Valor Descripción
0 (valor predeterminado) Cuando @objname es null o no se especifica, se devuelven dos conjuntos de resultados.
1 Cuando @objname es NULL o no se especifica, se devuelve un único conjunto de resultados.

[ @include_total_xtp_storage = ] include_total_xtp_storage

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores, y SQL Database

Cuando @oneresultset se establece 1en , este parámetro determina si el único conjunto de resultados incluye columnas para MEMORY_OPTIMIZED_DATA el almacenamiento. @include_total_xtp_storage es bit, con un valor predeterminado de 0. Si 1es , las columnas XTP se incluyen en el conjunto de resultados.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Conjunto de resultados

Si se omite @objname y el valor de @oneresultset es 0, se devuelven los siguientes conjuntos de resultados para proporcionar información de tamaño de base de datos actual.

Nombre de la columna Tipo de datos Descripción
database_name nvarchar(128) Nombre de la base de datos actual.
database_size varchar(18) Tamaño de la base de datos actual en megabytes. database_size incluye archivos de datos y de registro.
unallocated space varchar(18) Espacio en la base de datos que no está reservado para objetos de base de datos.
Nombre de la columna Tipo de datos Descripción
reserved varchar(18) Espacio total asignado por los objetos de la base de datos.
data varchar(18) Cantidad total de espacio utilizado por los datos.
index_size varchar(18) Cantidad total de espacio utilizado por índices.
unused varchar(18) Espacio total reservado para los objetos de la base de datos, pero no utilizado todavía.

Si se omite @objname y el valor de @oneresultset es 1, se devuelve el siguiente conjunto de resultados único para proporcionar información de tamaño de base de datos actual.

Nombre de la columna Tipo de datos Descripción
database_name nvarchar(128) Nombre de la base de datos actual.
database_size varchar(18) Tamaño de la base de datos actual en megabytes. database_size incluye archivos de datos y de registro.
unallocated space varchar(18) Espacio en la base de datos que no está reservado para objetos de base de datos.
reserved varchar(18) Espacio total asignado por los objetos de la base de datos.
data varchar(18) Cantidad total de espacio utilizado por los datos.
index_size varchar(18) Cantidad total de espacio utilizado por índices.
unused varchar(18) Espacio total reservado para los objetos de la base de datos, pero no utilizado todavía.

Si se especifica @objname , se devuelve el siguiente conjunto de resultados para el objeto especificado.

Nombre de la columna Tipo de datos Descripción
name nvarchar(128) Nombre del objeto del que se solicitó la información de utilización de espacio.

No se devuelve el nombre de esquema del objeto. Si se requiere el nombre del esquema, use el sys.dm_db_partition_stats o sys.dm_db_index_physical_stats vistas de administración dinámica para obtener información de tamaño equivalente.
rows char(20) Número de filas de la tabla. Si el objeto especificado es una cola de Service Broker, esta columna indica el número de mensajes de la cola.
reserved varchar(18) Cantidad total de espacio reservado para @objname.
data varchar(18) Cantidad total de espacio utilizado por los datos en @objname.
index_size varchar(18) Cantidad total de espacio utilizado por índices en @objname.
unused varchar(18) Cantidad total de espacio reservado para @objname pero aún no se ha usado.

Este modo es el valor predeterminado, cuando no se especifica ningún parámetro. Los siguientes conjuntos de resultados se devuelven detallando la información de tamaño de la base de datos en disco.

Nombre de la columna Tipo de datos Descripción
database_name nvarchar(128) Nombre de la base de datos actual.
database_size varchar(18) Tamaño de la base de datos actual en megabytes. database_size incluye archivos de datos y de registro. Si la base de datos tiene un MEMORY_OPTIMIZED_DATA grupo de archivos, este valor incluye el tamaño total en disco de todos los archivos de punto de control del grupo de archivos.
unallocated space varchar(18) Espacio en la base de datos que no está reservado para objetos de base de datos. Si la base de datos tiene un MEMORY_OPTIMIZED_DATA grupo de archivos, este valor incluye el tamaño total en disco de los archivos de punto de control con estado PRECREATED en el grupo de archivos.

Espacio utilizado por las tablas de la base de datos. Este conjunto de resultados no refleja las tablas optimizadas para memoria, ya que no hay ninguna contabilidad por tabla del uso del disco:

Nombre de la columna Tipo de datos Descripción
reserved varchar(18) Espacio total asignado por los objetos de la base de datos.
data varchar(18) Cantidad total de espacio utilizado por los datos.
index_size varchar(18) Cantidad total de espacio utilizado por índices.
unused varchar(18) Espacio total reservado para los objetos de la base de datos, pero no utilizado todavía.

El siguiente conjunto de resultados solo se devuelve si la base de datos tiene un MEMORY_OPTIMIZED_DATA grupo de archivos con al menos un contenedor:

Nombre de la columna Tipo de datos Descripción
xtp_precreated varchar(18) Tamaño total de los archivos de punto de control con el estado PRECREATED, en KB. Cuenta el espacio sin asignar en la base de datos como un todo. Por ejemplo, si hay 600 000 KB de archivos de punto de comprobación creados previamente, esta columna contiene 600000 KB.
xtp_used varchar(18) Tamaño total de los archivos de punto de control con estados UNDER CONSTRUCTION, ACTIVEy MERGE TARGET, en KB. Este valor es el espacio en disco que se usa activamente para los datos de las tablas optimizadas para memoria.
xtp_pending_truncation varchar(18) Tamaño total de los archivos de punto de control con el estado WAITING_FOR_LOG_TRUNCATION, en KB. Este valor es el espacio en disco que se usa para los archivos de punto de comprobación que esperan la limpieza, una vez que se produce el truncamiento del registro.

Si se omite @objname , el valor de @oneresultset es 1y @include_total_xtp_storage es 1, se devuelve el siguiente conjunto de resultados único para proporcionar información de tamaño de base de datos actual. Si @include_total_xtp_storage es 0 (valor predeterminado), se omiten las tres últimas columnas.

Nombre de la columna Tipo de datos Descripción
database_name nvarchar(128) Nombre de la base de datos actual.
database_size varchar(18) Tamaño de la base de datos actual en megabytes. database_size incluye archivos de datos y de registro. Si la base de datos tiene un MEMORY_OPTIMIZED_DATA grupo de archivos, este valor incluye el tamaño total en disco de todos los archivos de punto de control del grupo de archivos.
unallocated space varchar(18) Espacio en la base de datos que no está reservado para objetos de base de datos. Si la base de datos tiene un MEMORY_OPTIMIZED_DATA grupo de archivos, este valor incluye el tamaño total en disco de los archivos de punto de control con estado PRECREATED en el grupo de archivos.
reserved varchar(18) Espacio total asignado por los objetos de la base de datos.
data varchar(18) Cantidad total de espacio utilizado por los datos.
index_size varchar(18) Cantidad total de espacio utilizado por índices.
unused varchar(18) Espacio total reservado para los objetos de la base de datos, pero no utilizado todavía.
xtp_precreated1 varchar(18) Tamaño total de los archivos de punto de control con el estado PRECREATED, en KB. Este valor cuenta el espacio sin asignar en la base de datos como un todo. Devuelve NULL si la base de datos no tiene un MEMORY_OPTIMIZED_DATA grupo de archivos con al menos un contenedor.
xtp_used1 varchar(18) Tamaño total de los archivos de punto de control con estados UNDER CONSTRUCTION, ACTIVEy MERGE TARGET, en KB. Este valor es el espacio en disco que se usa activamente para los datos de las tablas optimizadas para memoria. Devuelve NULL si la base de datos no tiene un MEMORY_OPTIMIZED_DATA grupo de archivos con al menos un contenedor.
xtp_pending_truncation1 varchar(18) Tamaño total de los archivos de punto de control con el estado WAITING_FOR_LOG_TRUNCATION, en KB. Este valor es el espacio en disco que se usa para los archivos de punto de comprobación que esperan la limpieza, una vez que se produce el truncamiento del registro. Devuelve NULL si la base de datos no tiene un MEMORY_OPTIMIZED_DATA grupo de archivos con al menos un contenedor.

1 Solo se incluye si @include_total_xtp_storage está establecido en 1.

Comentarios

El database_size valor suele ser mayor que la suma de reservedunallocated space + porque incluye el tamaño de los archivos de registro, pero y unallocated_spacereserved solo tiene en cuenta las páginas de datos. En algunos casos con Azure Synapse Analytics, es posible que esta instrucción no sea cierta.

Las páginas que usan los índices XML y los índices de texto completo se incluyen en para index_size ambos conjuntos de resultados. Cuando se especifica @objname , las páginas de los índices XML y los índices de texto completo del objeto también se cuentan en el total reserved y index_size los resultados.

Si se calcula el uso del espacio para una base de datos o un objeto que es un índice espacial, las columnas de tamaño de espacio, como database_size, reservedy index_size, incluyen el tamaño del índice espacial.

Cuando se especifica @updateusage, SQL Server Motor de base de datos examina las páginas de datos de la base de datos y realiza las correcciones necesarias en las vistas de sys.allocation_units catálogo y sys.partitions relativas al espacio de almacenamiento utilizado por cada tabla. Hay algunas situaciones, por ejemplo, después de quitar un índice, cuando es posible que la información de espacio de la tabla no esté actualizada. @updateusage puede tardar algún tiempo en ejecutarse en tablas o bases de datos grandes. Use @updateusage solo cuando se sospecha que se devuelven valores incorrectos y cuando el proceso no tiene un efecto adverso en otros usuarios o procesos de la base de datos. Si se prefiere, DBCC UPDATEUSAGE se puede ejecutar por separado.

Nota:

Si se quitan o se recompilan índices grandes, o bien se quitan o truncar tablas grandes, el motor de base de datos difiere las cancelaciones de asignaciones de la página real, así como sus bloqueos asociados, hasta que se confirma la transacción. Las operaciones de eliminación diferida no liberan inmediatamente el espacio asignado. Por lo tanto, los valores devueltos sp_spaceused inmediatamente después de quitar o truncar un objeto grande podrían no reflejar el espacio en disco real disponible.

Permisos

Se concede permiso para ejecutar sp_spaceused al rol público . Solo los miembros del rol fijo de base de datos db_owner pueden especificar el parámetro @updateusage .

Ejemplos

A Mostrar información de espacio en disco sobre una tabla

El siguiente ejemplo muestra información de espacio en disco para la tabla Vendor y sus índices.

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

B. Mostrar información de espacio actualizada sobre una base de datos

En el ejemplo siguiente se resume el espacio usado en la base de datos actual y se usa el parámetro opcional @updateusage para asegurarse de que se devuelven los valores actuales.

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

C. Mostrar información de uso del espacio sobre la tabla remota asociada a una tabla habilitada para Stretch

En el ejemplo siguiente se resume el espacio usado por la tabla remota asociada a una tabla habilitada para Stretch mediante el argumento @mode para especificar el destino remoto. Para obtener más información, vea Stretch Database.

USE StretchedAdventureWorks2022;
GO

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

D. Mostrar información de uso de espacio para una base de datos en un único conjunto de resultados

En el ejemplo siguiente se resume el uso del espacio de la base de datos actual en un único conjunto de resultados.

USE AdventureWorks2022;
GO
EXEC sp_spaceused @oneresultset = 1;

E. Mostrar información de uso de espacio para una base de datos con al menos un grupo de archivos MEMORY_OPTIMIZED en un único conjunto de resultados

En el ejemplo siguiente se resume el uso del espacio de la base de datos actual con al menos un MEMORY_OPTIMIZED grupo de archivos en un único conjunto de resultados.

USE WideWorldImporters
GO

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

F. Mostrar información de uso del espacio para un objeto de tabla de MEMORY_OPTIMIZED en una base de datos

En el ejemplo siguiente se resume el uso del espacio de un MEMORY_OPTIMIZED objeto de tabla de la base de datos actual con al menos un MEMORY_OPTIMIZED grupo de archivos.

USE WideWorldImporters
GO

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