Published on

January 18, 2017

Мониторинг использования пространства TempDB в SQL Server

Как администратор баз данных SQL Server, важно отслеживать использование пространства TempDB. TempDB – это системная база данных в SQL Server, которая используется для хранения временных объектов, таких как временные таблицы и переменные таблицы, а также промежуточных результатов запросов.

В этой статье мы рассмотрим скрипт, который можно использовать для мониторинга использования пространства TempDB и устранения любых проблем, связанных с его журнальным файлом.

Проблема

Допустим, у нас есть ситуация, когда файл базы данных (mdf) для TempDB составляет всего 5 ГБ, но журнальный файл (ldf) вырос до огромного размера в 80 ГБ. Это указывает на потенциальную проблему с использованием пространства TempDB.

Решение

Для устранения этой проблемы мы можем использовать следующий скрипт, чтобы узнать использование пространства TempDB:

SELECT SUM(unallocated_extent_page_count) AS [free_pages],
       (SUM(unallocated_extent_page_count) * 1.0 / 128) AS [free_space_MB],
       SUM(version_store_reserved_page_count) AS [version_pages_used],
       (SUM(version_store_reserved_page_count) * 1.0 / 128) AS [version_space_MB],
       SUM(internal_object_reserved_page_count) AS [internal_object_pages_used],
       (SUM(internal_object_reserved_page_count) * 1.0 / 128) AS [internal_object_space_MB],
       SUM(user_object_reserved_page_count) AS [user_object_pages_used],
       (SUM(user_object_reserved_page_count) * 1.0 / 128) AS [user_object_space_MB]
FROM sys.dm_db_file_space_usage;

Этот запрос предоставит информацию о свободном пространстве, использовании хранилища версий и использовании внутренних и пользовательских объектов в TempDB.

В нашем случае запрос показал, что большая часть пространства в TempDB была выделена для журнального файла, что указывает на то, что могут быть активные транзакции, которые все еще используют журнальный файл.

Чтобы определить транзакции, использующие журнальный файл, мы можем использовать следующий скрипт:

SELECT database_transaction_log_bytes_reserved, session_id
FROM sys.dm_tran_database_transactions AS tdt
INNER JOIN sys.dm_tran_session_transactions AS tst
ON tdt.transaction_id = tst.transaction_id
WHERE database_id = 2;

Этот скрипт предоставит информацию о транзакциях и объеме зарезервированного ими журнального пространства в TempDB.

Наконец, чтобы определить источник запросов, вызывающих использование журнального файла, мы можем использовать следующий скрипт:

SELECT *
FROM sys.sysprocesses;

Этот скрипт покажет активные процессы и связанные с ними запросы. В нашем случае мы обнаружили запрос, использующий функцию openquery, который вызывал чрезмерное использование журнального файла.

Вывод

Мониторинг использования пространства TempDB является важным для поддержания производительности и стабильности SQL Server. Используя скрипты, упомянутые в этой статье, вы можете выявить любые проблемы, связанные с использованием пространства TempDB, и принять соответствующие меры, такие как завершение связанных процессов и уменьшение размера файлов базы данных.

У вас есть похожие скрипты или решения, которыми вы хотели бы поделиться с другими читателями? Не стесняйтесь оставить комментарий ниже!

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.