Làm cách nào để xóa bảng khỏi bộ đệm của SQL Server?


10

Tôi có một vài bảng trong cơ sở dữ liệu của mình không nên lưu vào bộ nhớ cache.

Làm cách nào để tôi bảo SQL Server không lưu các trang của bảng hoặc làm cách nào để xóa một bảng từ bộ đệm?

Xóa tất cả các bộ đệm không phải là một lựa chọn.

Tôi đang sử dụng SQL Server 2008 và SQL Server 2008 R2.


4
Trên cơ sở nào bạn đã quyết định rằng các bảng không nên được lưu trữ?

3
Nếu các bảng của bạn đang được lưu trữ thì chúng sẽ được truy vấn. Nếu chúng được truy cập không thường xuyên thì trình quản lý Bộ nhớ Máy chủ SQL sẽ xóa chúng theo sở thích của các đối tượng khác vào thời điểm cần thiết. Mục tiêu của bạn ở đây là gì?
John Sansom

4
@ John - Không biết mục tiêu của OP là gì nhưng đôi khi điều này sẽ hữu ích. ví dụ: thực hiện quét một lần đối với một bảng lớn mà không xóa vùng đệm.

3
Một số lý do: bảng ưu tiên thấp, iis / rs trên cùng một máy như máy chủ sql, sử dụng năng lượng, v.v. Điều quan trọng nhất là một số bảng là các bảng ưu tiên thấp liên quan đến hiệu suất của ứng dụng và có thể được đọc an toàn từ đĩa Bất cứ khi nào họ được truy cập. Bằng cách giữ các bảng đó ra khỏi vùng đệm, việc phân tích bộ nhớ trở nên dễ dàng hơn.
Catalin Adler

1
@ user973156: Mã và thiết kế của bạn có tốt đến mức bây giờ bạn chỉ có thể đoán SQL Server thứ 2 để làm mọi thứ tốt hơn không?
gbn

Câu trả lời:


12

Không có cách nào để làm điều này.

DBCC DROPCLEANBUFFERSkhông chấp nhận bất kỳ tham số nào cho một cơ sở dữ liệu hoặc đối tượng cụ thể. SQL Server nội bộ có thể thực hiện việc này ở mức cơ sở dữ liệu, tuy nhiên khi cơ sở dữ liệu là AUTO_CLOSEtất cả các trang tương ứng được xóa khỏi bộ đệm.

Ngoài ra, SQL Server bên trong có thể đánh dấu một số trang nhất định để chúng sẽ là những trang đầu tiên được viết bởi nhà văn lười biếng. Điều này được các DMV sử dụng như sys.dm_db_index_physical_statsđể tránh xả vùng đệm như đã đề cập trong bài viết này nhưng chức năng này không được tiết lộ theo bất kỳ cách nào đối với chúng tôi (mặc dù có thể hữu ích khi có thể chỉ định tương tự nếu thực hiện quét một lần của một bảng lớn chẳng hạn).


7

Bạn không thể chỉ định rằng các bảng cụ thể không nên được lưu trữ. Điều gì khiến bạn nghĩ rằng bạn không muốn các bảng trong bộ đệm?

SQL Server thực hiện TẤT CẢ các hoạt động bình thường của nó trong nhóm bộ đệm, vì vậy nếu bạn có thể yêu cầu SQL Server không tải bảng vào bộ đệm thì bảng đó sẽ không thể truy cập được đối với mọi hoạt động DML thông thường.

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.