10

ライブ環境でタイムアウトを引き起こしているクエリがいくつかあります。(>30 秒)

プロファイラーを実行し、実行中の正確な SQL を取得して Management Studio から実行すると、最初の実行に時間がかかり、その後は実行ごとに数百ミリ秒に低下します。

これは明らかに SQL がデータをキャッシュし、すべてをメモリに取得することです。

SQL をより高速に実行できる最適化を行うことができると確信しています。

私の質問は、これらのクエリを 2 回目に実行したときにデータが既にキャッシュされていて高速である場合、これらのクエリを「修正」するにはどうすればよいですか?

4

6 に答える 6

11

パフォーマンス低下の問題の原因となっているクエリの実行計画を調べることをお勧めします。

実行計画内で、コストが最も高いステップとその理由を特定する必要があります。たとえば、クエリがテーブル スキャンを実行しているか、不適切なインデックスが使用されている可能性があります。

RedGate の Web サイトから入手できる非常に詳細な無料の電子ブックがあり、特に実行計画の内容を理解することに重点を置いています。

https://www.red-gate.com/Dynamic/Downloads/DownloadForm.aspx?download=ebook1

クエリに使用したい特定の実行プランがある場合があります。クエリ ヒントを使用して、SQL Server のクエリに使用する実行プランを強制できます。ただし、これは非常に高度な概念であり、慎重に使用する必要があります。詳細については、次の Microsoft ホワイト ペーパーを参照してください。

http://www.microsoft.com/technet/prodtechnol/sql/2005/frcqupln.mspx

また、現在パフォーマンスの問題が発生していないプラットフォーム上の他のすべてのクエリのパフォーマンスに悪影響を及ぼすため、運用環境でプロシージャ キャッシュをクリアすることもお勧めしません。

たとえば、ストアド プロシージャを実行している場合は、WITH RECOMPILE コマンドを使用して、プロシージャの実行ごとに新しい実行プランが計算されるようにすることができます。

全体的なパフォーマンス チューニング情報については、Brent Ozar のブログに優れたリソースがいくつかあります。

http://www.brentozar.com/sql-server-performance-tuning/

お役に立てれば。乾杯。

于 2009-01-30T13:51:01.200 に答える
9

http://morten.lyhr.dk/2007/10/how-to-clear-sql-server-query-cache.htmlによると、次を実行してキャッシュをクリアできます。

DBCC DROPCLEANBUFFERS   
DBCC FREEPROCCACHE  

編集:私が持っている SQL Server のドキュメントを確認しましたが、これは少なくとも SQL Server 2000 に当てはまります。

于 2009-01-29T12:44:33.130 に答える
5

使用できます

DBCC DROPCLEANBUFFERS   
DBCC FREEPROCCACHE

ただし、これは開発環境でのみ使用し、ライブサーバーにデプロイするためのクエリを調整してください。

于 2009-01-29T12:47:52.793 に答える
3

人々は間違った方向に走っていると思います。私が理解できれば、あなたは常に良いパフォーマンスを望んでいますか?それらは 2 回目 (およびその後の実行) で速く実行されず、最初は遅くなりますか?

上記の DBCC コマンドはキャッシュをクリアするため、パフォーマンスが低下します。

あなたが望むのは、ポンプを準備してデータをキャッシュすることだと思います。これは、クエリを実行してデータをメモリにロードするいくつかの起動手順で行うことができます。

メモリーは有限のリソースであるため、おそらくすべてのデータをメモリーにロードすることはできませんが、バランスを見つけることはできます。ブレントは、ここで何ができるかを学ぶのに役立ついくつかの良い参考文献を上に示しています。

于 2009-01-30T17:36:44.193 に答える
2

クエリの最適化は大きなテーマです。あなたの質問に対する答えは 1 つではありません。何をすべきかについての手がかりはすべて、結果がキャッシュされているかどうかに関係なく同じはずのクエリ プランにあります。

テーブル スキャン、使用されるはずのインデックスが使用されていないなど、よくあることを探します。最終的には、データ モデルを見直して、非正規化戦略を実装する必要があるかもしれません。

于 2009-01-29T12:45:36.933 に答える
0

MSDNから:
DBCCDROPCLEANBUFFERSを使用して、サーバーをシャットダウンおよび再起動せずに、コールドバッファーキャッシュを使用してクエリをテストします。」

于 2009-01-29T12:47:05.043 に答える