База знаний Одина — Одинэсника › Форумы › 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
|
1 |
EXEC xp_fixeddrives; |
Выводит список дисков с количеством свободного места в мегабайтах.
Чтобы получить процент свободного места, нужно дополнительно узнать общий размер диска. Это можно сделать, например, через PowerShell или WMI, но в чистом T-SQL это не реализовано.
#### Пример 2. Использование расширенного запроса с WMI через SQL Server
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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. Использование системных представлений для анализа файлов баз данных
Можно узнать размер файлов баз данных и свободное место внутри них:
|
1 2 3 4 5 6 7 8 9 10 11 |
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/