Các giá trị trong `sys.dm_os_wait_stats` có được đặt lại về 0 hoặc ngừng tích lũy khi chúng đạt giá trị tối đa không?


7

Khi xem sys.dm_os_wait_stats , các cột sau được định nghĩa làBIGINT

  • Wait_t Nhiệm_count
  • chờ đợi
  • max_wait_time_ms

Nếu bất kỳ giá trị nào ở trên 9,223,372,036,854,775,807, các bộ đếm đặt lại về 0, hoặc chỉ đơn giản là dừng đếm?

Không rõ từ định nghĩa bảng những gì diễn ra sau hậu trường:

sp_helptext 'sys.dm_os_wait_stats'

Trả về:

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

Vì vậy, đó là một chút của một hộp đen.

Có một số DMV nơi số lượng lớn có thể chuyển sang âm. Một ví dụ về điều này là total_elapsed_timecột trong dm_exec_requests.

Câu trả lời:


9

Theo Tài liệu :

Trong SQL Server, bộ đếm thời gian chờ là giá trị bigint và do đó không dễ bị cuộn qua như bộ đếm tương đương trong các phiên bản trước của SQL Server.

Tôi đã thấy điều này với phiên bản SQL Server trước đó khi cuộn qua xảy ra và bạn sẽ nhận được số âm vì các giá trị được ký.

Tôi đã xem mã nguồn và thực sự đây là các giá trị được ký 8 byte. Vì đây là tất cả C ++, tôi đã tạo một repro đơn giản:

#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;
}

Đầu ra tương tự như những gì tôi đã trải nghiệm trong các phiên bản SQL Server trước đó, giá trị đã ký được chuyển qua. Lưu ý rằng nếu bạn biên dịch cái này, bạn sẽ nhận được một cảnh báo trình biên dịch rằng sẽ có cuộn qua - Tôi đã nhận được cảnh báo trình biên dịch 4307 .

Đầu ra ở trên:

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

Tôi KHÔNG nói rõ đây chính xác là cách SQL Server hoạt động trong mọi trường hợp vì có nhiều sắc thái ... nhưng đây phải là một xấp xỉ tương tự.

Tất cả điều này thực sự có ý nghĩa gì?

Tôi rất nghi ngờ, như Aaron đã nói, rằng bạn sẽ gặp phải cuộn qua các giá trị 64 bit trong môi trường phần cứng hiện tại. Nếu bạn đã làm, nó sẽ dễ dàng phát hiện và thực sự là báo cáo không chính xác hơn bất kỳ vấn đề thực sự theo ý kiến ​​của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.