Published on

May 6, 2023

Управление и мониторинг дискового пространства в SQL Server

Как администратор 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!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.