sql >> データベース >  >> Database Tools >> SSMS

Entity Frameworkを使用したSQLクエリの実行速度が遅く、不適切なクエリプランを使用している

    問題は、私のクエリの古いクエリプランまたは正しくないクエリプランでした。

    このクエリの既存のクエリプランを削除する際の問題を解決しました。

    sommarskog.se/query-plan-mysteries.htmlを教えてくれたVladimirBaranovに感謝します。 tschmit007とannemartijnにも感謝します。

    次のクエリを使用して、データベース内のクエリのクエリプランを特定する必要がありました。

    SELECT qs.plan_handle, a.attrlist, est.dbid, text
    FROM   sys.dm_exec_query_stats qs
    CROSS  APPLY sys.dm_exec_sql_text(qs.sql_handle) est
    CROSS  APPLY (SELECT epa.attribute + '=' + convert(nvarchar(127), epa.value) + '   '
              FROM   sys.dm_exec_plan_attributes(qs.plan_handle) epa
              WHERE  epa.is_cache_key = 1
              ORDER  BY epa.attribute
              FOR    XML PATH('')) AS a(attrlist)
     WHERE  est.text LIKE '%standardHourRate%' and est.text like '%q__7%'and est.text like '%Unit Overhead%'
     AND  est.text NOT LIKE '%sys.dm_exec_plan_attributes%'
    

    これは、sommarskogの論文からのクエリのわずかに変更されたバージョンです。クエリを見つけるには、likeステートメントに独自のコードを挿入する必要があることに注意してください。このクエリは、クエリの各クエリプランの属性リストとプランハンドルで応答します。

    どのプランがSSMSからのもので、どのプランがEFからのものかを調べようとしたので、次の構文を使用してすべてを削除しました。

    dbcc freeproccache([your plan handle here])
    

    私のEFクエリ用に作成された新しいプランは完全に機能しました。どうやら、EF計画は、私が最近データベースの統計を更新したことを考慮していませんでした。残念ながら、EFクエリに対してsp_recompileを実行する方法がわかりません。




    1. MSQLSMSで青とピンクで着色された単語の意味

    2. phpMyAdminは本番環境にセキュリティリスクをもたらしますか

    3. SQL Server Management Studio:キーボードショートカットを使用して編集するためのテーブルを開く

    4. 単一のデータベースにのみアクセスするように構成できるphpMyAdminのようなツールはありますか?