- PR -

SQL Server 2000

1
投票結果総投票数:2
Windows 2 100.00%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
むっちゃん
会議室デビュー日: 2004/06/01
投稿数: 3
投稿日時: 2004-06-01 19:13
初めて投稿します。
よろしくお願いします。
現在、SQL Server 2000 でプロファイラ、及びトレースをとってテーブルに保存させています。

しかし、今の状態ではサーバーを再起動するとトレースが停止してしまい、
再度トレースをとる場合に再設定しなくてはいけませんし、
テーブルに保存する際に必ず上書きされてしまい、
それまでのデータがなくなるので一度データを退避させて起動して、
あとでテーブルに退避分のデータを入れてやらなければいけません。

そこで、とりあえずサーバーを再起動したら自動的にトレースを開始させたいのですが、
そのような機能はないのでしょうか?
ヘルプを見てもわかりませんし、
SQL プロファイラでそのトレースのスクリプトをとってはみたものの
保存先のテーブル名も記述されていませんし、使い方がわからないでいます。

何の情報でもいいのでレスを頂きたいので宜しくお願い致します。
よねだ
常連さん
会議室デビュー日: 2002/10/13
投稿数: 22
投稿日時: 2004-06-01 22:26
 米田です。

>SQL プロファイラでそのトレースのスクリプトをとってはみたものの
>保存先のテーブル名も記述されていませんし、使い方がわからないでいます。

 ダイレクトにテーブルで受けることは出来ません。
生成したトレースの SQL スクリプトは
sp_trace_create の オプション
@tracefile = 'trace_file'
として、ファイルに落とすようになっているはずです。

 一度、サーバーのローカルHDD にファイルとして確保したら、
fn_trace_gettable() 関数によって、読み出すことが出来ます。

Books Online
[Transact-SQL リファレンス]
+ [fn_trace_gettable]
に次のような例が紹介されています。
(追加であれば、INSERT SELECT です)
> SELECT IDENTITY(int, 1, 1) AS RowNumber, * INTO temp_trc
> FROM ::fn_trace_gettable('c:\my_trace.trc', default)


 詳しくは、Books Online で各システムストアドプロシジャーを確認してください。
むっちゃん
会議室デビュー日: 2004/06/01
投稿数: 3
投稿日時: 2004-06-02 09:18
米田さん、早速の返信有難うございます。
いまいちSQLプロファイラとトレースの関係を理解していなくて申し訳ありません。
結局私が行いたいのは主に、
実行速度の遅いクエリを検出し、その原因を診断する事やログを取得したい事です。
しかし、再起動を行うとSQLプロファイラも停止してしまいますよね。
それを解決する為には、再度SQLプロファイラを起動して新規作成する
方法しか無いのでしょうか。
出来れば再起動後に自動で起動させたいのですが。
そのような方法や手順が分かりません。

あと、当たり前の事と思いますが、常にログを取得したい場合はSQLプロファイラを
立ち上げて(タスクバーに表示)おかないとログは取得出来ないですよね。

勉強不足で大変申し訳ございませんが、
ご教授の程、宜しくお願いします。
tahakoda
ベテラン
会議室デビュー日: 2002/08/17
投稿数: 79
投稿日時: 2004-06-02 13:10
>>実行速度の遅いクエリを検出し、その原因を診断する事やログを取得したい事です。
>>しかし、再起動を行うとSQLプロファイラも停止してしまいますよね。
>>それを解決する為には、再度SQLプロファイラを起動して新規作成する
>>方法しか無いのでしょうか。

プロファイラで設定した項目(キャプチャしたいオブジェクトやフィルタ条件)は定義ファイルとしてエクスポートできます。これをインポートすれば毎度新規作成する必要はありません。

>>出来れば再起動後に自動で起動させたいのですが。

これは難しいと思います。あくまでツールを起動し項目定義後、開始ボタンを押下することでのみトレース可能かと思います。

確かSQLServerにログインしてからトレースは開始しますよね。認証なしでトレースを行うのは問題ですしその意味でも認証された1つのDBセッションとしてSQLプロファイラを立ち上げておかなければいけないのは当然かと思います。
よねだ
常連さん
会議室デビュー日: 2002/10/13
投稿数: 22
投稿日時: 2004-06-02 22:06
 米田です。

 GUI部分と、テーブルダイレクトの2点は SQLプロファイラが中心です。

 トレースを確保するという点では、ちょうど一年前に ML で話題にしていました。
http://www.users.gr.jp/ml/archive/viewer.aspx?name=sql&no=8878
件名:[SQL:08878] Re: SQL Server 200 トレース
>・SQLプロファイラの動作実態調査方法
> SQLプロファイラの発行しているSQLを確認するのも、SQLプロファイラで可能。
>通常見えないのは not like でフィルタしているだけ。
> SQLプロファイラの SQL 確認用に、逆に like でフィルタしておきます。
>その後希望の操作を実行すれば、確認可能です。
> 例えば
>declare @P1 int
>set @P1=3
>exec sp_trace_create @P1 output, 0, N'E:\prof3', 5, NULL
>select @P1
> こんな SQL が実行されていました。
>(サーバー側にファイル生成)
 二つ SQLプロファイラを起動して、確認することで修正しやすくなると思います。

 元になった質問
http://www.users.gr.jp/ml/archive/list.aspx?name=sql&no=8788
SQL Server 200 トレース
からの発言を追いかけるといいです。
1

スキルアップ/キャリアアップ(JOB@IT)