sp_prepexec (sp_execute) 및 sp_executeSQL


8

문제의 핵심 : 실제 저장 프로시 저는 임시 테이블 캐싱을 구현하는 유일한 메커니즘이거나 시스템 저장 프로 시저 (예 : sp_executeSQL/) sp_execute를 활용 하는 유일한 메커니즘 입니까?

나는 DBA가 아니므로 작은 단어를 사용하십시오. 우리의 응용 프로그램은 프로파일에서, 내가 통해 모든 SQL 실행을 참조하십시오 이상 준비된 문 보냅니다 sp_prepexec실행 모두를위한 시스템 프로 시저 인 sp_preparesp_execute. 내가하려고하는 것은 임시 테이블 캐싱의 이점이 있는지 알아내는 것입니다.

이 안내서를 object_id ()와 함께 사용하여 동작을 조사했습니다.

https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html

그런 다음이 블로그 게시물의 3 번 포인트는 EXEC가 임시 테이블 캐싱을 사용할 수 없지만 sp_executeSQL이 다음을 수행 할 수 있는지 여부를 생략합니다. http://blogs.msdn.com/b/turgays/archive/2013/09/18/exec-vs- sp-executesql.aspx

클라이언트를 통해 보낸 쿼리에서 간단한 임시 테이블을 만들었습니다.

DECLARE @foo int; -- set by JDBC, unused but required to force a prepared statement

SELECT 1 AS id
    INTO #tmp

SELECT OBJECT_ID('tempdb..#tmp');

프로파일 러에서 다음을 볼 수 있습니다.

declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,N'@P1 int',N'declare @foo INT = @P1 

SELECT 1 as id
    into #tmp

select Object_id(''tempdb..#tmp'');
DROP TABLE #tmp;',1
select @p1

나는 또한 이것으로부터 캐시 히트를 얻는다. 그러나 임시 테이블의 object_id가 나에게 변경되는 것처럼 보입니다.이 임시 테이블이 실제 저장 프로 시저에서 생성되었는지는 알 수 없습니다. 그러나를 통해 동일한 코드를 실행 sp_executeSQL하면 임시 테이블의 object_id가 변경되었음을 알 수 있습니다. 이것은 "실제"사용자 생성 저장 프로시 저만이 임시 테이블 캐싱을 이용한다고 믿게합니다.

답변:


9

실제 저장 프로 시저가 유일한 메커니즘이 구현 된 임시 테이블 캐싱 또는 같은 시스템 저장 프로 시저를 수행 sp_executeSQL/ sp_execute또한 그들을 활용?

CREATE PROCEDURE임시 테이블 캐싱을 활용하려면 실제 저장 프로 시저 ( ) 가 필요합니다 . 여기에는 임시 저장 프로 시저 ( #procname)가 포함 됩니다 .

이 블로그 게시물의 포인트 # 3은 EXEC가 임시 테이블 캐싱을 사용할 수 없지만 sp_executeSQL이 사용할 수 있는지 여부를 생략합니다.

공지 사항 EXECUTE실행하는 데 사용됩니다 sp_executesql.

테스트 : 캐싱이 발생하는지 확인하는 방법에는 여러 가지가 있습니다. 그중 일부는 질문에서 참조 한 원래 기사에 나열되어 있으며 후속 게시물 인 임시 테이블 캐싱 설명에 더 많은 방법이 나와 있습니다 .

SELECT 
    DOMCC.name,
    DOMCC.pages_kb,
    DOMCC.pages_in_use_kb,
    DOMCC.entries_count,
    DOMCC.entries_in_use_count
FROM sys.dm_os_memory_cache_counters AS DOMCC
WHERE DOMCC.[type] = N'CACHESTORE_TEMPTABLES';

저장 프로 시저 입력 TVP도 캐시 되며 SQL Server 2012 부터는와 함께 사용될 때 캐시 될 수도 있습니다 sp_executesql. 자세한 내용은 연결된 CSS 블로그 게시물을 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.