Máy chủ SQL - Buộc DB trong bộ nhớ?


14

Chúng tôi có một máy chủ Windows 2008 x64 mạnh mẽ (CPU 4 x 4 lõi, RAM 32 GB) chạy SQL Server 2005 64 bit. Chúng tôi có một cơ sở dữ liệu nhỏ (6GB) nhưng rất quan trọng, hơi chậm truy cập cho đến khi các trang được lưu trong bộ nhớ (việc sử dụng rất nhiều I / O ngẫu nhiên nên tỷ lệ rất thấp là một trang nhất định nằm trong bộ nhớ và người dùng cuối phàn nàn về sự chậm chạp ban đầu). Các đĩa đủ nhanh (cục bộ 15K SAS) nhưng tôi đoán ứng dụng này được viết hơi vụng về (đó là giải pháp COTS) nên tôi tự hỏi liệu có cách nào để "buộc" cơ sở dữ liệu trong bộ nhớ trong SQL Server 2005 (2008 không được hỗ trợ bởi nhà cung cấp, vì vậy chúng tôi không nên nâng cấp lên đó) để giúp tránh các lỗi lấp đầy bộ đệm ban đầu?

Phương pháp hiện tại của tôi là tôi chạy CHỌN * từ mỗi bảng trong tập lệnh để lấy các trang dữ liệu trong bộ nhớ nhưng một số đối tượng (chỉ mục, Tìm kiếm toàn văn bản, v.v.) không được lưu trong bộ nhớ cache của phương thức này (và sửa đổi tập lệnh để thẩm vấn các chỉ mục và viết các mệnh đề WHERE thích hợp vào bộ đệm là phức tạp sôi sục trên đại dương).

Câu trả lời:


15

Không, không có cách nào để buộc cơ sở dữ liệu vào bộ đệm, thật không may. Phương pháp vũ phu của bạn có lẽ là đơn giản nhất. Bạn có thể có thể đến gần hơn bằng cách sử dụng các tập lệnh chống phân mảnh chỉ mục với cài đặt ngưỡng rất thấp, như nói rằng xây dựng lại chỉ mục nếu nó bị phân mảnh 1%, như thế này:

http://sqlserverpedia.com/wiki/Index_Maintenance

Sẽ mất nhiều thời gian hơn và liên quan đến việc ghi nhiều hơn vào đĩa, nhưng nó sẽ có tác dụng phụ trong việc chống phân mảnh chỉ mục của bạn và cập nhật số liệu thống kê, dù sao đó cũng là một ý tưởng hay.


9

Ok - Tôi không thể nhận xét về câu trả lời của Brent (tuy nhiên, vì tôi không có đủ đại diện) - nhưng nếu bạn sẽ đi theo con đường chống phân mảnh, không nhất thiết phải xây dựng lại chỉ mục - vì điều đó sẽ xây dựng các chỉ mục mới, có thể phát triển cơ sở dữ liệu nếu không có đủ dung lượng trống và đảm bảo rằng bản sao lưu nhật ký tiếp theo của bạn ít nhất là kích thước của các chỉ mục của bạn và nhật ký của bạn cũng có thể có hàng tấn bản ghi nhật ký (tùy thuộc vào mô hình khôi phục). Nếu bạn đang thực hiện lộ trình chống phân mảnh, hãy thực hiện ALTER INDEX ... REORGANIZE, không yêu cầu bất kỳ không gian trống nào (tốt, một trang 8k) nhưng sẽ đọc cấp độ lá vào bộ nhớ và chỉ hoạt động trên phân mảnh trang. Các cấp độ không có lá sẽ xuất hiện nhanh chóng sau một số truy vấn và (tùy thuộc vào quạt ra) sẽ có ít dữ liệu hơn nhiều so với cấp độ lá.


Tôi thích nó --extrachars
Matt Rogish

1

Tại sao các đối tượng cơ sở dữ liệu được xóa từ bộ đệm ở vị trí đầu tiên? Bạn đang khởi động lại các dịch vụ SQL hoặc tắt cơ sở dữ liệu / trực tuyến? Hay chúng bị đẩy ra bởi bộ nhớ đệm từ các cơ sở dữ liệu khác?

Trân trọng,

SCM.


1
Hiện tại hệ thống đang trong quá trình thử nghiệm và khởi động lại thường xuyên; Người dùng phàn nàn sau đó. Trong sản xuất hy vọng ít hơn nhiều
Matt Rogish

Âm thanh giống như sự chậm trễ từ việc bắt đầu kết nối; Tôi sẽ không mong đợi người dùng sẽ thấy một sự khác biệt đáng chú ý trong các lần đọc được lưu trữ / không lưu trữ; trừ khi có các yếu tố khác như đĩa quá tải hoặc chậm liên quan.
SqlACID


1

Tôi đã có một số tình huống đang cập nhật số liệu thống kê với FULLSCAN trên các bảng chính đã buộc dữ liệu vào bộ đệm và khiến các DML tiếp theo của tôi xung quanh các bảng đó nhanh hơn rất nhiều. Và đây không phải là kết quả của thống kê lỗi thời vì nó không dẫn đến thay đổi trong kế hoạch thực hiện.


0

Tại sao bạn không cài đặt phiên bản SQL Server thứ hai chỉ với cơ sở dữ liệu đó và đặt bộ nhớ tối thiểu cho phiên bản đó thành 6GB?

Điều này sẽ đảm bảo rằng các cơ sở dữ liệu khác của bạn không bao giờ bị mất bộ nhớ từ cơ sở dữ liệu "nhỏ nhưng rất quan trọng" của bạn.

Điều đó cũng có nghĩa là bạn có thể lấy phiên bản khác ngoại tuyến và DB nhỏ của bạn sẽ vẫn còn trong bộ nhớ.


0

Tôi sẽ sử dụng profiler để kiểm tra sql của bạn. So sánh 'logic' đọc với 'vật lý' đọc. Máy chủ SQL rất thông minh và sẽ sử dụng RAM cần thiết cho kết quả hiệu quả nhất.

Ngoài ra kiểm tra xem autostats của bạn được cập nhật.

Nếu không có thêm ý tưởng về loại truy vấn và kích thước bảng db thì nghe có vẻ hơi lạ.

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.