SQLServer データベース開発に重要なSQLチューニングはSQLキャッチから

 2017.04.13  株式会社システムインテグレータ

アプリケーションなどから実行されるSQLを、キャッチ・トレースできたら素敵ですよね。

もちろん、SI Object Browserでは「SQLキャッチ」機能があるので実現できます。

今回は「SQLキャッチ」機能と、そこからSQLチューニングをする方法をご紹介します。

なお、今回は「SI Object Browser for SQLServer」を使用しています。
もちろん「SI Object Browser for Oracle」でも同様に使えますが、
SQLServerでも便利な使い方ができるというところをお見せします。

それではさっそくお見せ、
したいところですが、実行前にいくつか注意事項があります。

注意事項

【実行ユーザーの権限に注意】
★SQLキャッチの開始/停止を行う場合は、データベースのトレース機能を実行できる権限をユーザーに付与しましょう。

SQLキャッチはデータベースのトレース機能を使用し、以下の命令を実行しています。
そのため、これらを実行できる権限を持つユーザーのみ、SQLキャッチの開始/停止を行うことができます。
(なお、結果の表示にはトレースログの参照のみ行うため、この権限は必要ありません。)

<SI Object Browser for SQLServerの場合>
ALTER TRACE 権限が必要
トレースの作成 : SP_TRACE_CREATE
トレースの定義 : SP_TRACE_SETEVENT
トレースの実行 : SP_TRACE_SETSTATUS

<SI Object Browser for Oracleの場合>
ALTER SYSTEM 権限が必要
全セッションをトレース : ALTER SYSTEM SET SQL_TRACE
セッション別にトレース : SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION

【リモート接続時の注意】

データベース開発に関するお役立ち資料

★サーバー側からトレースログをコピーしてきて結果を表示しましょう。

SQLキャッチは、結果の表示にサーバー側に出力されるトレースログを参照するため、サーバー側で実行することを前提としています。
クライアント側からリモート接続する場合、サーバー側からトレースログをコピーしてくることでも参照できます。
(SQLキャッチの開始/停止は、サーバー側とクライアント側で同様に行えます。)

★SI Object Browser for SQLServerの場合は、トレースログフォルダの指定はサーバー側のフォルダ構成と合わせて指定しましょう。

SI Object Browser for SQLServerの場合は、トレースログフォルダの指定をSQLキャッチ開始時のパラメータとして使用しています。
そのため、指定したトレースログフォルダがサーバー側に無いとエラーになります。
クライアント側からリモート接続する場合、トレースログフォルダの指定はサーバー側のフォルダ構成と合わせて指定することで、SQLキャッチを開始できます。

長々と注意事項をお話してきましたが、ここからSQLキャッチを使っていきましょう。 [RELATED_POSTS]

SQLキャッチを実行する

SQLキャッチ画面からトレースを開始すれば、実行されたSQLを確認することができます。
まずは、メニューの「ツール」→「SQLキャッチ」で画面を表示します。

494-1.png

初回起動時やトレースログフォルダが見つからない場合は、フォルダの指定が促されます。
SQLServerのトレースログフォルダを指定しましょう。
※今回はサーバー側で実行していますが、リモート接続の場合は上記の注意事項を参照。

494-0.png

トレースログフォルダの指定が済んだら、さっそく「開始」しましょう。

494-2.png

今回はSI Object Browser自身からSQL実行をしてみます。

494-3_1.png

さて、SQLキャッチ画面でトレースできているでしょうか。
SQLキャッチ画面で「表示」をクリックしてみます。(トレースを止めたい場合は「停止」)

494-5.png

実行したSQLが表示されました。トレース成功です。
しかしここで終わりではありません。対象の行を右クリックをすると・・・

舞台はSQLチューニングへ

494-5-1.png

ここから「実行計画」の表示、「SQL文をコピー」、「インデックスアドバイザ」の表示ができるんです。
ということはSQLキャッチから続けてSQLチューニングもできるということです。

もし
・開発しているアプリケーションの動作が遅く、実行SQLに問題がありそう・・・
・でも実際に実行されているSQLの詳細は分からない・・・
といったときは、
1.SQLキャッチで実際に実行されているSQLを特定する。
2.SQL実行画面から実行計画を確認して原因を突き止める。
3.インデックスアドバイザで適切なインデックスを確認する。
というアプローチをしてみてはいかがでしょうか。

実行計画やインデックスアドバイザの使い方については、また改めて書いていきたいと思います。

今回の対象ツール(バージョン)

SI Object Browser for SQLServer Ver.3.0.0
SI Object Browser for Oracle Ver13.1.0.0

いまさら聞けない Oracleの基本

RECENT POST「OBをトコトン極める」の最新記事


この記事が気に入ったらいいねしよう!