Chúng tôi đang bận kiểm tra tải hệ thống OLTP mà chúng tôi đã phát triển trong .NET 4.0 và chạy SQL Server 2008 R2 ở phía sau. Hệ thống sử dụng hàng đợi Nhà môi giới dịch vụ SQL Server, rất hiệu quả, nhưng chúng tôi đang gặp phải một xu hướng đặc biệt trong khi xử lý.
SQL Server xử lý các yêu cầu với tốc độ phồng trong 1 phút, sau đó là ~ 20 giây hoạt động ghi đĩa tăng lên. Biểu đồ sau minh họa vấn đề.
Yellow = Transactions per second
Blue = Total CPU usage
Red = Sqlsrv Disk Write Bytes/s
Green = Sqlsrv Disk Read Bytes/s
Trong quá trình khắc phục sự cố, chúng tôi đã thử các cách sau mà không có bất kỳ thay đổi đáng kể nào trong mẫu:
- Đại lý máy chủ SQL đã dừng.
- Giết chết hầu hết mọi quy trình đang chạy khác (Không có A / V, SSMS, VS, Windows Explorer, v.v.)
- Đã xóa tất cả các cơ sở dữ liệu khác.
- Vô hiệu hóa tất cả các bộ hẹn giờ hội thoại (chúng tôi không sử dụng bất kỳ trình kích hoạt nào).
- Đã chuyển từ cách tiếp cận theo hướng hàng đợi tin nhắn sang thiết kế giám sát bảng đơn giản / thô.
- Sử dụng tải khác nhau từ nhẹ đến nặng.
- Đã sửa tất cả các bế tắc.
Có vẻ như SQL Server có thể đang xây dựng bộ đệm của nó và ghi nó vào đĩa theo các khoảng thời gian cụ thể, nhưng tôi không thể tìm thấy bất cứ điều gì trực tuyến để hỗ trợ lý thuyết này.
Tiếp theo, tôi dự định chuyển giải pháp sang môi trường thử nghiệm chuyên dụng của chúng tôi để xem liệu tôi có thể tái tạo vấn đề không. Bất kỳ trợ giúp tạm thời sẽ được đánh giá rất cao.
Cập nhật 1 Theo yêu cầu, theo đây là một biểu đồ bao gồm Trang / Điểm kiểm tra , Tuổi thọ trang và một số bộ đếm độ trễ của đĩa.
Có vẻ như Điểm kiểm tra (đường màu xanh nhạt) là nguyên nhân làm giảm hiệu suất (đường màu vàng) mà chúng tôi đang quan sát. ^
Độ trễ của đĩa vẫn tương đối ổn định trong quá trình xử lý và tuổi thọ trang dường như không có bất kỳ ảnh hưởng đáng chú ý nào. Chúng tôi cũng đã điều chỉnh lượng ram có sẵn cho SQL Server, điều này cũng không có ảnh hưởng lớn. Thay đổi mô hình phục hồi từ SIMPLE
đến FULL
sự khác biệt nhỏ cũng được thực hiện.
Cập nhật 2 Bằng cách thay đổi "Khoảng thời gian phục hồi" như sau, chúng tôi đã cố gắng giảm khoảng thời gian xảy ra điểm kiểm tra:
EXEC sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
EXEC sp_configure 'recovery interval', '30'
GO
RECONFIGURE
GO
EXEC sp_configure 'show advanced options',0
GO
RECONFIGURE
Tôi không chắc chắn liệu đây là thực hành xấu?
FULL
hoặc BULK_LOGGED
, nó vẫn hoạt động như thể SIMPLE
cho đến khi bạn sao lưu toàn bộ.