Bộ nhớ cache của kế hoạch truy vấn cồng kềnh bởi các truy vấn đặc biệt, ngay cả với Tối ưu hóa cho khối lượng công việc đột xuất Ad-hoc


7

Tôi đã nhận thấy những gì tôi nghĩ là vấn đề bất thường với bộ đệm của kế hoạch truy vấn của chúng tôi, trong đó các kế hoạch trong bộ đệm không bao giờ quá một ngày.

Thông qua việc chạy truy vấn sau (lịch sự của Kimberly Tripp ), nó cho thấy phần lớn các gói (4,5Gb của 6Gb được lưu trong bộ nhớ cache hoặc 44813 trong số ~ 50000), là các truy vấn Ad-hoc có số lượng sử dụng là 1.

SELECT objtype AS [CacheType]
    , count_big(*) AS [Total Plans]
    , sum(cast(size_in_bytes as decimal(18,2)))/1024/1024 AS [Total MBs]
    , avg(usecounts) AS [Avg Use Count]
    , sum(cast((CASE WHEN usecounts = 1 THEN size_in_bytes ELSE 0 END) as decimal(18,2)))/1024/1024 AS [Total MBs - USE Count 1]
    , sum(CASE WHEN usecounts = 1 THEN 1 ELSE 0 END) AS [Total Plans - USE Count 1]
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY [Total MBs - USE Count 1] DESC

Tôi đã xác định truy vấn vấn đề (động, với một EXEC, tất nhiên ...), khá khó chịu, nhưng cũng phức tạp khi chỉ là 'sửa chữa', vì vậy tôi đang xem xét các cải tiến ngay lập tức có thể được thực hiện.

Ví dụ đã được đặt để sử dụng Tối ưu hóa cho khối lượng công việc đặc biệt, tuy nhiên, CacheObjTypetừ sys.dm_exec_cached_planstất cả đều là Kế hoạch được biên dịch thay vì Sơ đồ tổng hợp .

Khi sử dụng chế độ Khối lượng công việc đặc biệt, các gói có nên không được sơ khai Kế hoạch cho đến khi chúng usecountslớn hơn 1 không? Hoặc đó không phải là cách làm việc này?

Ngoài ra còn có một refcountslĩnh vực mà dường như không ai đề cập đến khi nói về các truy vấn Adhoc. Số tiền hoàn trả luôn là 1 khi loại là Sơ đồ tổng hợp và 2 khi loại là Gói tổng hợp . Ngay cả khi đọc BOL , tôi cũng không hoàn toàn chắc chắn lĩnh vực này có ý nghĩa gì. Ai đó có thể làm rõ?

Câu trả lời:


6

Theo đó , lần chạy thứ hai của một đợt ad hoc sẽ loại bỏ sơ khai (chỉ được sử dụng một lần) và tạo và lưu trữ kế hoạch (sử dụng lần đầu tiên).

Tôi cũng chưa thấy nhiều tài liệu tham khảo refcountskhác ngoài số lượng tài liệu tham khảo của các đối tượng bộ đệm. Các đối tượng Adhoc Compiled Plan vẫn có thể có refcount1, do đó, nó không chỉ gây ra bởi sự kiên trì của kế hoạch.


Để tôi hiểu những gì bạn đang nói, usecount of 1 có nghĩa là kế hoạch đã được sử dụng một lần, tuy nhiên truy vấn đã được thực hiện hai lần? Một sơ khai do đó không được chuyển đổi thành một kế hoạch, thay vì nó được thay thế bởi nó?
Mark Sinkinson

4
Từ liên kết được cung cấp bởi @SQLFox - Phương án còn sơ khai biên soạn cho phép Engine Cơ sở dữ liệu để nhận ra rằng hàng loạt quảng cáo hoc này đã được biên soạn trước đây nhưng đã chỉ được lưu trữ vẫn còn sơ khai kế hoạch biên soạn, vì vậy khi đợt này được gọi (biên soạn hoặc thực hiện) một lần nữa, các Cơ sở dữ liệu biên dịch lô, loại bỏ sơ đồ kế hoạch đã biên dịch khỏi bộ đệm của kế hoạch và thêm kế hoạch được biên dịch đầy đủ vào bộ đệm của kế hoạch .
Kin Shah
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.