Werden die Werte in `sys.dm_os_wait_stats` auf 0 zurückgesetzt oder hören sie auf zu akkumulieren, wenn sie den Maximalwert erreichen?

7

Wenn Sie sich sys.dm_os_wait_stats ansehen , sind die folgenden Spalten definiert alsBIGINT

  • wait_tasks_count
  • wait_time_ms
  • max_wait_time_ms

Wenn einer dieser Werte überschritten wird 9,223,372,036,854,775,807, werden die Zähler auf 0 zurückgesetzt oder hören Sie einfach auf zu zählen?

Aus der Tabellendefinition geht nicht hervor, was sich hinter den Kulissen abspielt:

sp_helptext 'sys.dm_os_wait_stats'

Kehrt zurück:

CREATE VIEW sys.dm_os_wait_stats AS  
 SELECT *  
 FROM OpenRowset(TABLE SYSWAITSTATS)  

Das ist also eine Art Black Box.

Es gibt einige DMVs, bei denen große Zahlen negativ werden können. Ein Beispiel hierfür ist die total_elapsed_timeSpalte in dm_exec_requests.

Erik Darling
quelle

Antworten:

9

Laut Docs :

In SQL Server sind die Wartezeitzähler Bigint-Werte und daher nicht so anfällig für Zähler-Rollover wie die entsprechenden Zähler in früheren Versionen von SQL Server.

Ich habe dies bei früheren Versionen von SQL Server gesehen, bei denen ein Rollover stattgefunden hat und Sie negative Zahlen erhalten, weil die Werte signiert sind.

Ich habe mir den Quellcode angesehen und tatsächlich sind dies 8-Byte-Werte mit Vorzeichen. Da dies alles C ++ ist, habe ich einen einfachen Repro erstellt:

#include "stdint.h"
#include <iostream>

using namespace std;

int main()
{
    int64_t i8 = 0;
    cout << "Size of integer: " << sizeof(i8) << " bytes." << endl;
    cout << "Max Value: " << INT64_MAX << endl;
    i8 = INT64_MAX + 1;
    cout << "Value of MAX + 1: " << i8 << endl;
    cin;
    return 0;
}

Die Ausgabe ähnelt der in früheren Versionen von SQL Server, der signierte Wert wird verschoben. Beachten Sie, dass Sie beim Kompilieren eine Compiler-Warnung erhalten sollten, dass es zu einem Rollover kommt - ich habe die Compiler-Warnung 4307 erhalten .

Ausgabe von oben:

Size of integer: 8 bytes.
Max Value: 9223372036854775807
Value of MAX + 1: -9223372036854775808

Ich sage NICHT , dass SQL Server genau so funktioniert, da es viele Nuancen gibt ... aber dies sollte eine ähnliche Annäherung sein.

Was bedeutet das alles wirklich?

Ich bezweifle sehr, wie Aaron gesagt hat, dass Sie im aktuellen Hardware-Klima jemals auf einen Rollover bei den 64-Bit-Werten stoßen werden. Wenn Sie dies tun würden, wäre es leicht zu erkennen und meiner Meinung nach mehr Ungenauigkeiten zu melden als jedes echte Problem.

Sean Gallardy - Benutzer im Ruhestand
quelle