База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как узнать % оставшегося места на SQL сервере в SSMS 20.2? › Ответ в теме: Как узнать % оставшегося места на SQL сервере в SSMS 20.2?
В MS SQL Server Management Studio (SSMS) 20.2 есть несколько способов узнать процент оставшегося дискового пространства на сервере — как с помощью T-SQL команд, так и через штатные отчёты.
—
### 1. Через T-SQL запросы
SQL Server не хранит напрямую информацию о свободном месте на дисках ОС, но можно получить её с помощью расширенной функции `xp_fixeddrives` или через динамические представления.
#### Пример 1. Использование `xp_fixeddrives`
EXEC xp_fixeddrives;
Выводит список дисков с количеством свободного места в мегабайтах.
Чтобы получить процент свободного места, нужно дополнительно узнать общий размер диска. Это можно сделать, например, через PowerShell или WMI, но в чистом T-SQL это не реализовано.
#### Пример 2. Использование расширенного запроса с WMI через SQL Server
DECLARE @DriveSpace TABLE (
Drive VARCHAR(2),
FreeSpaceMB INT,
TotalSpaceMB INT,
FreeSpacePercent DECIMAL(5,2)
);
INSERT INTO @DriveSpace (Drive, FreeSpaceMB, TotalSpaceMB, FreeSpacePercent)
EXEC xp_cmdshell 'wmic logicaldisk get name,freespace,size /format:csv';
-- Обработка результата xp_cmdshell требует дополнительной обработки, поэтому проще использовать PowerShell или внешние скрипты.
SELECT * FROM @DriveSpace;
Этот способ сложнее и требует разрешений на выполнение `xp_cmdshell`.
—
### 2. Использование штатных отчётов SSMS
В SSMS есть встроенные отчёты, которые показывают информацию о дисковом пространстве:
— В Object Explorer щёлкните правой кнопкой по серверу.
— Выберите **Reports** → **Standard Reports** → **Disk Usage** или **Disk Usage by Top Tables**.
Эти отчёты показывают использование пространства баз данных и файлов, но не всегда показывают свободное место на уровне диска ОС.
—
### 3. Использование системных представлений для анализа файлов баз данных
Можно узнать размер файлов баз данных и свободное место внутри них:
SELECT
db.name AS DatabaseName,
mf.name AS LogicalName,
mf.physical_name,
mf.size / 128.0 AS SizeMB,
mf.size / 128.0 - CAST(FILEPROPERTY(mf.name, 'SpaceUsed') AS INT) / 128.0 AS FreeSpaceMB,
((mf.size / 128.0 - CAST(FILEPROPERTY(mf.name, 'SpaceUsed') AS INT) / 128.0) * 100.0) / (mf.size / 128.0) AS FreeSpacePercent
FROM sys.master_files mf
INNER JOIN sys.databases db ON db.database_id = mf.database_id
WHERE mf.type_desc = 'ROWS'
ORDER BY db.name;
Этот запрос покажет свободное место внутри файлов баз данных, но не на уровне диска.
—
### Итог
— **Для оценки свободного места на дисках ОС**:
Используйте `EXEC xp_fixeddrives` для быстрого просмотра свободного места в МБ на каждом диске.
— **Для анализа использования пространства баз данных**:
Используйте запрос к `sys.master_files` и `FILEPROPERTY` (пример выше).
— **Для визуального контроля**:
Используйте штатные отчёты SSMS → Reports → Standard Reports → Disk Usage.
—
Рекомендую посмотреть здесь:
https://winitpro.ru/index.php/2020/01/21/sql-server-diagnostika-proizvoditelnosti/
https://infostart.ru/1c/articles/1128594/
https://infostart.ru/1c/articles/1059227/