Tại sao một kế hoạch với tối ưu hóa FULL hiển thị tham số hóa đơn giản?


8

Tôi đọc rằng chỉ các Gói đơn giản mới có thể được Tham số hóa đơn giản và không phải tất cả các truy vấn (ngay cả khi gói là Trivial) đều có thể được Tham số hóa đơn giản .

Vậy thì tại sao kế hoạch này hiển thị Tối ưu hóa hoàn toàn và Tham số hóa đơn giản cùng một lúc?

QUẢ HẠCH

Câu trả lời:


7

Tham số hóa đơn giản được thử khi tìm thấy một kế hoạch tầm thường . Nỗ lực tham số hóa có thể được coi là an toàn hoặc không an toàn .

Điểm mấu chốt là một kế hoạch tầm thường được tìm thấy và được coi là an toàn . Nếu chi phí của kế hoạch tầm thường vượt quá cost threshold for parallelism, trình tối ưu hóa sẽ chuyển sang các giai đoạn tối ưu hóa sau này, trong đó các kế hoạch song song có thể được xem xét. Cho dù kết quả cuối cùng là một kế hoạch nối tiếp hoặc song song, nó sẽ được tham số hóa đơn giản nếu kế hoạch tầm thường an toàn được tìm thấy ( nhưng cuối cùng không được sử dụng ) được tham số hóa.

Trong ví dụ câu hỏi, đặt giá cost threshold for parallelismcao hơn chi phí của kế hoạch tầm thường sẽ cho phép trình tối ưu hóa dừng ở giai đoạn đó.


Nhìn vào kế hoạch truy vấn không phải lúc nào cũng đủ để biết liệu truy vấn của bạn có thực sự được Tham số hóa đơn giản hay không.

Cách an toàn nhất là kiểm tra một số DMV để xác minh:

/*Unsafe auto param*/
SELECT *
FROM sys.dm_os_performance_counters AS dopc
WHERE dopc.counter_name LIKE '%Unsafe Auto-Params/sec%';

/*Safe auto param*/
SELECT *
FROM sys.dm_os_performance_counters AS dopc
WHERE dopc.counter_name LIKE '%Safe Auto-Params/sec%';

/*Trivial Plans*/
SELECT * 
FROM sys.dm_exec_query_optimizer_info AS deqoi 
WHERE deqoi.counter = 'trivial plan';

Ngoài ra, bạn cũng có thể sử dụng cờ theo dõi không có giấy tờ 8607, nhưng không phải là một OPTIONgợi ý mệnh đề. Sử dụng OPTIONmệnh đề ngăn chặn một kế hoạch tầm thường.

DBCC TRACEON(8607, 3604);
/*Wait*/    

/*Run*/     
SELECT u.CreationDate, u.Id
FROM dbo.Users AS u
WHERE u.Reputation = 2;

/*Clean up*/
DBCC TRACEOFF(8607, 3604);

Nếu gói được coi là an toàn cho Tham số đơn giản, bạn sẽ thấy một thông báo xác nhận nó ở đây.

********************

** Query marked as Cachable

** Query marked as Safe for Auto-Param
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.