sp_spaceused (Transact-SQL)
Muestra el número de filas, el espacio de disco reservado y el espacio de disco utilizado por una tabla, vista indizada o cola de Service Broker de la base de datos actual, o bien muestra el espacio de disco reservado y el que utiliza la base de datos completa.
Convenciones de sintaxis de Transact-SQL
Sintaxis
sp_spaceused [[ @objname = ] 'objname' ]
[,[ @updateusage = ] 'updateusage' ]
Argumentos
[ @objname=] 'objname'
Se trata del nombre completo o incompleto de la tabla, vista indizada o cola para la que se solicita información de uso del espacio. 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 para toda la base de datos.
objname es de tipo nvarchar(776) y su valor predeterminado es NULL.
[ @updateusage=] 'updateusage'
Indica que se debe ejecutar DBCC UPDATEUSAGE para actualizar la información de uso del espacio. Si no se especifica objname, la instrucción se ejecuta en toda la base de datos; en caso contrario, la instrucción se ejecuta en objname. Los valores pueden ser true o false. updateusage es de tipo varchar(5) y su valor predeterminado es false.
Valores de código de retorno
0 (correcto) o 1 (error)
Conjuntos de resultados
Si se omite objname , se devuelven los conjuntos de resultados siguientes para proporcionar la información de tamaño de la base de datos actual.
Nombre de 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 los archivos de datos y los de registro. |
unallocated space |
varchar(18) |
Espacio de la base de datos que no se ha reservado para objetos de base de datos. |
Nombre de 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 especifica el parámetro objname, se devuelve el conjunto de resultados siguiente para el objeto especificado.
Nombre de columna |
Tipo de datos |
Descripción |
---|---|---|
name |
nvarchar(128) |
Nombre del objeto del que se solicitó la información de utilización de espacio. El nombre del esquema del objeto no se devuelve. Si es necesario el nombre del esquema, utilice las vistas de administración dinámica sys.dm_db_partition_stats o sys.dm_db_index_physical_stats para obtener una información de tamaño equivalente. |
rows |
char(11) |
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 misma. |
reserved |
varchar(18) |
Espacio total 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 los índices en objname. |
unused |
varchar(18) |
Espacio total reservado para objname, pero sin utilizar todavía. |
Comentarios
database_size siempre será mayor que la suma de reserved + unallocated space porque incluye el tamaño de los archivos de registro, mientras que reserved y unallocated_space tienen en cuenta solo las páginas de datos.
Las páginas utilizadas por los índices XML y los índices de texto completo se incluyen en index_size para ambos conjuntos de resultados. Si se especifica objname, se cuentan también las páginas para los índices XML y de texto completo del objeto en los resultados totales de reserved e index_size.
Si se calcula el uso del espacio para una base de datos o un objeto que tiene un índice espacial, las columnas del tamaño del espacio, como database_size, reserved y index_size, incluyen el tamaño del índice espacial.
Si se especifica updateusage, Motor de base de datos de SQL Server examina las páginas de datos de la base de datos y realiza las correcciones necesarias en las vistas de catálogo sys.allocation_units y sys.partitions en relación con el espacio de almacenamiento utilizado por cada tabla. Existen algunas situaciones, como por ejemplo después de quitar un índice, en las que la información de espacio para la tabla podría no estar actualizada. El parámetro updateusage puede tardar algún tiempo en ejecutarse en tablas o bases de datos de gran tamaño. Utilice updateusage solo cuando sospeche que están devolviéndose valores incorrectos y cuando el proceso no afecte negativamente a otros usuarios o procesos de la base de datos. Si se prefiere, DBCC UPDATEUSAGE puede ejecutarse por separado.
[!NOTA]
Al quitar o volver a crear índices grandes, o quitar o truncar tablas grandes, el Motor de base de datos difiere las cancelaciones de asignación de páginas y los bloqueos asociados hasta que se confirme la transacción. Las operaciones de eliminación diferidas no liberan inmediatamente el espacio asignado. Por lo tanto, es posible que los valores devueltos por sp_spaceused inmediatamente después de quitar o truncar un objeto grande no reflejen el espacio en disco disponible real.
Permisos
El permiso para ejecutar sp_spaceused se otorga al rol public. 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 acerca de una tabla
El siguiente ejemplo muestra información de espacio en disco para la tabla Vendor y sus índices.
USE AdventureWorks2012;
GO
EXEC sp_spaceused N'Purchasing.Vendor';
GO
B.Mostrar información de espacio actualizada acerca de una base de datos
En este ejemplo se resume el espacio utilizado en la base de datos actual y se utiliza el parámetro opcional @updateusage para garantizar que se devuelvan los valores actuales.
USE AdventureWorks008R2;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
GO
Vea también
Referencia
DBCC UPDATEUSAGE (Transact-SQL)
sys.allocation_units (Transact-SQL)
sys.index_columns (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL)