2
一定数の行を返した後にクエリが一時停止する
最大41レコード(たとえば)ですばやく(数秒)実行されるビューがありますTOP 41が、44以上のレコードでは数分かかり、TOP 42またはで実行すると中間結果が表示されTOP 43ます。具体的には、数秒で最初の39件のレコードを返し、残りのレコードを返す前に約3分間停止します。このパターンは、TOP 44またはをクエリする場合も同じTOP 100です。 このビューは元々ベースビューから派生したもので、ベースに1つだけフィルターを追加します。以下のコードの最後のフィルターです。子ビューをベースからチェーンする場合でも、ベースからのコードをインラインで子ビューに書き込む場合でも、違いはないようです。ベースビューは、数秒で100レコードを返します。子ビューをベースの50倍ではなく、ベースと同じくらい速く実行できるようにしたいと考えています。誰かがこのような行動を見たことがありますか?原因または解決策について推測はありますか? この動作は、関連するクエリをテストしたところ、過去数時間一貫していますが、速度が低下し始める前に返される行数はわずかに増減しました。これは新しいものではありません。合計実行時間は許容範囲内(<2分)だったので、今それを調べていますが、少なくとも数か月間、関連するログファイルでこの一時停止が見られました。 ブロッキング クエリがブロックされたことはありません。また、データベースに他のアクティビティがない場合でも問題が発生します(sp_WhoIsActiveによって検証済み)。ベースビューにはNOLOCK、価値のあるもの全体が含まれます。 クエリ 以下は、簡略化のためにベースビューがインライン表示された、子ビューの縮小バージョンです。それはまだ約40レコードで実行時のジャンプを示しています。 SELECT TOP 100 PERCENT Map.SalesforceAccountID AS Id, CAST(C.CustomerID AS NVARCHAR(255)) AS Name, CASE WHEN C.StreetAddress = 'Unknown' THEN '' ELSE C.StreetAddress END AS BillingStreet, CASE WHEN C.City = 'Unknown' THEN '' ELSE SUBSTRING(C.City, 1, 40) END AS BillingCity, …