2

ColdFusion は Microsoft SQL Server から実行計画を取得できるのでしょうか? または推定実行計画でさえ。すべてのコストのクエリが返されると便利です。

4

2 に答える 2

3

@James が投稿したリンクで述べたように、単純な を使用して実行計画に関する情報を取得するために使用できる方法がいくつかありますcfquery。次の点に注意してください。

  • SET SHOWPLANオプションは通常、セッション接続に適用されます。つまり、接続プーリングを使用している場合、現在の要求を超えて存続する可能性があります (これは望ましくありません)。エラーが発生した場合でも、クエリの最後では必ず設定を無効にしてください。

  • 一部SET SHOWPLANのオプションは、複数の結果セットを返します。CFQuery単一の結果セットのみを返します。そのため、返されたすべてのデータを取得できない場合があります。

  • ほとんどのシステム ビューとプロシージャ ( sys.dm_exec_sql_textなど) には、昇格されたアクセス許可が必要です。これらのオブジェクトを使用するには、データソース ユーザーに特別なアクセス権を付与する必要があります。そのため、セキュリティへの影響を念頭に置いてください。

...sys.dm_exec_query_plan を実行するには、ユーザーは sysadmin 固定サーバー ロールのメンバーであるか、サーバーに対する VIEW SERVER STATE 権限を持っている必要があります。


更新: @Travis がコメントで述べたように、SET SHOWPLANオプションは個別に実行する必要があります。ON|OFFそのため、メイン クエリの前後で設定を切り替えるには、個別の cfquery が必要です。これは簡単で汚い例です。トランザクションは、同じ接続が全体で使用されるようにするためのものであることに注意してください。やり過ぎかもしれませんが、何の害もありません。

<cftransaction>
    <cftry>
        <!--- note, SHOWPLAN_ALL does NOT execute the SQL --->
        <cfquery name="toggleStats" datasource="someDSN">
            SET SHOWPLAN_ALL ON
        </cfquery>
        <cfquery name="getQueryStats" datasource="someDSN">
            --- some sql query here 
        </cfquery>
        <cfcatch>
            <!--- rethrow and rollback automatically --->
            <cfrethrow>
        </cfcatch>
        <cffinally>
            <!--- always disable the setting --->
            <cfquery name="toggleStats" datasource="someDSN">
                SET SHOWPLAN_ALL OFF
            </cfquery>
        </cffinally>
    </cftry>
</cftransaction>

<cfif structKeyExists(variables, "getQueryStats")>
    <cfdump var="#getQueryStats#" label="Query Statistics">
</cfif>
于 2012-12-07T18:13:36.873 に答える
2

これはあなたが探しているものをカバーしているようです

クエリ実行プランを取得するにはどうすればよいですか?

あとは包み込むだけ<cfquery>

于 2012-12-07T17:40:47.373 に答える