SQL Server
Transaktion Protokoll
deep dive
Sascha Lorenz, PSG Projekt Service GmbH
lorenz@psg.de
Warum sich damit beschäftigen?
• Verständnis & Ausbildung
• Recovery
• Audit
• Data Capture
Die LDF Datei…
• Ein einziges Ärgernis…
Das Versprechen…
Atomicity
Consistency
Isolation
Durability
Grundlagen
• Wiederherstellungsmodelle
– Einfach
– Vollständig
– Massenprotokolliert
• Backup
– Voll
– Differentiell
– Transaktion
Grundlagen
• Trennung von mdf/ndf‘s und ldf !
• Protokoll Dateien können endlos wachsen
und nicht von selbst schrumpfen.
• Vielen Admins sind sie ein Ärgernis. 
Das Transaktion Protokoll
• Während die Datenbank Dateien (mdf & ndf‘s)
aus 8 KB Seiten aufgebaut sind, besteht das
Transaktion Protokoll (ldf) aus sogenannten
VLF (Virtuell Log Files). Diese haben KEINE
einheitliche Größe.
• In den VLF werden „Log Records“ gespeichert.
Status eines VLF
• Active (aktiver Teil…)
– Mindestens ein „aktiver“ Log Record
ist Teil des VLF
• Recoverable
– Wartet auf das nächste Backup
• Reusable
– Kann überschrieben werden
• Unused
– Wurde noch nie genutzt
Log Buffer
• Ein „neuer“ Buffer ! 
• Log Records werden erst im Log Buffer
gesammelt und dann in einem Rutsch
geschrieben (Performance, Performance…)
VLF
• Virtuelle Files in der ldf
• Autogrowth
• Wie viele VLFs hat mein Log File?
– DBCC loginfo;
Ldf Erweiterungen
• <= 64MB = 4 VLFs
• > 64MB & <= 1GB = 8 VLFs
• > 1GB = 16 VLFs
Wartung Protokolldatei
• Zu viele VLFs…
– Fragmentierung (extern & intern)
• Zu wenig VLFs…
VLFs
Logisches Log
Bereit für
Backup
VLFs
Logisches Log
Bereit für
Backup
VLFs
Logisches Log
VLFs
Logisches Log
VLFs
Logisches Log
VLFs
Logisches Log
Habe ich ein Problem?
• sys.dm_os_wait_stats
– WRITELOG
• Perfmon
– Average Disk sec/Read & …/Write
• Limits des Log Managers
Log File Latenz / In-flight
• Vor SQL 2008 : 480 KB
• Ab SQL 2008 : 3840 KB
• 32 Bit : 8 ausstehende IO‘s
• 64 Bit : 32 ausstehende IO‘s
Beispiel in-flight Latenz
Quelle: http://sqlcat.com/sqlcat/b/technicalnotes/archive/2008/12/09/diagnosing-transaction-log-performance-issues-and-limits-of-the-log-manager.aspx
Beispiel in-flight Latenz
Quelle: http://sqlcat.com/sqlcat/b/technicalnotes/archive/2008/12/09/diagnosing-transaction-log-performance-issues-and-limits-of-the-log-manager.aspx
Ein Blick ins Log
• sys.fn_dblog
• DBCC TRACEON(2537)
• DBCC TRACEOFF(2537)
Decode it…
2 Byte : Status Bits
2 Bytes: Offset to find number of columns
X Bytes: Fixed Length Columns
2 Bytes: Total Number of Columns in the data row
1 Bit per column, Rounded up: Nullability Bitmap
2 Bytes: Number of Variable Length Columns within
the data row
2 Bytes per variable length column :
Row Offset marking the end of each variable length
column
X Bytes: Variable Length Columns
Quelle: http://sqlfascination.com/2010/02/03/how-do-you-decode-a-simple-entry-in-the-transaction-log-part-1/
fn_dump_dblog()
SELECT
*
FROM
fn_dump_dblog (
NULL, NULL, N'DISK', 1, N‚F:BACKUPLog4711.trn',
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT);
So… Hoffe, das war
für den Moment „deep“ genug…
Bei Fragen: lorenz@psg.de

SQL Server Transaction Log Deep Dive Session - PASS Hamburg

  • 1.
    SQL Server Transaktion Protokoll deepdive Sascha Lorenz, PSG Projekt Service GmbH lorenz@psg.de
  • 2.
    Warum sich damitbeschäftigen? • Verständnis & Ausbildung • Recovery • Audit • Data Capture
  • 3.
    Die LDF Datei… •Ein einziges Ärgernis…
  • 4.
  • 5.
    Grundlagen • Wiederherstellungsmodelle – Einfach –Vollständig – Massenprotokolliert • Backup – Voll – Differentiell – Transaktion
  • 6.
    Grundlagen • Trennung vonmdf/ndf‘s und ldf ! • Protokoll Dateien können endlos wachsen und nicht von selbst schrumpfen. • Vielen Admins sind sie ein Ärgernis. 
  • 7.
    Das Transaktion Protokoll •Während die Datenbank Dateien (mdf & ndf‘s) aus 8 KB Seiten aufgebaut sind, besteht das Transaktion Protokoll (ldf) aus sogenannten VLF (Virtuell Log Files). Diese haben KEINE einheitliche Größe. • In den VLF werden „Log Records“ gespeichert.
  • 8.
    Status eines VLF •Active (aktiver Teil…) – Mindestens ein „aktiver“ Log Record ist Teil des VLF • Recoverable – Wartet auf das nächste Backup • Reusable – Kann überschrieben werden • Unused – Wurde noch nie genutzt
  • 9.
    Log Buffer • Ein„neuer“ Buffer !  • Log Records werden erst im Log Buffer gesammelt und dann in einem Rutsch geschrieben (Performance, Performance…)
  • 10.
    VLF • Virtuelle Filesin der ldf • Autogrowth • Wie viele VLFs hat mein Log File? – DBCC loginfo;
  • 11.
    Ldf Erweiterungen • <=64MB = 4 VLFs • > 64MB & <= 1GB = 8 VLFs • > 1GB = 16 VLFs
  • 12.
    Wartung Protokolldatei • Zuviele VLFs… – Fragmentierung (extern & intern) • Zu wenig VLFs…
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
    Habe ich einProblem? • sys.dm_os_wait_stats – WRITELOG • Perfmon – Average Disk sec/Read & …/Write • Limits des Log Managers
  • 20.
    Log File Latenz/ In-flight • Vor SQL 2008 : 480 KB • Ab SQL 2008 : 3840 KB • 32 Bit : 8 ausstehende IO‘s • 64 Bit : 32 ausstehende IO‘s
  • 21.
    Beispiel in-flight Latenz Quelle:http://sqlcat.com/sqlcat/b/technicalnotes/archive/2008/12/09/diagnosing-transaction-log-performance-issues-and-limits-of-the-log-manager.aspx
  • 22.
    Beispiel in-flight Latenz Quelle:http://sqlcat.com/sqlcat/b/technicalnotes/archive/2008/12/09/diagnosing-transaction-log-performance-issues-and-limits-of-the-log-manager.aspx
  • 23.
    Ein Blick insLog • sys.fn_dblog • DBCC TRACEON(2537) • DBCC TRACEOFF(2537)
  • 24.
    Decode it… 2 Byte: Status Bits 2 Bytes: Offset to find number of columns X Bytes: Fixed Length Columns 2 Bytes: Total Number of Columns in the data row 1 Bit per column, Rounded up: Nullability Bitmap 2 Bytes: Number of Variable Length Columns within the data row 2 Bytes per variable length column : Row Offset marking the end of each variable length column X Bytes: Variable Length Columns Quelle: http://sqlfascination.com/2010/02/03/how-do-you-decode-a-simple-entry-in-the-transaction-log-part-1/
  • 25.
    fn_dump_dblog() SELECT * FROM fn_dump_dblog ( NULL, NULL,N'DISK', 1, N‚F:BACKUPLog4711.trn', DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT);
  • 26.
    So… Hoffe, daswar für den Moment „deep“ genug… Bei Fragen: lorenz@psg.de