Как администратор SQL Server, важно регулярно мониторить и управлять дисковым пространством на вашем сервере баз данных. В этой статье мы рассмотрим T-SQL скрипты, которые могут помочь вам получить информацию о дисковом пространстве, расположении файлов баз данных и их размерах.
Получение списка дисков и доступного пространства
Чтобы получить список дисков и доступное пространство на них, вы можете использовать хранимую процедуру xp_fixeddrives или динамическую функцию управления sys.dm_os_volume_stats. Вот пример запроса:
SELECT DISTINCT
volume_mount_point AS [Точка монтирования],
file_system_type AS [Тип файловой системы],
logical_volume_name AS [Логический диск],
CONVERT(Numeric(10,2),total_bytes/1048576/1024) AS [Общий размер],
Convert(Numeric(10,2),available_bytes/1048576/1024) AS [Доступное пространство],
CAST(CAST(available_bytes AS FLOAT)/ CAST(total_bytes AS FLOAT) AS DECIMAL(18,2)) * 100 AS [Свободное пространство %]
FROM sys.master_files
CROSS APPLY sys.dm_os_volume_stats(database_id, file_id)
Просмотр расположения файлов баз данных
Чтобы просмотреть расположение файлов баз данных, вы можете использовать динамическое представление управления sys.master_files. Вот пример запроса:
SELECT DISTINCT
DB_NAME(database_id) AS [Имя базы данных],
type_desc AS [Тип файла базы данных],
name AS [Имя файла],
physical_name AS [Расположение файла],
state_desc AS [Статус файла базы данных],
SIZE AS [Начальный размер],
max_size AS [Максимальный размер]
FROM sys.master_files
WHERE DB_NAME(database_id) NOT IN ('master','msdb','tempdb','model')
Получение размеров баз данных
Чтобы получить размеры всех баз данных на вашем сервере, вы можете выполнить хранимую процедуру sp_databases или объединить представления управления sys.databases и sys.master_files. Вот пример запроса:
SELECT DISTINCT
dbs.NAME AS [Имя базы данных],
dbs.state_desc AS [Статус базы данных],
CONVERT(DATETIME, dbs.create_date) AS [Дата создания базы данных],
dbs.compatibility_level AS [Уровень совместимости],
dbs.recovery_model_desc AS [Модель восстановления базы данных],
dbs.delayed_durability_desc AS [Отложенная надежность],
dbs.containment_desc AS [Содержание],
CONVERT(NVARCHAR,(SUM(CAST(masterfiles.size AS BIGINT)) * 8 / 1024)) AS [Размер базы данных]
FROM sys.master_files masterfiles
INNER JOIN sys.databases dbs ON dbs.database_id = masterfiles.database_id
WHERE dbs.database_id > 4 -- Пропустить системные базы данных
GROUP BY dbs.NAME, dbs.state_desc, dbs.compatibility_level, dbs.create_date, dbs.recovery_model_desc, dbs.delayed_durability_desc, dbs.containment_desc, dbs.default_language_name, dbs.default_fulltext_language_name
ORDER BY dbs.NAME
Создание отчета по электронной почте
Если вы хотите автоматизировать процесс создания и отправки этих отчетов, вы можете создать хранимую процедуру, которая использует вышеуказанные запросы для заполнения необходимой информации, а затем использовать почту базы данных для отправки отчета в формате HTML.
Регулярный мониторинг и управление дисковым пространством на вашем SQL Server позволит обеспечить оптимальную производительность и избежать возможных проблем, связанных с ограничениями дискового пространства.
Следите за будущими статьями, в которых мы будем рассматривать другие концепции и идеи SQL Server!