1

非常に奇妙な問題。この関数を次のように呼び出すと、ランダムにハングアップしてタイムアウトになりました。

DECLARE @persId int 
SET @persId = 336

SELECT  * FROM  [CIDER].[dbo].[SMAN_ACL_getPermissions]   (
  null
  ,@persId
  ,1
  ,null)
GO

しかし、次のように呼び出すと、非常に迅速に戻ります。

SELECT  * FROM  [CIDER].[dbo].[SMAN_ACL_getPermissions]   (
  null
  ,336
  ,1
  ,null)
GO

誰かがこれら2つの私の違いを強調してもらえますか? デバッグが非常に難しくなっています...

4

2 に答える 2

2

変数はnull値である可能性がありますが、静的値は間違いなくそうではありません。これにより、さまざまな実行プランが発生する可能性があります。

于 2012-05-10T15:49:43.283 に答える
1

パラメータ スニッフィングの餌食になる可能性があります。うまく機能していないものの実行計画を見てください。プラン XML では、ParameterList タグに ParameterCompiledValue と ParameterRuntimeValue という 2 つの値が表示されますが、これらは一目瞭然です。2 つのデータ分布が大幅に異なる場合、実行時の値に対して次善の計画が得られる可能性があります。関数内で実行が遅いステートメントに「with (recompile)」を追加してみて、それが役立つかどうかを確認してください。

于 2012-05-10T16:10:19.123 に答える