MS-SQL Baseline

Aus Software Entwicklung Projekte
Wechseln zu: Navigation, Suche

Performance Baseline ?

Eine Performance Baseline ist nix anderes als eine Aufzeichnung von verschiedenen Countern/Parametern über einen definierten Zeitraum, z.B. eine Stunde. Die Baseline sollte in regelmäßigen Abständen erneut aufgezeichnet werden, damit diese mit der ursprünglichen Baseline verglichen werden kann.

Durch diesen Vergleich können Problemstellen leichter identifiziert werden bzw. Leistungsprobleme des SQL Server mit Fakten belegt werden und erleichtert die Fehlersuche deutlich.

Ablauf

Es gibt verschiedene kommerzielle und freie Tools. Eine Suche bei google mit "Microsoft SQL Performance Baseline" gibt schon einige nützliche Treffer. Am einfachsten und mit Windows Bordmitteln lässt sich eine grundlegende Performance Basline mittels dem "Performance Monitor" erstellen.

Kostenpflichte Tools aber auch frei erhältiche T-SQL Scripte können zusätzlich die DMV's auswerten, mit denen eine weitaus genauere Erfassung aller Werte ermöglicht wird.

Probleme

Eine Baseline Erfassung, abhängig welche Werte genau erfasst werden, erzeugt eine zusätzliche Last auf dem SQL Server. D.h. wenn der Server schon starke Leistungsprobleme hat, sollte von einer komplette Performance Baseline abgesehen werden und eher manuell die einzelnen problematischen Stellen eingekreist werden. Hier kann es hilfreich sein, wenn historische Baselines zur Verfügung stehen. Damit kann ggf. ein Trend erkannt werden, um bei der manuellen Suche nicht die sprichwörtliche "Nadel im Heuhaufen" zu suchen, sondern die Ursache schneller zu lokalisieren.

Performance Monitor

Folgende Parameter sind unter anderem für eine grundlegende Performance Baseline mittels Performance Monitor interessant.

OS Performance Counters

IPv4

  • Fragment Re-assembly Failures
  • Fragmentation Failures
  • Fragmented Datagrams/sec
  • Fragments Created/sec
  • Fragments Re-assembled/sec
  • Fragments Received/sec

IPv6

  • Fragment Re-assembly Failures
  • Fragmentation Failures
  • Fragmented Datagrams/sec
  • Fragments Created/sec
  • Fragments Re-assembled/sec
  • Fragments Received/sec

LogicalDisk(XZ:)

Hier sollte jede LogicalDisk überwacht werden, wo der die SQL Server Instanz Daten speichert.

  • Avg. Disk Bytes/Read
  • Avg. Disk Bytes/Transfer
  • Avg. Disk Bytes/Write
  • Avg. Disk sec/Read
  • Avg. Disk sec/Transfer
  • Avg. Disk sec/Write
  • Disk Bytes/sec
  • Disk Read Bytes/sec
  • Disk Reads/sec
  • Disk Transfers/sec
  • Disk Write Bytes/sec
  • Disk Writes/sec
  • Free Megabytes

Memory

  • Available MBytes
  • Cache Faults/sec
  • Page Faults/sec
  • Page Reads/sec
  • Page Writes/sec
  • Pages Input/sec
  • Pages Output/sec
  • Pages/sec

Network Interface

Bitte nur die spezifischen Adapter, über welche mit dem SQL kommuniziert wird.

  • Bytes Received/sec
  • Bytes Sent/sec
  • Bytes Total/sec
  • Packets Outbound Discarded
  • Packets Outbound Errors
  • Packets Received Discarded
  • Packets Received Errors
  • Packets Received Non-Unicast/sec
  • Packets Received Unicast/sec
  • Packets Received Unknown
  • Packets Received/sec
  • Packets Sent Non-Unicast/sec
  • Packets Sent Unicast/sec
  • Packets Sent/sec
  • Packets/sec

Process(sqlservr)

Der Prozess der zu untersuchenden SQL Server Instanz.

  •  % Privileged Time
  •  % Processor Time

Processor (_Total|0..n)

Die Werte für jede Core einzeln und als Totale erfassen

  •  % Interrupt Time
  •  % Privileged Time
  •  % Processor Time

Processor Information(_Total|0..n)

Die Werte für jede Core einzeln und als Totale erfassen

  •  % of Maximum Frequency
  • Processor Frequency

TCPv4

  • Connection Failures
  • Connections Active
  • Connections Established
  • Connections Passive
  • Connections Reset
  • Segments Received/sec
  • Segments Retransmitted/sec
  • Segments Sent/sec
  • Segments/sec

TCPv6

  • Connection Failures
  • Connections Active
  • Connections Established
  • Connections Passive
  • Connections Reset
  • Segments Received/sec
  • Segments Retransmitted/sec
  • Segments Sent/sec
  • Segments/sec

SQL Performance Counters

Hier fehlen noch Counter, falls AlwaysOn oder Replikation aktiv ist.

SQLAgent:Jobs(*)

  • Active jobs

SQLServer:Access Methods

  • Full Scans/sec
  • Index Searches/sec
  • Range Scans/sec
  • Table Lock Escalations/sec
  • Workfiles Created/sec
  • Worktables Created/sec
  • Worktables From Cache Ratio

SQLServer:Batch Resp Statistics

Für "CPU Time:Requests", "CPU Time:Total(ms)", "Elapsed Time:Requests" und Elapsed Time:Total(ms) alle Zeitbereich der Batches auswählen.

Beispiel : Batches >=000001ms&<000002ms

SQLServer:Buffer Manager

  • Buffer cache hit ratio
  • Page life expectancy
  • Page lookups/sec
  • Page reads/sec
  • Page writes/sec

SQLServer:Buffer Node(000)

Falls NUMA aktiv ist, sollten alle Nodes erfasst werden.

  • Database pages
  • Local node page lookups/sec
  • Page life expectancy
  • Remote node page lookups/sec

SQLServer:Databases(_Total)

  • Log Flush Write Time (ms)
  • Transactions/sec

SQLServer:Exec Statistics(*)

  • Distributed Query
  • DTC calls
  • OLEDB calls

SQLServer:General Statistics

  • Logins/sec
  • Logouts/sec
  • User Connections

SQLServer:Latches

  • Average Latch Wait Time (ms)
  • Latch Waits/sec

SQLServer:Locks(_Total)

  • Lock Requests/sec
  • Lock Wait Time (ms)
  • Number of Deadlocks/sec

SQLServer:Memory Manager

  • Stolen Server Memory (KB)
  • Target Server Memory (KB)
  • Total Server Memory (KB)

SQLServer:Memory Node(000)

Für jede Numa Node

  • Stolen Server Memory (KB)
  • Target Server Memory (KB)
  • Total Server Memory (KB)

SQLServer:Plan Cache(_Total)

  • Cache Hit Ratio

SQLServer:SQL Errors(_Total)

  • Errors/sec

SQLServer:SQL Statistics

  • Batch Requests/sec
  • SQL Compilations/sec
  • SQL Re-Compilations/sec

SQLServer:Transactions

  • Free Space in tempdb (KB)
  • Transactions
  • Version Store Size (KB)

SQLServer:Wait Statistics(X)

Für "Average wait time (ms)" und "Waits in progress"

  • Lock waits
  • Log buffer waits
  • Log write waits
  • Memory grant queue waits
  • Network IO waits
  • Non-Page latch waits
  • Page IO latch waits
  • Page latch waits
  • Thread-safe memory objects waits
  • Transaction ownership waits
  • Wait for the worker
  • Workspace synchronization waits