Volvemos a la carga con una de esas entradas que nos gustan: simples, cortas y útiles. Queríamos compartir con vosotros una de esas consultas imprescindibles en cualquier Fastcheck, que en unos pocos segundos nos de los resultados esperados. Posiblemente junto con sp_who una de las querys que más nos toca utilizar en nuestros chequeos: ¿cómo comprobar el espacio libre en los discos del servidor?
Si, puedes conectarte por Escritorio Remoto – RDP y comprobar de forma gráfica el espacio disponible. Pero ¿sabes cómo hacerlo con T-SQL?
T-SQL
La primera opción que tenemos es usando el procedimiento almacenado de la base de datos master:
EXEC master..xp_fixeddrives
GO
La segunda opción es un poco más elaborada consultado las dos tablas de sistema sys.master_files y sys.dm_os_volume_stats:
SELECT DISTINCT dovs.logical_volume_name AS NombreLogico,
dovs.volume_mount_point AS Disco,
CONVERT(INT,(dovs.available_bytes/1048576.0)/1024.0) AS EspacioLibreGB
FROM sys.master_files mf
CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.FILE_ID) dovs
ORDER BY EspacioLibreGB ASC
GO
De esta forma lo podríamos hacer directamente desde nuestro SQL Server Management Studio ahorrándonos tiempo. La gran ventaja de este método es que no tendríamos que tener permisos de escritorio remoto para acceder al servidor para conocer el estado de sus unidades.
A través de PowerShell
Adicionalmente a las opciones que tenemos con T-SQL, podemos conocer también conocer el tamaño y espacio de las unidades y puntos de montaje de un servidor a través de Powershell.
La consulta que utilizamos usa los comandos Get-WmiObject y Where-Object (Adjuntamos links de Microsoft) para conocer el estado, Sort-Object y Format-Table para ordenar y para pintar la información de una forma más atractiva creamos una función de usuario, a la cual llamamos Get-EspacioLibre:
function Get-EspacioLibre{
param([string] $HostName = ($env:COMPUTERNAME))
Get-WmiObject win32_volume -computername $hostname | `
Where-Object {$_.drivetype -eq 3} | `
Sort-Object name | `
Format-Table name,@{l="Size(GB)";e={($_.capacity/1gb).ToString("F2")}},`
@{l="Free Space(GB)";e={($_.freespace/1gb).ToString("F2")}},`
@{l="% Free";e={(($_.Freespace/$_.Capacity)*100).ToString("F2")}}
}
Get-EspacioLibre -HostName "NombreDeServidor"
A destacar que sólo mostramos los discos locales – esto se indica en la línea:
Y así, si tenemos alguna incidencia en nuestras bases de datos por problemas de espacio, podemos comprobar de una manera rápida y sin tener que conectarnos al servidor cual es el espacio disponible.
¿Sabes a partir de qué versión aparece el procedimiento almacenado xp_fixeddrives?