Chúng tôi có cơ sở dữ liệu OLTP 40GB hoạt động trên SQL Server 2014 SP1. Các truy vấn được phát hiện là chậm với chờ đợi IO_Completion, Độ dài hàng đợi đĩa tăng lên 900 và SQL Server ngừng đáp ứng. Những gì chúng tôi đã cố gắng:
Khởi động lại ví dụ và trong một phút, nó bắt đầu hành xử theo cùng một cách.
Sau khi khởi động lại lần thứ hai, chúng tôi đã thay đổi kích thước ban đầu của mỗi tệp dữ liệu tempdb (có 16 tệp dữ liệu được tạo) và nó bắt đầu hoạt động chính xác.
Lưu ý: Chúng tôi đang sử dụng các biến bảng cho các tập kết quả trung gian. Những bộ kết quả này rất nhỏ.
Nó đã xảy ra hai lần trong một tháng. Mỗi lần tôi thêm một chút dung lượng thủ công vào các tệp dữ liệu, thì nó sẽ bắt đầu hoạt động bình thường. Điều thú vị hơn là cùng một thiết lập (cùng phần cứng, cùng thiết lập thư mục và tệp, cùng khối lượng công việc) chúng tôi có trên SQL Server 2008 R2 và SQL Server 2012 đang hoạt động tốt.
Vui lòng giúp chúng tôi tìm một giải pháp lâu dài.
Kích thước ban đầu của tất cả các tệp dữ liệu là 1000MB, mỗi tệp là 1500 MB. Tất cả đều giống hệt nhau. Autogrowth là 100MB cho mỗi. Trước đó, chúng tôi đã phải đối mặt với sự tranh chấp giữa các trang PFS và GAM và chúng tôi đã tăng lên 16 và vấn đề được giải quyết. Cả hai cờ theo dõi 1117 & 1118 đều được bật. 24 lõi trên 2 nút NUMA. Tất cả các tệp dữ liệu trên cùng một khối lượng. Đĩa đơn giản, không có SAN.
Sơ thẩm là trên một máy vật lý. Các truy vấn với Biến bảng và truy vấn với Hash Joins thường tạo ra chờ đợi IO_Completion nhất.
Câu trả lời chi tiết của wBob đã thúc đẩy chúng tôi tìm kiếm chi tiết hơn. Làm thế nào chúng ta đã bỏ lỡ nó trước đây:
Tự động lưu tệp 'templog' trong cơ sở dữ liệu 'tempdb' đã bị hủy bởi người dùng hoặc hết thời gian sau 7704 mili giây. Sử dụng ALTER DATABASE để đặt giá trị TÀI LIỆU nhỏ hơn cho tệp này hoặc đặt rõ ràng kích thước tệp mới.
Điều này chúng tôi tìm thấy trong nhật ký khi bao giờ loại vấn đề này xảy ra. Chúng tôi đang di chuyển TempDB để tách ổ đĩa nhanh.