저장 프로시저의 실행 계획을 표시하려면 어떻게 해야 합니까?
쿼리에 대한 예상 실행 계획(Management Studio 9.0)을 문제 없이 볼 수 있지만 저장 프로시저와 관련하여 ALTER 화면에서 코드를 복사하여 쿼리 창에 붙여넣지 않고는 이를 수행하는 쉬운 방법을 찾을 수 없습니다. 그렇지 않으면 ALTER에 대한 계획이 표시되고 절차가 표시되지 않습니다.이 작업을 수행한 후에도 입력 정보가 누락되어 있으므로 이를 신고해야 합니다.
저장 프로시저에서 이 작업을 더 쉽게 수행할 수 있는 방법이 있습니까?
편집: 저는 방금 효과가 있을 수 있는 것을 생각했지만 잘 모르겠습니다.
예상 실행 계획을 실행할 수 있습니까?
exec myStoredProc 234
SET SHOWPLAN_ALL ON
GO
-- FMTONLY will not exec stored proc
SET FMTONLY ON
GO
exec yourproc
GO
SET FMTONLY OFF
GO
SET SHOWPLAN_ALL OFF
GO
저장 프로시저 이름을 선택하고(쿼리 창에 입력하기만 하면 됨) 마우스 오른쪽 버튼을 클릭한 다음 SQL Server 관리 스튜디오의 도구 모음에서 '예상 실행 계획 표시' 버튼을 선택합니다.저장 프로시저 코드를 열 필요가 없습니다.절차 이름만 선택해야 합니다.
호출된 프로시저 내의 저장 프로시저에 대한 계획도 그래픽 형식으로 표시됩니다.
SQL Management Studio 2008에서 저장 프로시저를 실행할 때 메뉴에서 쿼리 -> 실제 실행 계획 포함을 클릭할 수 있습니다. 이는 도구 모음에서도 마찬가지입니다.
의견을 읽은 후 실행하는 것이 문제가 되는 것으로 보이며 이 문제를 해결하기 위해 저장 프로시저 실행을 마지막에 롤백하는 트랜잭션으로 포장할 것을 권장합니다.
사용하다
SET SHOWPLAN_ALL ON
Go
exec myStoredProc 234
GO
SET SHOWPLAN_ALL OFF
GO
http://msdn.microsoft.com/en-us/library/aa259203.aspx 을 참조하십시오. tmp 테이블을 사용하지 않는 한 이것이 작동할 것이라고 생각합니다.
답변이 얼마 전에 제출된 것으로 알고 있지만 아래 쿼리가 유용합니다.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT [ProcedureName] = OBJECT_NAME([ps].[object_id], [ps].[database_id])
,[ProcedureExecutes] = [ps].[execution_count]
,[VersionOfPlan] = [qs].[plan_generation_num]
,[ExecutionsOfCurrentPlan] = [qs].[execution_count]
,[Query Plan XML] = [qp].[query_plan]
FROM [sys].[dm_exec_procedure_stats] AS [ps]
JOIN [sys].[dm_exec_query_stats] AS [qs] ON [ps].[plan_handle] = [qs].[plan_handle]
CROSS APPLY [sys].[dm_exec_query_plan]([qs].[plan_handle]) AS [qp]
WHERE [ps].[database_id] = DB_ID()
AND OBJECT_NAME([ps].[object_id], [ps].[database_id]) = 'TEST'
저장 프로시저의 실제 실행 계획을 얻는 방법은 여러 가지가 있습니다.
SELECT
qp.query_plan,
SQLText.text
FROM sys.dm_exec_cached_plans AS CP
CROSS APPLY sys.dm_exec_sql_text( plan_handle)AS SQLText
CROSS APPLY sys.dm_exec_query_plan( plan_handle)AS QP
WHERE objtype = 'Proc' and cp.cacheobjtype = 'Compiled Plan'
프로덕션 서버의 데이터 통계를 사용하여 운영 서버의 계획을 살펴보면 데이터 세트가 더 작은 개발 상자와는 다른 계획이 표시될 수 있습니다.
쿼리 캐시에 따라 절차가 얼마나 자주 실행되는지와 같은 훨씬 더 많은 데이터가 있습니다.
SELECT
qp.query_plan,
CP.usecounts as [Executed],
DB_name(QP.dbid) as [Database],
OBJECT_NAME(QP.objectid) as [Procedure],
SQLText.text as [TSQL],
so.create_date as [Procedure Created],
so.modify_date as [Procedure Modified]
FROM sys.dm_exec_cached_plans AS CP
CROSS APPLY sys.dm_exec_sql_text( plan_handle)AS SQLText
CROSS APPLY sys.dm_exec_query_plan( plan_handle)AS QP
join sys.objects as so on so.[object_id]=QP.objectid
WHERE objtype = 'Proc' and cp.cacheobjtype = 'Compiled Plan'
XML 쿼리 계획(두 쿼리의 첫 번째 열)에는 실행 계획의 XML이 포함되어 있어 SSMS에서 실행 계획을 클릭하고 실제 계획을 볼 수 있을 뿐만 아니라 인덱스 스캔이나 "신의 금지" 테이블 스캔과 같이 원하지 않는 항목을 검색할 수도 있습니다.
SELECT
qp.query_plan,
CP.usecounts as [Executed],
DB_name(QP.dbid) as [Database],
OBJECT_NAME(QP.objectid) as [Procedure],
SQLText.text as [TSQL],
so.create_date as [Procedure Created],
so.modify_date as [Procedure Modified]
FROM sys.dm_exec_cached_plans AS CP
CROSS APPLY sys.dm_exec_sql_text( plan_handle)AS SQLText
CROSS APPLY sys.dm_exec_query_plan( plan_handle)AS QP
join sys.objects as so on so.[object_id]=QP.objectid
WHERE objtype = 'Proc' and cp.cacheobjtype = 'Compiled Plan'
and cast(qp.query_plan as nvarchar(max)) like '%loop%'
XML을 문자열로 캐스팅한 다음 와일드카드 검색을 수행하는 매우 잘못된 방법을 사용하여 샘플을 추출했지만 XML 쿼리는 대부분 매일 수행하는 작업이 아니며 문자열 와일드카드는 누구나 쉽게 사용할 수 있습니다.
쿼리 메뉴에서 실제 실행 계획 표시를 활성화한 상태에서 관리 스튜디오(또는 쿼리 분석기)에서 저장 프로시저를 실행하면 저장 프로시저를 실행한 후 계획이 표시됩니다.실행할 수 없는 경우 예상 실행 계획을 표시합니다(내 경험으로는 종종 정확도가 떨어집니다).
프로파일러를 사용하여 실행 계획을 볼 수도 있습니다.성능: 계획 통계 프로파일 표시 옵션을 포함하고 열에 이진 데이터를 포함해야 합니다.
그런 다음 쿼리 또는 프로시저를 실행하고 실행 계획을 볼 수 있습니다.
편집
프로파일러를 사용할 수 없고 다른 창을 열고 싶지 않다면 저장된 프로시저의 시작 부분에 주석 블록을 포함하는 것이 좋습니다.예를 들어 다음과 같이 가정합니다.
/*
Description: This procedure does XYZ etc...
DevelopedBy: Josh
Created On: 4/27/09
Execution: exec my_procName N'sampleparam', N'sampleparam'
*/
ALTER PROCEDURE my_procName
@p1 nvarchar(20),
@p2 nvarchar(20)
AS
이렇게 하면 실행 목적만 강조 표시하고 실행 계획 표시를 설정할 수 있습니다.그리고 실행합니다.
여기 스크린샷이 있습니다.어디를 찾아야 할지 찾는데 시간이 좀 걸렸습니다.
언급URL : https://stackoverflow.com/questions/794411/how-can-i-display-the-execution-plan-for-a-stored-procedure
'programing' 카테고리의 다른 글
인덱스를 모르는 상태에서 시리즈의 첫 번째 요소 가져오기 (0) | 2023.08.11 |
---|---|
마진 붕괴를 비활성화하는 방법은 무엇입니까? (0) | 2023.08.11 |
파이썬에서 CSV 데이터의 한 줄을 읽는 방법은 무엇입니까? (0) | 2023.08.11 |
PowerShell에서 기본적으로 파일에 바이트 쓰기 (0) | 2023.08.11 |
종료된 도커 컨테이너를 계속하는 방법 (0) | 2023.08.11 |