ASP.NET Web アプリ (Microsoft VS 2010 を使用して C# で記述) を持っています。これは SQL Server にインストールされているため、パフォーマンス統計について次のレポートを取得しました。
関連するすべてのソース コードをここに掲載することはできません。投稿するには多すぎます。それで、私はこの問題にどこから取り組めばよいのだろうかと考えていました。
ASP.NET Web アプリ (Microsoft VS 2010 を使用して C# で記述) を持っています。これは SQL Server にインストールされているため、パフォーマンス統計について次のレポートを取得しました。
関連するすべてのソース コードをここに掲載することはできません。投稿するには多すぎます。それで、私はこの問題にどこから取り組めばよいのだろうかと考えていました。
SQL Server プロファイラー. 実行に最も時間がかかっているクエリ (またはストアド プロシージャ) を見つけて、そこから移動できます。
もう 1 つの場所は、アプリケーションから作成されているクエリの種類を確認することです (つまり、LINQ to SQL を使用しているか、パラメーター化されたクエリまたはストアド プロシージャを使用しているか、動的クエリ文字列を作成しているか)。
更新: SQL Server の Express バージョンを使用している場合、SQL Server 2012 Express の SP1 には、Profiler を含む SQL Management Studio Express が付属していることに注意してください。
手っ取り早い方法としてツールがある場合でも、通常は以下のクエリを使用します。これらのツールは、クエリやその他の多くのタスクを分析するのに引き続き役立ちますが、サーバーが過負荷になっている理由を簡単に調べるには非常に役立ちます。
インデックスを作成する列を確認するための便利なクエリ:
SELECT TOP 10
[Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)
, avg_user_impact
, TableName = statement
, [EqualityUsage] = equality_columns
, [InequalityUsage] = inequality_columns
, [Include Cloumns] = included_columns
FROM sys.dm_db_missing_index_groups g
INNER JOIN sys.dm_db_missing_index_group_stats s
ON s.group_handle = g.index_group_handle
INNER JOIN sys.dm_db_missing_index_details d
ON d.index_handle = g.index_handle
ORDER BY [Total Cost] DESC;
高価なクエリを見つけるのに役立つクエリ:
SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC -- logical reads
-- ORDER BY qs.total_logical_writes DESC -- logical writes
-- ORDER BY qs.total_worker_time DESC -- CPU time
で始まる行--
はコメントであるため、上記のクエリの最後の 3 行に注意してください。CPU 時間、論理読み取りまたは論理書き込みで選択できます。
一般的なパフォーマンスについて質問しましたが、スクリーンショットはすべてロックに関連していることに注意してください。それに基づいて、アプリケーションでこれらのロックを作成している場所を見つけようとします。おそらく、ロック/トランザクションの期間を短縮できますか?
参考文献: