24

MVCMiniProfilerの結果をSQLサーバーデータベースに保存したいと思います。高負荷のmvc4ページのプロファイルを作成して、テストまたは開発システムでは再現できず、運用サーバーで散発的にのみ発生するトリッキーなパフォーマンスの問題を見つけます。

ミニプロファイラーに接続するための最良の方法は何ですか?それを行うための既存の拡張機能はありますか?

4

1 に答える 1

38

結果をSQLAzureに保存するようにMiniProfilerを設定したところですが、これは非常に簡単です。ここで説明するように、 MiniProfiler.MVC3を使用してすべての配線を処理しています。

テーブル作成スクリプトは静的フィールドを使用してアセンブリに埋め込まれているSqlServerStorage.TableCreationScriptため、これを使用できますが、コードを掘り下げてみると、最新の開発ブランチがいくつかのインデックスを追加することでスクリプトをわずかに拡張していることがわかりました。それ以外の点ではテーブル構造は変更されていないため、 nugetで利用可能な最新のパッケージで引き続き機能します。

これを書いている時点では、最新のテーブル作成スクリプトへの直接リンクがあります。

その後、必要なのは、1行のコードでSQLを使用するようにMiniProfilerを設定することだけです。

MiniProfiler.Settings.Storage = new SqlServerStorage("<your connection string>");

SQL Azureを使用していない場合はそれだけですが、Azureで使用しようとしたときに1つの問題が見つかりました。プロファイリングで保存しようとしたときに、次の例外が発生しました(ありがとうELMAH )。

System.Data.SqlClient.SqlException

クラスタ化インデックスのないテーブルは、このバージョンのSQLServerではサポートされていません。クラスタ化されたインデックスを作成して、再試行してください。

MiniProfilersこれを解決するには、テーブルに(未使用の)列を追加する必要がありました。問題のテーブル作成スクリプトの始まりは次のとおりです。

create table MiniProfilers
(
    RowId integer not null identity constraint PK_MiniProfilers primary key clustered, -- Need a clustered primary key for SQL azure
    Id    uniqueidentifier not null,
    Name  nvarchar(200) not null,

また、Guid Id列が主キーではなくなったため、ルックアップが引き続き高速であることを確認するためにインデックスを追加しました。

create unique nonclustered index IX_MiniProfilers_Id on MiniProfilers (Id)

お役に立てば幸いです。


アップデート

SQL Azureをサポートするための変更は、プルリクエストとして提供され、受け入れられました。ありがとうジャロッド

于 2013-02-08T15:20:19.193 に答える