Tôi muốn tìm hiểu điều gì gây ra các Biên dịch SQL cao (không phải là biên dịch lại) mà tôi đang thấy trong các bộ đếm màn hình hiệu suất.
Đây là ý kiến của tôi về nó: Nếu tôi thấy rất nhiều phần tổng hợp SQl, thì điều đó có nghĩa là các truy vấn trên hệ thống của chúng tôi không được lưu vào bộ nhớ cache vì những lý do sau:
- Nhiều truy vấn adhoc
Chạy các truy vấn mà SQl không lưu cache, ví dụ:
CẬP NHẬT bảng1 SET col1 = 'Chuỗi dài hơn 8000 ký tự .....' WHERE key_column = some int
Các kế hoạch đã hết thời gian và bị xóa khỏi bộ đệm vì: Bộ nhớ cache sắp hết dung lượng hoặc các gói không được sử dụng đủ lâu.
Điều duy nhất tiến gần đến việc chèn các bộ đệm trong bộ đệm là Trình thủ tục được lưu trữ-> SP: CacheInserts nhưng nó chỉ xem sau bộ đệm thủ tục được lưu trữ.
Vì vậy, tôi đã thử các cách sau để có được các truy vấn adhoc:
SELECT [cp].[refcounts] -- when Refcounts becomes 0, plan is excluded from cache.
, [cp].[usecounts]
, [cp].[objtype]
, st.[dbid]
, st.[objectid]
, st.[text]
, [qp].[query_plan]
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text ( cp.plan_handle ) st
CROSS APPLY sys.dm_exec_query_plan ( cp.plan_handle ) qp ;
Tôi nghĩ các truy vấn gây ra các trình biên dịch nên là các truy vấn có objtype = Adhoc nhưng điều này cũng có thể liên quan đến các biên dịch lại. Bây giờ tôi phải chạy profiler, nắm bắt các truy vấn gây ra các phần tổng hợp lại và sau đó loại bỏ nó khỏi danh sách trên.
Tôi đang đi đúng hướng?
Có một truy vấn duy nhất nào tôi có thể sử dụng để đạt được các phần tổng hợp SQL mà không cần quá nhiều công việc không?
Tài nguyên giúp tôi đạt được những kiến thức trên:
http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/954b4fba-3774-42e3-86e7-e5172abe0c83
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=143946
http: //technet.microsoft.com/en-nz/l Library / cc966425 (en-us) .aspx
http://www.sqlservercentral.com/Forums/Topic914951-360-1.aspx
Bất kỳ trợ giúp được thực sự đánh giá cao.