Tôi đang chạy cơ sở dữ liệu Azure SQL theo phiên bản S2 (50 DTU). Việc sử dụng bình thường của máy chủ thường treo khoảng 10% DTU. Tuy nhiên, máy chủ này thường xuyên rơi vào trạng thái nơi nó sẽ gửi mức sử dụng cơ sở dữ liệu DTU tới 85-90% trong nhiều giờ. Sau đó, đột nhiên nó quay trở lại mức sử dụng 10% bình thường.
Các truy vấn đối với máy chủ từ ứng dụng dường như vẫn hoạt động nhanh chóng trong trạng thái quá tải này.
Tôi có thể mở rộng máy chủ từ S2 => bất cứ thứ gì (ví dụ S3) => S2 và dường như xóa hết trạng thái được treo. Nhưng sau đó vài giờ, nó sẽ lặp lại chu kỳ trạng thái quá tải tương tự. Một điều kỳ lạ khác mà tôi nhận thấy là nếu tôi chạy máy chủ này trên gói S3 (100 DTU) 24/7 thì tôi đã không quan sát thấy hành vi này. Nó dường như chỉ xảy ra khi tôi hạ thấp cơ sở dữ liệu xuống gói S2 (50 DTU). Trong kế hoạch S3, tôi luôn luôn sử dụng 5-10% DTU. Rõ ràng là không được sử dụng đúng mức.
Tôi đã kiểm tra các báo cáo truy vấn Azure SQL để tìm kiếm các truy vấn giả mạo, nhưng tôi thực sự không thấy điều gì bất thường và nó hiển thị các truy vấn của tôi bằng cách sử dụng các tài nguyên như tôi mong đợi.
Như chúng ta có thể thấy ở đây, việc sử dụng tất cả đều đến từ Data IO. Nếu tôi thay đổi báo cáo hiệu suất ở đây để hiển thị các truy vấn IO dữ liệu hàng đầu theo MAX, chúng tôi sẽ thấy điều này:
Nhìn vào các yêu cầu chạy dài này dường như chỉ ra các cập nhật thống kê. Không thực sự bất cứ điều gì chạy từ ứng dụng của tôi. Ví dụ: truy vấn 16302 có hiển thị:
SELECT StatMan([SC0], [SC1], [SC2], [SB0000]) FROM (SELECT TOP 100 PERCENT [SC0], [SC1], [SC2], step_direction([SC0]) over (order by NULL) AS [SB0000] FROM (SELECT [UserId] AS [SC0], [OrganizationId] AS [SC1], [Id] AS [SC2] FROM [dbo].[Cipher] TABLESAMPLE SYSTEM (1.250395e+000 PERCENT) WITH (READUNCOMMITTED) ) AS _MS_UPDSTATS_TBL_HELPER ORDER BY [SC0], [SC1], [SC2], [SB0000] ) AS _MS_UPDSTATS_TBL OPTION (MAXDOP 16)
Nhưng một lần nữa, báo cáo cũng cho thấy các truy vấn này chỉ sử dụng một tỷ lệ nhỏ trong việc sử dụng Data IO trên máy chủ (<4%). Tôi cũng chạy các cập nhật thống kê (và xây dựng lại chỉ mục) trên toàn bộ cơ sở dữ liệu hàng tuần như một phần của bảo trì thường xuyên.
Dưới đây là một báo cáo khác cho thấy các truy vấn IO dữ liệu MAX trong khoảng thời gian chỉ bao gồm vài giờ trong sự cố sử dụng tài nguyên cao.
Như chúng ta có thể thấy, thực sự không có bất kỳ truy vấn nào báo cáo việc sử dụng IO dữ liệu quan trọng.
Tôi cũng đã chạy sp_who2
và sp_whoisacive
trên cơ sở dữ liệu và không thực sự thấy bất cứ điều gì nhảy ra khỏi tôi (mặc dù tôi sẽ thừa nhận tôi không phải là một chuyên gia với các công cụ này).
Làm thế nào để tôi tìm ra những gì đang xảy ra ở đây? Tôi không nghĩ rằng bất kỳ truy vấn ứng dụng nào của tôi đều đổ lỗi cho việc sử dụng tài nguyên này và tôi có cảm giác rằng có một số quy trình nội bộ đang chạy trong nền trên máy chủ đang giết chết nó.