2011-07-22 18 views
2

質問はベストプラクティスに関するものです。SQLクエリの最適化とデバッグ

信頼できるSQLクエリテストを実行するにはどうすればよいですか?

これは、システムとDBのパフォーマンス、バッファ、キャッシュではなく、DB構造とSQLクエリ自体の最適化に関する質問です。

あなたが参加するなどの多くの複雑なクエリを持っている場合は、1日あなたはそれを最適化する方法を理解する必要があり、実行計画を研究するためにEXPLAINコマンド(mysql::explainpostresql::explain)に来ます。

DB構造をチューニングした後、クエリを実行してパフォーマンスの変化を確認しますが、ここでは最適化/バッファリング/キャッシュの複数レベルのパンを使用しています。これを避ける方法は?私は純粋なクエリ実行の時間とそれが影響を受けていないことを確認する必要があります。

あなたは異なるサーバーに異なる習慣を知っている場合は、明示的に指定してください:mysqlのはPostgreSQL、MSSQLなど

はありがとうございます。

答えて

2

Microsoft SQL Serverの場合、DBCC FREEPROCCACHE(コンパイルされたクエリプランを削除する)とDBCC DROPCLEANBUFFERS(データキャッシュをパージする)を使用して、完全にキャッシュされていない状態から開始することができます。次に、キャッシュされていないパフォーマンスとキャッシュされたパフォーマンスの両方をプロファイルし、どちらの場合でもパフォーマンスを正確に判断できます。

たとえそうであっても、クエリの複雑さやサーバー上で何が起こっているかによって、異なる時間に異なる結果が得られることがあります。さまざまな操作シナリオで複数回パフォーマンスをテストして、クエリの完全なパフォーマンスプロファイルが何であるかを理解することをお勧めします。

これらの一般原則の多くは、他のデータベースプラットフォームにも当てはまります。

1

は、なぜあなたは純粋実行時間が必要なのでしょうか?それは非常に多くの要因に依存し、ライブサーバーではほとんど意味がありません。ライブサーバーからいくつかの統計を収集し、pgfouineツール(それはpostgresql用)を使用してクエリの実行時間を分析し、それに基づいて決定を行うことをお勧めします。正確に何を調整する必要があり、レポート上で変更がどの程度効果的であるかがわかります。

+0

OK、リンクありがとうございます。はい、あなたは正しいですが、最適化するためのクエリが後続の問題に遭遇したことを知っているものです。 mysqlには、良いログアナライザもあります:http://myprofi.sourceforge.net/ – Igor