sproc でクエリを複製する以外に、sproc パラメータに基づいてヒントを指定する方法はありますか? たとえば、パラメータが 0 に設定されている場合はヒント@waitForLock
を使用したい場合、そうでない場合は他のトランザクションが完了するまで待機/ブロックします。READPAST
1 に答える
1
一般的に私はOPTION RECOMPILE
提案が好きですが、統計やパラメータが変更されていなくても、毎回再コンパイルされることを意味します. これは通常、パラメーターのスニッフィングを阻止するためのものであり、ロックの取得を回避したい場合や回避したくない場合には役立ちません。
1 つのアイデアは、動的 SQL を使用することです (「アドホック ワークロードの最適化」設定と、いずれかのパラメーターで実行する頻度によっては、これも有益な場合があります)。
CREATE PROCEDURE dbo.whatever
@waitForLock BIT = 1
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(MAX);
SET @sql = 'SELECT something FROM dbo.somewhere';
IF @waitForLock = 0
SET @sql = @sql + ' WITH (READPAST)';
SET @sql = ' WHERE <some condition> ...';
EXEC sp_executesql @sql;
END
GO
于 2012-06-08T23:01:50.513 に答える