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

書評:Benjamin Nevarez:クエリの調整と最適化

    先週、BenjaminNevarezによるMicrosoftSQL Server 2014 Query Tuning&Optimization(Kindleでも入手可能)のコピーが届きました。すぐには行けませんでしたが、週末になってようやくおむつ交換と動物園への旅行の合間にクルーズすることができました。

    TL; DR:お金に見合う価値がある

    Benjaminは、クエリ最適化プロセス全体の完全な説明と、すべてを理解するために必要な多くの背景を紹介します。彼は、インデックス、統計、プランのキャッシュ、およびパラメータスニッフィングなどの一般的な問題に対処する方法を扱います。彼は、アドホックワークロードの最適化や強制パラメーター化などの一般的なオプションと、それらがプランのキャッシュと再利用の方法をどのように変更するかについて説明します。また、SQL Serverのクエリへのアプローチをよりよく理解(または強制)するのに役立つ多くの文書化されていない機能とトレースフラグ、およびトレース、拡張イベント、DBCCコマンドを使用してオプティマイザーが行った決定とそれらの影響を確認する方法についても説明します。持っていた。

    また、インメモリOLTP( "Hekaton")、クラスター化列ストアインデックス、増分統計、新しいカーディナリティ推定など、多くの新しいSQLServer2014機能専用のコンテンツの大部分があります。この本が書かれている間、SQL Server 2014のAdventureWorksサンプルデータベースはまだ公開されていませんが、現在利用可能です。

    この本は、次善の計画につながるクエリオプティマイザの制限、およびそれらを回避するためのヒントと計画ガイドの使用方法に関する複雑ですが有益な章で終わります。

    いくつかの制限

    クエリの調整に関する全体的なリファレンスはかなり完全ですが、もっと良かったと思うことがいくつかありました。

    • Benjaminは、トレースイベントと拡張イベントからShowPlan情報を収集することについて話し、パフォーマンスのオーバーヘッドが恐ろしく、十分に文書化されているため、プロファイラーはトレースを実行する方法ではないことを正しく指摘しています。トレースは非推奨であり、プロファイラーは人々が通常デフォルトで使用するものであるため、これは良いことです。 query_post_execution_showplanのオーバーヘッドについてマイナーな警告があります イベントは、もう少し強調することができたと思いますが、これは非常に的を絞ったチューニングとトラブルシューティングにのみ使用する必要があることを思い出させてください。ワークロード内のすべてのクエリに対してこれを収集すると、効果よりも害が大きくなる可能性があります。
    • 彼は、フィルター処理されたインデックスと統計について説明しますが、インデックスがテーブルのサブセットのみを表す場合でも、特別なアルゴリズムは使用されないため、自動更新に関しては問題があるという事実について詳しく説明します。 Microsoftはこれが問題であることを確認しましたが、現時点では修正する予定はありません。詳細については、Connect#509638およびConnect#333532を参照してください。考慮すべき他の多くのフィルタリングされたインデックスの制限については、このブログ投稿も参照してください。
    • 2014年の機能の範囲はかなり包括的でしたが、sys.dm_exec_query_profilesについての言及が見つからなかったことに驚きました。 、クエリの進行状況をリアルタイムで追跡するための新しいDMV –個々のオペレーターに至るまで。ただし、これは非常に幅広いユースケースではないため、すべての人にとって必須の情報ではありません(IMHOは、特に長時間実行されるクエリにのみ本当に役立ちます)。
    • これは完全な選択ですが、技術的なタイトルに共通するものです。インデックスはわずかに不正確です。たとえば、SQL Sentry Plan Explorerへの参照は13ページを指していますが、関連するコンテンツは実際には14ページにあります。インデックスにアップ。 :-)

    私はこれらの苦情自体を考慮しません。すべてについての最後の詳細をすべて含むことができる本はありません。ですから、それらを補遺と考えてください。 :-)

    概要

    これはすぐに私にとって便利なリファレンスになりました。ドッグイアはすでに私のブックマークのいくつかをブログ投稿に置き換えています。ブログ投稿には、あいまいな詳細やトレースフラグが含まれています。多くの場合、ベンジャミンはそれをより詳細に説明したり、より適切なコンテキストでフレーム化したりしています。この本と以下で参照するいくつかのタイトルの間で、T-SQLに精通している人なら誰でも、飛び込む前にオプティマイザーの知識がなくても、かなり早く習得できると思います。

    補足資料

    このタイトルを補足することをお勧めする他の本:

    • GrantFritcheyのSQLServerクエリパフォーマンスチューニング
    • SQLServer2012向けのJasonStrateのエキスパートパフォーマンスインデックス
    • FritcheyのSQLServer実行計画を付与する

    そしてもちろん、チューニングと最適化の理解に役立つブログ投稿やその他の記事が無限に提供されています。私はPaulWhiteの資料に少し偏っています。彼らは、人間が行きたいと思うほどの深さですが、スキミングするだけで大​​量の情報を得ることができます。 GrantとGailShawには、クエリと実行計画に関する貴重なコンテンツもいくつかあります。KimberlyTrippとErin Stellatoは、インデックス関連または統計関連のあらゆるリソースに最適です。

    • ポールホワイト:SQLPerformance.com | sql.kiwi
    • Grant Fritchey(およびリソース)
    • ゲイルショー
    • キンバリートリップ
    • エリンステラート

    いくつかの重複を見つけるかもしれませんが、私は複数のソースからの情報を消費することを大いに信じています。同じ情報を提示している場合もありますが、電球は、ある人がそれを言った方法や彼らが与えた文脈に基づいてクリックします。私はおそらく、素晴らしい資料を持っている他の約50人の人々を逃したでしょう。

    ああ、私たちの無料ツールであるPlan Explorerもこれに役立つと言いましたか?更新されたデモキットでは、さまざまな例を紹介しています。


    1. Openshiftとnet-sshの非互換性? (2.9.3-beta1 vs 2.9.2)

    2. SQL Server(T-SQL)でデータベースメールアカウントを更新する

    3. SQLTとパーティショニング

    4. 非同期スレーブからMySQLGaleraクラスターを回復する方法