ColdFusion は Microsoft SQL Server から実行計画を取得できるのでしょうか? または推定実行計画でさえ。すべてのコストのクエリが返されると便利です。
2 に答える
@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>