|
.NET Framework では、プログラムを再コンパイルすることなくエンド ユーザーが問題を特定するのに役立つ Trace クラスを提供します。
Pervasive PSQL ADO.NET データ プロバイダーはさらに以下の診断機能を実現します。
トレース機能は、環境変数または PsqlTrace クラスを使って有効にできます。データ プロバイダーは、パブリック メソッドの全呼び出しの入力引数と、そのメソッドの出力および戻り値(ユーザーが呼び出したものすべて)をトレースします。各呼び出しには、メソッドの開始(ENTER)と終了(EXIT)のエントリがあります。
デバッグ中、機密事項のデータがプライベート変数または内部変数として格納され、アクセスが同じアセンブリに制限されたとしても、そのデータを読み取ることができます。セキュリティを維持するために、トレース ログはパスワードを 5 つのアスタリスク(*****)で示します。
環境変数を使用してトレースを有効にするということは、アプリケーションを変更しなくてもよいということです。ただし、環境変数の値を変更したら、その新しい値を有効にするにはアプリケーションの再起動が必要になります。
表 4 では、トレースを有効にしたり制御したりするための環境変数について説明します。
メモ:
ユーザーによっては、トレースを有効にするのに、データ プロバイダーの Trace クラスの静的メソッドを使用する方が便利だと思われるかもしれません。以下の C# コードでは、.NET Trace オブジェクトの静的メソッドを使用して、トレース ファイルの名前を MyTrace.txt とする PsqlTrace クラスを作成します。この値は環境変数で設定した値よりも優先されます。これ以降、データ プロバイダーへの呼び出しはすべて MyTrace.txt へトレースされます。
トレースは次のような形式で出力されます。
<Correlation#> <Timestamp> <CurrentThreadName> <Object Address> <ObjectName.MethodName> ENTER (または EXIT) Argument #1 :<Argument#1 Value> Argument #2 :<Argument#2 Value> ... RETURN:<Method ReturnValue> // EXIT のみ
この場合、
Correlation# は重複のない番号で、これによって、アプリケーション内の同じメソッド呼び出しの ENTER エントリと EXIT エントリを符合させます。
Value は、個々の関数呼び出しに固有のオブジェクトのハッシュ コードです。
デバッグ中、機密事項のデータがプライベート変数または内部変数として格納され、アクセスが同じアセンブリに制限されたとしても、そのデータを読み取ることができます。セキュリティを維持するために、トレース ログはパスワードを 5 つのアスタリスク(*****)で示します。
パフォーマンス モニター(PerfMon)や VS パフォーマンス モニター(VSPerfMon)ユーティリティを使用すると、アプリケーションのパラメーターを記録し、その結果をレポートやグラフにして見ることができます。また、パフォーマンス モニターではアプリケーションの CLR(共通言語ランタイム)例外の回数や頻度を確認することもできます。加えて、使用中の接続数や接続プール数を分析して、ネットワークの負荷を調整することができます。
データ プロバイダーは、このデータ プロバイダーを使用するアプリケーションの調整およびデバッグが行える PerfMon カウンターのセットをインストールします。カウンターは、パフォーマンス モニターの[Pervasive PSQL ADO.NET Data Provider]というカテゴリ名の下に置かれます。
表 5 では、アプリケーションの接続を調整するために使用できる各種 PerfMon カウンターについて説明します。
PerfMon とパフォーマンス カウンターの使用法の詳細については、Microsoft ドキュメント ライブラリを参照してください。
.NET Framework 2.0 以上では実行時の統計をサポートしており、統計情報は接続単位で収集されます。Pervasive PSQL ADO.NET データ プロバイダーは、幅広い種類の実行時の統計情報項目をサポートしています。これらの統計情報項目が提供する情報は、以下に役立ちます。
統計情報項目の計測がパフォーマンスに与える影響はわずかです。最良の結果を得るためには、ネットワーク分析またはアプリケーションのパフォーマンス作用分析時にのみ統計情報の収集を有効にすることを考慮してください。
統計情報収集は、すべての Connection オブジェクトで、それらが使用可能である限り有効にできます。たとえば、アプリケーションで、ビジネス分析の実行に関連する複雑なトランザクションのセットを開始する前に統計情報を有効にし、タスクの完了時に統計情報を無効にするように定義できます。データ プロバイダーがサーバーに対して待機させられた時間および返された行数をタスクの完了直後に取得できますし、後から取得することもできます。アプリケーションはタスクの最後で統計情報を無効にするため、統計情報項目は関心のある期間だけ計測されます。
統計情報項目は、機能上 5 つのカテゴリに分類されます。
Connection オブジェクトを作成すると、StatisticsEnabled プロパティを使用して統計情報の収集を有効にすることができます。データ プロバイダーは、接続が開かれると統計情報項目のカウントを開始し、ResetStatistics が呼び出されるまで継続します。接続を閉じた後 ResetStatistics を呼び出さずに再度開くと、統計情報項目のカウントは接続が閉じられた時点から継続されます。
RetrieveStatistics メソッドを呼び出すと、1 つまたは複数の統計情報項目のカウントを取得します。返される値は、RetrieveStatistics メソッドが呼び出された時点での "適切な時期のスナップショット" となります。
統計情報収集および取得の範囲を定義できます。次の C# コード例では、統計情報項目はタスク A 作業のみを測定し、タスク B 作業の処理後に回収されます。
connection.StatisticsEnabled = true; // タスク A 作業を行います connection.StatisticsEnabled = false; // タスク B 作業を行います IDictionary currentStatistics = connection.RetrieveStatistics();
すべての統計情報項目を表示するには、次の C# コード例のようなコードを使用することができます。
foreach (DictionaryEntry entry in currentStatistics) { Console.WriteLine(entry.Key.ToString() + ":" + entry.Value.ToString()); } Console.WriteLine();
SocketReads および SocketWrites 統計情報項目のみを表示するには、次の C# コード例のようなコードを使用できます。
foreach (DictionaryEntry entry in currentStatistics) { Console.WriteLine("SocketReads = {0}", currentStatistics["SocketReads"]); Console.WriteLine("SocketWrites = {0}", currentStatistics["SocketWrites"]); } Console.WriteLine();
ADO.NET Entity Framework ユーザーへの注記:PsqlConnection の統計情報用のメソッドおよびプロパティは、ADO.NET Entity Framework レイヤーでは利用できません。代わりに、データ プロバイダーは「疑似」ストアド プロシージャを介して同様の機能を公開します。詳細については、ADO.NET Entity Framework でのストアド プロシージャの使用を参照してください。
|