sp_spaceused (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics 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 1
en , 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 1
es , 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 , ACTIVE y 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 1
y @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_precreated 1 |
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_used 1 |
varchar(18) | Tamaño total de los archivos de punto de control con estados UNDER CONSTRUCTION , ACTIVE y 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_truncation 1 |
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 reserved
unallocated space
+ porque incluye el tamaño de los archivos de registro, pero y unallocated_space
reserved
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
, reserved
y 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
Contenido relacionado
- CREATE INDEX (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- DBCC UPDATEUSAGE (Transact-SQL)
- Service Broker
- sys.allocation_units (Transact-SQL)
- sys.indexes (Transact-SQL)
- sys.index_columns (Transact-SQL)
- sys.objects (Transact-SQL)
- sys.partitions (Transact-SQL)
- Procedimientos almacenados del sistema (Transact-SQL)