Heredé una base de datos bastante grande de SQL Server. Parece ocupar más espacio de lo que esperaría, dados los datos que contiene.
¿Hay una manera fácil de determinar cuánto espacio en el disco está consumiendo cada tabla?
sql-server
tsql
Eric
fuente
fuente
Respuestas:
fuente
Si está utilizando SQL Server Management Studio (SSMS), en lugar de ejecutar una consulta ( que en mi caso devolvió filas duplicadas ) puede ejecutar un informe estándar .
Nota: El nivel de compatibilidad de la base de datos debe establecerse en 90 o más para que esto funcione correctamente. Ver http://msdn.microsoft.com/en-gb/library/bb510680.aspx
fuente
sp_spaceused puede obtener información sobre el espacio en disco utilizado por una tabla, vista indizada o toda la base de datos.
Por ejemplo:
Esto informa la información de uso del disco para la tabla ContactInfo.
Para usar esto para todas las tablas a la vez:
También puede obtener el uso del disco desde la funcionalidad de Informes estándar de clic derecho de SQL Server. Para llegar a este informe, navegue desde el objeto del servidor en el Explorador de objetos, baje al objeto Bases de datos y luego haga clic con el botón derecho en cualquier base de datos. En el menú que aparece, seleccione Informes, luego Informes estándar y luego "Uso del disco por partición: [Nombre de la base de datos]".
fuente
sp_msforeachtable
en SSMS puede desencadenar fácilmenteSystem.OutOfMemoryException
si tiene una gran cantidad de tablas, por lo que podría ser una mejor idea usar una tabla temporal para almacenar los resultados.Aquí hay otro método: usando SQL Server Management Studio , en Object Explorer , vaya a su base de datos y seleccione Tablas
Luego abra los Detalles del Explorador de objetos (ya sea presionando F7 o yendo a Ver-> Detalles del Explorador de objetos ). En la página de detalles del explorador de objetos, haga clic derecho en el encabezado de la columna y habilite las columnas que le gustaría ver en la página. También puede ordenar los datos por cualquier columna.
fuente
Después de algunas búsquedas, no pude encontrar una manera fácil de obtener información sobre todas las tablas. Hay un útil procedimiento almacenado llamado sp_spaceused que devolverá todo el espacio utilizado por la base de datos. Si se le proporciona un nombre de tabla, devuelve el espacio utilizado por esa tabla. Sin embargo, los resultados devueltos por el procedimiento almacenado no se pueden ordenar, ya que las columnas son valores de caracteres.
El siguiente script generará la información que estoy buscando.
fuente
Para todas las tablas, use .. (agregando de los comentarios de Paul)
fuente
exec sp_helpdb
lo que no muestra nada sobre tablas, a loexec sp_spaceused
que sí lo hace, pero solo para una tabla a la vez ... no le da una visión general de qué tablas tiene y cuántas filas tienen y cómo mucho espacio que ocupan.Las consultas anteriores son buenas para encontrar la cantidad de espacio utilizado por la tabla (incluidos los índices), pero si desea comparar cuánto espacio utilizan los índices en la tabla, utilice esta consulta:
fuente
where [i].[is_primary_key] = 0
. Ahora los tamaños deben coincidir.sp_spaceused
. Mido los GB, por lo que unos pocos megas no coinciden no es mucho. No me importan los tamaños exactos, solo una idea.Si necesita calcular exactamente los mismos números, que están en la página 'propiedades de tabla - almacenamiento' en SSMS, debe contarlos con el mismo método que en SSMS (funciona para SQL Server 2005 y superior ... y también funciona correctamente para tablas con campos LOB, porque solo contar "páginas_utilizadas" no es suficiente para mostrar un tamaño de índice preciso):
fuente
Extensión a la respuesta @xav que manejó las particiones de tabla para obtener el tamaño en MB y GB. Probado en SQL Server 2008/2012 (Comentó una línea donde
is_memory_optimized = 1
)fuente
Para Azure usé esto:
Debe tener SSMS v17.x
Solía;
Con esto, como ha mencionado el usuario Sparrow :
Abra su
Databases
> y seleccione Tablas ,luego presione la tecla F7 Debería ver
row count
como:
SSMS aquí está conectado a bases de datos de Azure
fuente
Utilizamos particiones de tabla y tuvimos algunos problemas con las consultas proporcionadas anteriormente debido a registros duplicados.
Para aquellos que lo necesitan, puede encontrar debajo de la consulta que ejecuta SQL Server 2014 al generar el informe "Uso de disco por tabla". Supongo que también funciona con versiones anteriores de SQL Server.
Funciona a las mil maravillas.
fuente
fuente
Un pequeño cambio en la respuesta de Mar_c , ya que he estado volviendo a esta página con tanta frecuencia, ordenado por la mayoría de las primeras filas:
fuente
Esto le dará los tamaños y los recuentos de registros para cada tabla.
fuente
{ }
) en la barra de herramientas del editor para dar formato y sintaxis.Para obtener todos los tamaños de tabla en una base de datos, puede usar esta consulta:
Y puede cambiarlo para insertar todo el resultado en la tabla temporal y luego seleccionarlo en la tabla temporal.
fuente
Desde un símbolo del sistema con OSQL :
fuente
Aquí hay una manera de obtener todos los tamaños de tablas rápidamente con los siguientes pasos:
Escriba los comandos T-SQL dados para enumerar todas las tablas de la base de datos:
Ahora copie la lista de tablas de la base de datos y cópiela en una nueva ventana del analizador de consultas
En el analizador de consultas SQL , seleccione de la opción de la barra de herramientas superior Resultados al archivo ( Ctrl+ Shift+F ).
Ahora finalmente presione el botón Ejecutar rojo marcado en la barra de herramientas anterior .
El tamaño de la base de datos de todas las tablas ahora se almacena en un archivo en su computadora.
fuente
Agregué algunas columnas más sobre la respuesta de marc_s:
fuente
Mi publicación solo es relevante para SQL Server 2000 y se ha probado que funciona en mi entorno.
Este código accede a todas las bases de datos posibles de una sola instancia , no solo a una sola base de datos.
Utilizo dos tablas temporales para ayudar a recopilar los datos apropiados y luego volcar los resultados en una tabla 'En vivo'.
Los datos devueltos son: DatabaseName, DatabaseTableName, Filas (en la tabla), datos (el tamaño de la tabla en KB parecería), datos de entrada (lo encuentro útil para saber cuándo ejecuté el script por última vez).
La caída de este código es que el campo 'datos' no se almacena como un int (los caracteres 'KB' se mantienen en ese campo), y eso sería útil (pero no totalmente necesario) para la clasificación.
¡Ojalá este código ayude a alguien y les ahorre algo de tiempo!
En caso de que necesite saber, la tabla rsp_DatabaseTableSizes se creó a través de:
fuente
Como una extensión simple a la respuesta de marc_s (la que ha sido aceptada), esto se ajusta para devolver el recuento de columnas y permitir el filtrado:
fuente
Refiriéndose a la respuesta de @Mark anterior, agregó @ updateusage = 'true' para forzar las últimas estadísticas de tamaño ( https://msdn.microsoft.com/en-us/library/ms188776.aspx ):
fuente
Aquí hay una consulta de muestra para obtener tablas de más de 1 GB ordenadas por tamaño descendente.
fuente