Bộ nhớ không gian làm việc


13

Theo sách đọc của tôi về SQL Server 2008 Internals và Xử lý sự cố (mượn từ thư viện địa phương ở Illinois) của Christian Bolton, Brent Ozar, v.v. Tôi đang cố gắng tìm hiểu và xác nhận trên máy chủ SQL và rất nhiều tìm kiếm trên web tôi sẽ đánh giá cao nếu có ai đó đánh giá cao có thể xác nhận hoặc sửa chữa sự hiểu biết của tôi.

Mỗi truy vấn hoặc hoạt động yêu cầu cấp bộ nhớ truy vấn sẽ cần bộ nhớ không gian làm việc. Trong truy vấn chung sử dụng Sắp xếp, Ghép nối Hash, Tính song song (Không chắc chắn về điều này), Chèn hàng loạt (không chắc chắn), Lập chỉ mục lại, v.v. sẽ cần bộ nhớ vùng làm việc truy vấn ..

Bộ nhớ vùng làm việc là một phần của nhóm bộ đệm SQL Server (nó được phân bổ như một phần của vùng đệm) và bộ nhớ không gian làm việc tối đa là 75% bộ nhớ được phân bổ cho vùng đệm. Theo mặc định, một truy vấn không thể lấy hơn 25% bộ nhớ vùng làm việc (trong SQL 2008 / SQL 2012 - được điều khiển bởi nhóm tải công việc mặc định của Resource Governor ra khỏi hộp).

Tìm kiếm một xác nhận về sự hiểu biết của tôi

1) Xem xét hệ thống có RAM 48 GB và bộ nhớ máy chủ tối đa được cấu hình thành 40 GB, điều này có nghĩa là bộ nhớ không gian làm việc tối đa bị giới hạn ở 30 GB và một truy vấn không thể có được bộ nhớ vùng làm việc (bộ nhớ truy vấn) hơn 10 GB. Vì vậy, nếu bạn có một truy vấn xấu làm việc với một tỷ hàng đang thực hiện phép băm lớn và cần nhiều hơn 10 GB bộ nhớ (bộ nhớ không gian làm việc), liệu bạn có quan tâm đến hàng đợi cấp bộ nhớ này hay đổ ngay vào đĩa không?

2) Nếu một truy vấn thực hiện thao tác sắp xếp lớn đã được chỉ định bộ nhớ vùng làm việc là 5 MB và trong quá trình thực hiện truy vấn của trình truy vấn nếu trình tối ưu hóa truy vấn nhận ra rằng do thống kê xấu hoặc chỉ mục bị thiếu, truy vấn này thực sự sẽ cần 30 MB bộ nhớ vùng làm việc sẽ ngay lập tức tràn sang tempdb. Ngay cả khi hệ thống có nhiều bộ nhớ không gian làm việc khả dụng trong quá trình thực thi một khi truy vấn vượt quá bộ nhớ không gian làm việc được cấp trong quá trình thực thi, nó sẽ phải tràn vào đĩa. Liệu sự hiểu biết của tôi là chính xác?

Câu trả lời:


13

nó thậm chí có quan tâm để đi qua hàng đợi cấp bộ nhớ này hoặc ngay lập tức tràn vào đĩa không?

Nó không hoạt động theo cách đó. Khi một kế hoạch được chọn yêu cầu cấp bộ nhớ, truy vấn phải có được cấp để nó đi qua hàng đợi. Tràn, nếu có, xảy ra nhiều sau đó trong chu kỳ thực hiện. Thay vào đó, một truy vấn không thể quyết định tiếp tục với việc cấp và 'đổ'. Nó phải nhận được tài trợ và, căn cứ cho rằng, bắt đầu thực hiện. Nếu khoản trợ cấp hóa ra không đủ (do ước tính kém hoặc do nhận được khoản trợ cấp thấp hơn nhiều so với yêu cầu) thì truy vấn sẽ bị buộc phải đổ.

nếu trình tối ưu hóa truy vấn nhận ra rằng do số liệu thống kê xấu hoặc chỉ mục bị thiếu

Nói đúng ra không phải là trình tối ưu hóa, là thực thi truy vấn. Trình tối ưu hóa truy vấn chỉ có tiếng nói trong việc quyết định kế hoạch, nhưng một khi kế hoạch được chọn và đưa vào thực thi, trình tối ưu hóa sẽ ra khỏi hình ảnh. Ngoài ra, "các chỉ số bị thiếu" không có vai trò ở đây. Một chỉ mục bị thiếu có thể buộc một kế hoạch xấu, nhưng nó không thể ảnh hưởng đến cách thực hiện kế hoạch 'xấu' đó vì kế hoạch đó được xây dựng xem xét chính xác những chỉ số nào thực sự tồn tại để nó biết chính xác những gì nó có thể và không thể làm. Sự cố tràn hầu như luôn xảy ra do ước tính xấu, tức là. số liệu thống kê xấu hoặc thuật toán ước tính cardinality xấu trong trình tối ưu hóa trong quá trình thực thi (nó thực sự phức tạp nếu bạn tìm hiểu chi tiết vì vậy tôi sẽ dừng ở đây).

Ngay cả khi hệ thống có nhiều bộ nhớ vùng làm việc khả dụng trong khi thực hiện một khi truy vấn vượt quá bộ nhớ vùng làm việc được cấp trong quá trình thực thi, nó sẽ phải tràn vào đĩa

Không may là đúng vậy. Tuy nhiên, trình tối ưu hóa sẽ đưa ra một kế hoạch tận dụng RAM có sẵn.

Tôi khuyên bạn nên đọc Hiểu về cấp bộ nhớ máy chủ SQL là thông tin tốt nhất về chủ đề này với biên độ rộng .


4
Remus Rusanu (MSFT) Tôi cũng đã xem xét bài đăng trên blog của bạn trong quá trình tìm kiếm trên web cho các nhà khai thác yêu cầu cấp bộ nhớ truy vấn. Cảm ơn bạn là một viên ngọc thực sự hỗ trợ diễn đàn này.
Người học SQL


Remus, phiên hội nghị thượng đỉnh PASS từ Adam Machanic rất kỹ lưỡng và làm rõ bất kỳ câu hỏi nào liên quan đến bộ nhớ không gian làm việc.
Người học SQL
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.