Как программно получить размер журнала транзакций в SQL 2005? - PullRequest
20 голосов
/ 13 октября 2008

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

Есть ли какая-либо команда TSQL, которую я могу запустить, которая сообщит мне текущий размер журнала транзакций и фиксированный лимит журнала транзакций?

Ответы [ 6 ]

30 голосов
/ 17 августа 2011

Я использовал ваш код, но произошла ошибка при преобразовании в int. «Сообщение 8115, уровень 16, состояние 2, строка 1 Ошибка арифметического переполнения при преобразовании выражения в тип данных int». Поэтому, где бы ни было "* 8", я изменил его на * 8.0, и код работает отлично.

SELECT (size * 8.0)/1024.0 AS size_in_mb
     , CASE
  WHEN max_size                                 = -1 
  THEN 9999999                  -- Unlimited growth, so handle this how you want
  ELSE (max_size * 8.0)/1024.0                  END AS max_size_in_mb
  FROM YOURDBNAMEHERE.sys.database_files
 WHERE data_space_id                            = 0           
20 голосов
/ 13 октября 2008

Быстрый поиск в Google показал это:

DBCC SQLPERF ( LOGSPACE )

Почему вы не используете автоматический рост в журнале транзакций? Похоже, это было бы более надежным решением.

13 голосов
/ 16 февраля 2012

Использование sys.database_files дает только размер файла журнала, а не размер журнала в нем. Это не очень полезно, если ваш файл в любом случае имеет фиксированный размер. DBCC SQLPERF (LOGSPACE) немного устарела, но хорошо работает, если вам требуется поддержка более старых версий SQL Server.

Вместо этого вы можете использовать таблицу dm_os_performance_counters следующим образом:

SELECT
    RTRIM(instance_name) [database], 
    cntr_value log_size_kb
FROM 
    sys.dm_os_performance_counters 
WHERE 
    object_name = 'SQLServer:Databases'
    AND counter_name = 'Log File(s) Used Size (KB)'
    AND instance_name <> '_Total'
7 голосов
/ 13 октября 2008

Это не в моей голове, так что вы можете перепроверить математику ...

SELECT
     (size * 8)/1024.0 AS size_in_mb,
     CASE
        WHEN max_size = -1 THEN 9999999   -- Unlimited growth, so handle this how you want
        ELSE (max_size * 8)/1024.0
     END AS max_size_in_mb
FROM
     MyDB.sys.database_files
WHERE
     data_space_id = 0   -- Log file

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

НТН!

1 голос
/ 16 февраля 2017

Для SQL 2008 и более поздних версий, FILEPROPERTY также предоставляет объем пространства, используемого в файле, и намного менее сложен, чем все остальные ответы:

select [Name], physical_name [Path], CAST(size AS BIGINT)*8192 [TotalBytes], CAST(FILEPROPERTY(name,'SpaceUsed') AS BIGINT)*8192 [UsedBytes], (case when max_size<0 then -1 else CAST(max_size AS BIGINT)*8192 end) [MaxBytes]
from sys.database_files
1 голос
/ 08 мая 2009

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

  • Установите режим восстановления базы данных на ПРОСТОЙ, если вам не требуется восстановление на определенный момент времени. Проще говоря, это позволит журналу транзакций «самостоятельно перезапускать» пространство.

OR

  • Если необходимо сохранить режим восстановления в ПОЛНОМ, запланируйте задание, которое выполняет резервное копирование журнала транзакций. Это освободит место в журнале транзакций, а также позволит вам выполнить восстановление на определенный момент времени, если это необходимо.

Также, возможно, вам пригодится следующая статья: Как предотвратить неожиданное увеличение журнала транзакций базы данных SQL Server .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...