sql >> データベース >  >> RDS >> Sqlserver

Spotlight Tuning Pack Basic:最高の無料SQL最適化ツール

    クエリまたはSQLServerデータベースコード(プロシージャとビュー)を作成するときは、実行プランに注意することを常にお勧めします。これにはいくつかの理由があります。まず、オプティマイザーが予期しないプランを選択している可能性があります。たとえば、小さなテーブルと照合する前に、大きなテーブルをインデックススキャンします。第二に、クエリが成長する小さなテーブルを持つ新しいシステムで実行されている場合、このクエリが今後数か月または数年でどのように実行されるかを考慮する必要があります。そして最後に、しかし最も重要なことは、このクエリの速度と使用するリソースの量です。最後のポイントはそれほど重要ではないように思われるかもしれません。3秒未満で十分だと考えているかもしれませんが、1秒未満で実行できれば、それは良いことではないでしょうか。データベースがクラウドでホストされている場合は、リソースを削減することでコストを節約することもできます。

    SQL最適化の多くのケースは、通常、エンドユーザーまたは監視ソフトウェアによって検出された問題に起因します。 「このレポートの生成に30分かかるのはなぜですか?」、「I / O待機の急増の原因は何ですか?」または「これらのジョブの実行に昨年の2倍の時間がかかるのはなぜですか?」

    これらすべてのシナリオで、実行計画と状況を改善するためにSQLを修正するための最良の方法についての知識が必要であり、これには非常に時間がかかり、常に成功するとは限りません。

    例を見てみましょう。つまり、新しいクエリを作成して実行し、考えているのです。これには時間がかかりすぎます。

    730行で17秒、どうすればよいですか?

    まず、実行計画を確認しましょう:

    意味を理解するためにズームインおよびズームアウトする必要がある場合、これは必ずしも簡単ではありません。したがって、最初のアドバイスは、SpotlightTuningPackを使用してこのような優れたプランビューアを入手することです。

    プランビューアは、必要な情報の重要な部分と主な操作がどこにあるかを強調表示し、警告を強調表示します。

    次に例を示します:

    したがって、このコードには問題がありますが、それについて何ができるでしょうか?

    まあ、実際にはかなりたくさん。クエリヒントを使用し、いくつかのインデックスを追加することを検討し(これは、他のクエリやDMLに影響を与える可能性があることを忘れないでください)、結果セットを変更しないが、オプティマイザーに影響を与えて別の計画と小さなトリックを生成するコードを追加します。オプティマイザーが使用している特定のインデックスを考慮してオプティマイザーを停止し、新しいプランを生成する可能性があります。しかし、これはすべて試行錯誤であり、手動で行うには非常に時間がかかります。

    Spotlight ExtensionsアプリケーションをSSMSに追加し、Spotlight Tuning Packにサブスクライブすることで、TuningPackの最適化機能にすべての大変な作業を任せることができます。

    最初のスクリーンショットで、この機能を有効にすると、最適化が可能であることが自動的に検出されることに気付いたかもしれません。

    [分析の表示]をクリックします

    次に、[最適化]ボタンをクリックすると、オプティマイザーエンジンがコードを分析し、同じ結果セットを提供する代替案を提供するSQLの構文を変更する書き換えルールの適用を開始し、それらをテストして、代替の実行があるかどうかを確認します。計画はより速く、その理由。ルールは組み合わせて適用されるため、可能な代替案は100を超える可能性があります。ただし、ツールは、元の代替案よりも高速な代替案のみを表示します。

    このプロセスはバックグラウンドで実行され、手動で実行しようとすると、時間を大幅に節約できます。

    結果が表示されたら、代替案を比較し、コードの違いを確認し、計画を比較し、統計を確認できます。

    そこで、新しいバージョンのクエリを使用してSSMSに戻り、テストしてください。

    成功。

    これが開発環境にある場合は、DBCC DROPCLEANBUFFERSを使用してバッファーキャッシュをフラッシュし、サーバーをシャットダウンして再起動せずにコールドバッファーキャッシュを使用してクエリをテストすることを検討してください。

    また、クエリ構文が違いを生んだ理由の詳細については、クエリにSET STATISTICSIONを追加することを検討してください。

    オリジナル:

    書き直し:

    また、これは、統計比較機能を備えたチューニングパックでも実現できます。

    したがって、変更が成功し、エンドユーザーが満足しているので、次のクエリに進みます。個々のクエリのパフォーマンスを継続的に改善することで、インスタンスのパフォーマンスを改善します。


    1. Oracle 10g PL/SQLの「CONTINUE」キーワード

    2. SQL Server(T-SQL)でJSONキーの名前を変更する方法

    3. MySQLのinformation_schemaデータベースに関する情報

    4. MySQLのWHERE列=での疑問符の重要性は何ですか?