sql-server - snippet - title tag




Wie kann ich die Größe des Transaktionsprotokolls in SQL 2005 programmgesteuert ermitteln? (4)

Das ist ganz oben in meinem Kopf, also möchtest du vielleicht die Mathematik überprüfen ...

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

Es gibt mehr, was Sie von dieser Systemansicht erhalten können, z. B. das Wachstumsinkrement, ob das Protokoll auf "Automatisch erhöhen" eingestellt ist und ob es so eingestellt ist, dass es um einen bestimmten Betrag oder um einen Prozentsatz wächst.

HTH!

Wir arbeiten mit einer festen Transaktionsprotokollgröße in unseren Datenbanken, und ich möchte eine Anwendung zusammenstellen, um die Protokollgrößen zu überwachen, damit wir sehen können, wann die Dinge zu eng werden und wir das festgelegte Protokoll anwachsen müssen.

Gibt es einen TSQL-Befehl, den ich ausführen kann, der mir die aktuelle Größe des Transaktionslogs und das feste Limit des Transaktionsprotokolls mitteilen wird?


Eine schnelle Google-Suche ergab Folgendes:

DBCC SQLPERF ( LOGSPACE )

Warum verwenden Sie keine automatische Vergrößerung für das Transaktionsprotokoll? Es scheint, dass dies eine zuverlässigere Lösung wäre.


Ich habe Ihren Code verwendet, aber es gab einen Fehler bei der Konvertierung in ein int. "Nachricht 8115, Ebene 16, Status 2, Zeile 1 Arithmetischer Überlauffehler, der Ausdruck in Datentyp int konvertiert." Wo immer es ein "* 8" gab, habe ich es auf * 8.0 geändert und der Code funktioniert perfekt.

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           

Wenn Sie sys.database_files verwenden, erhalten Sie nur die Größe der Protokolldatei und nicht die Größe des darin enthaltenen Protokolls. Das ist nicht sinnvoll, wenn Ihre Datei sowieso eine feste Größe hat. DBCC SQLPERF (LOGSPACE) ist eine alte Schule, aber funktioniert gut, wenn Sie ältere Versionen von SQL Server unterstützen müssen.

Stattdessen können Sie die Tabelle dm_os_performance_counters wie folgt verwenden:

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'




tsql