2011-09-06 25 views
7

Thực thi câu lệnh ALTER PROCEDURE cho một thủ tục được lưu trữ có gây ra tất cả các kế hoạch thực hiện được lưu trong bộ nhớ cache cho thủ tục đã lưu trữ đó trở nên không hợp lệ và hết hạn trong SQL Server 2008/2005 không?Việc thay đổi thủ tục lưu trữ có hết hạn các kế hoạch thực hiện được lưu trong bộ nhớ cache không?

+1

Có, nó sẽ làm –

+0

Nhờ tất cả những người trả lời – Kane

Trả lời

7

Có.

Bạn có thể xác minh điều này bằng cách làm

SELECT * FROM sys.dm_exec_procedure_stats 
where object_id = object_id('YourProc', 'P') 

trước và sau.

Từ TechNet

[tình huống trong đó kế hoạch này sẽ được gỡ bỏ từ bộ nhớ cache bao gồm] hoạt động toàn cầu như chạy DBCC FREEPROCCACHE để xóa tất cả các kế hoạch từ bộ nhớ cache, cũng như thay đổi cho một quy trình đơn lẻ, chẳng hạn như ALTER PROCEDURE, mà sẽ thả tất cả các kế hoạch cho quy trình đó từ bộ nhớ cache.

+0

Trong khi tôi tin rằng bạn (như bạn có một danh tiếng tuyệt vời) là tài liệu này trên MSDN bất cứ nơi nào – Kane

+0

Có nó sẽ được. Sẽ tìm thấy một liên kết. –

+0

http://msdn.microsoft.com/en-us/library/ms181055.aspx –

4

Có. Tất nhiên điều này rất dễ dàng để kiểm tra bản thân:

  1. Tạo một thủ tục
  2. Execute nó một vài lần
  3. Confirm nó được lưu trữ bởi sys.dm_exec_cached_plans kiểm tra
  4. Alter thủ tục
  5. Hàng trong sys.dm_exec_cached_plans đã biến mất
CREATE PROCEDURE dbo.blat AS SELECT 1; 
GO 
EXEC dbo.blat; 
GO 5 

SELECT COUNT(*) 
FROM sys.dm_exec_cached_plans AS p 
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS s 
WHERE [sql].[text] LIKE '%dbo.blat%'; 

ALTER PROCEDURE dbo.blat AS SELECT 22; 
GO 

SELECT COUNT(*) FROM sys.dm_exec_cached_plans AS p 
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS s 
WHERE [sql].[text] LIKE '%dbo.blat%'; 

1

Nó không - nhưng có thể có các yếu tố khác.

Đôi khi với sự cố nghiêm trọng về hiệu suất, tôi thấy rằng hoạt động rõ ràng DBCC FREEPROCCACHE có thể cải thiện hiệu suất của hệ thống. Tất nhiên bạn cũng có thể xóa bộ nhớ cache cho một sproc nếu bạn biết nó có vấn đề.

+0

Đây có phải là tình huống trong đó bộ đệm kế hoạch có đầy đủ các truy vấn adhoc sử dụng một lần hay gì đó không? Nếu tối ưu hóa như vậy cho khối lượng công việc adhoc có thể là một lựa chọn. –

+0

Thành thật mà nói tôi đã nhìn thấy điều này một vài lần, đã dành rất nhiều thời gian vào nó lần đầu tiên cố gắng giải quyết - có nhà thầu và mọi thứ. Chúng tôi không bao giờ có đến nguyên nhân tuyến đường chỉ phát hiện ra rằng sau rất nhiều cập nhật cơ sở dữ liệu đôi khi nó là cần thiết để gọi 'DBCC FREEPROCCACHE'. – TheCodeKing

Các vấn đề liên quan