2011-01-05 11 views
5

¿Hay una consulta T-SQL que pueda ejecutar contra una base de datos que proporcionará una lista de todas las tablas en esa base de datos y su disco actual? uso del espacio? Sé que puedo verlo en SSMS con el cuadro de diálogo "propiedades", y sé cómo usar el sproc sp_spaceused para verlo una tabla a la vez, pero me gustaría evaluar el uso de espacio en disco de todas mis tablas, ordenado por el uso de espacio de disco más alto al más bajo. Tenemos que reducir significativamente el tamaño de nuestra base de datos, por lo que me gustaría ver qué tablas son las más ofensivas.Cómo recuperar un conjunto de resultados de todas las tablas en la base de datos con su espacio de disco

Respuesta

10
create table #Temp (
    name nvarchar(128), 
    [rows] char(11), 
    reserved varchar(18), 
    data varchar(18), 
    index_size varchar(18), 
    unused varchar(18) 
) 

insert into #Temp 
    exec sp_msforeachtable 'sp_spaceused ''?''' 

select * from #Temp order by cast(replace(reserved,' kb','') as int) desc 
+0

+1 BTW es filas exactas o estimadas? –

+0

las filas deben ser exactas. –

+3

Mirando la definición del proceso, se saca de la columna 'row_count' en' sys.dm_db_partition_stats'. Creo que recuerdo haber visto esto antes y que incluye filas modificadas por transacciones no confirmadas. –

0

¿Echó un vistazo al Disk Usage Summary Report?

"Para ver el informe, expanda la carpeta Administración, haga clic en colección de datos, seleccione Informes, seleccione Gestión de almacenamiento de datos, y luego haga clic en Disco Resumen de uso"

El uso de disco informe conjunto de colecciones proporciona una descripción general del espacio de disco utilizado para todas las bases de datos en la instancia de SQL Server, y tendencias de crecimiento para los datos y archivos de registro para cada una de estas bases de datos.
- La tabla de resumen muestra el tamaño de inicio (en megabytes) y el tamaño actual de todas las bases de datos instaladas en el servidor que el recopilador de datos está monitoreando.
- La información de tendencia y crecimiento promedio se muestra gráficamente y numéricamente para los archivos de datos y de registro.

5

sys.allocation_units, mira total_pages. Cada conjunto de filas (partición de un índice) tiene 3 unidades de asignación (DATA, SLOB y LOB), consulte Table and Index Organization. Únase con sys.partitions para obtener el object_id y el index_id. Index_id 0 es el montón de una tabla desordenada, index id 1 es el índice agrupado. Cada mesa (índice) tiene al menos una partición, si no se reparte:

select object_name(p.object_id) as [name], 
    object_schema_name(p.object_id) as [schema], 
    i.name as [index], 
    i.type_desc, 
    au.type_desc, 
    p.partition_number, 
    p.rows, 
    au.total_pages * 8 as [space (kb)] 
from sys.allocation_units au 
join sys.partitions p on au.container_id = p.partition_id 
join sys.indexes i on p.object_id = i. object_id 
    and i.index_id = p.index_id 
order by [space (kb)] desc; 
+1

+1 parece mucho más fácil y más agradable que la respuesta de Joe Stefanelli! –

Cuestiones relacionadas