Tôi có trang web ASP.NET sở hữu bộ đệm dữ liệu độc lập và dữ liệu không thay đổi trong thời gian dài, do đó không cần truy vấn SQL Server lần thứ hai với cùng một truy vấn. Tôi cần cải thiện hiệu năng của các truy vấn lần đầu tiên (còn nguyên) đến SQL Server đó. Một số truy vấn xử lý nhiều dữ liệu đến mức chúng có thể khiến SQL Server sử dụng tempdb
. Tôi không sử dụng biến bảng tạm thời hoặc bảng tạm thời, vì vậy SQL Server quyết định tự sử dụng tempdb
bất cứ khi nào cần.
Kích thước db của tôi là 16Gb, tôi có sẵn 32Gb RAM vật lý trên máy chủ của mình.
Tôi hiểu rằng chiến lược lưu trữ bộ đệm của MS SQL Server cố gắng giữ dữ liệu trong RAM để tăng tốc hiệu suất của các truy vấn tương tự nếu chúng cần được tải lại cùng một dữ liệu. Ngoài ra, nó sẽ cố gắng sử dụng RAM có sẵn thay vì tempdb để tăng tốc hiệu suất mà không gây ra truy cập đĩa.
Tôi cho rằng khi truy vấn cần lưu trữ thứ gì đó trong tempdb thì SQL Server xuất hiện và không có đủ RAM, SQL Server có 2 lựa chọn:
1) để tải một số dữ liệu được lưu trong bộ nhớ cache và sử dụng RAM không thay vì tempdb để tránh ghi đĩa
2) giữ dữ liệu được lưu trong bộ nhớ cache cho các truy vấn trong tương lai và bắt đầu sử dụng tempdb, điều này gây ra việc ghi vào đĩa chậm.
Tôi không biết SQL Server sẽ lựa chọn gì trong tình huống này, nhưng tôi muốn lựa chọn số 1 vì tôi chỉ quan tâm đến hiệu năng của các truy vấn lần đầu (trinh nữ), vì tôi không bao giờ gửi lại truy vấn tương tự cho SQL Server nữa (mặc dù tôi có thể gửi truy vấn tương tự).
Chiến lược bộ nhớ đệm SQL Server cho kịch bản này là gì?
Làm thế nào để cân bằng việc sử dụng RAM giữa việc tránh tempdb cho các truy vấn còn nguyên và tốc độ của truy vấn lần thứ hai?
Có thể định cấu hình Máy chủ SQL theo cách mà nó sẽ đưa ra lựa chọn số 1 không? Nếu có thì làm thế nào?
Làm thế nào khác tôi có thể tăng hiệu suất của tất cả các truy vấn SQL nguyên bản?
Vì tôi không biết về chiến lược bộ đệm của SQL Server, tôi muốn đặt cơ sở dữ liệu trên RAM Disk. Điều này sẽ đảm bảo rằng bất kỳ truy vấn mới nào cũng có tốc độ tải dữ liệu không được lưu trữ cao ngay cả khi SQL Server luôn đưa ra lựa chọn số 1. Rủi ro của nó là SQL Server có thể bắt đầu sử dụng nhiều tempdb hơn với ít RAM hơn (chỉ còn lại 16Gb sau khi tôi sử dụng 16Gb cho RAM Disk) nếu nó tiếp tục đưa ra lựa chọn # 2, điều này sẽ làm chậm các truy vấn không rõ ràng đó tempdb
.
Tôi quan tâm đến giải pháp cho SQL 2008 R2, nhưng tôi đoán có lẽ giống với SQL 2008, SQL 2005 và có thể là SQL 2000.
Làm rõ:
Không có ứng dụng nào khác chạy trên hộp đó, nó dành riêng cho SQL Server . Trang web chạy trên hộp riêng biệt.
Đó là SQL Server 2008 R2 Phiên bản tiêu chuẩn 64 bit trên Windows Server 2008 R2 Enterprise 64 bit.
Tôi chỉ chạy các truy vấn chỉ đọc và cơ sở dữ liệu được đặt thành chỉ đọc .
Hãy giả sử rằng đã có chỉ số tốt . Câu hỏi này là về việc SQL Server đưa ra lựa chọn số 1 so với lựa chọn số 2, làm thế nào để đưa ra lựa chọn, nếu có cách nào để kiểm soát nó và nếu RAM Disk giúp nó đưa ra lựa chọn phù hợp cho các truy vấn mới.