スロットルは基本的にCPU、メモリ、ディスク使用量の制限です。そのため、インデックスへのインパクトは、そのリソースへの影響につながります。だから実際これは他のパフォーマンスチューニングのシナリオと同じです。あなたが打つ限界を見つけ出し、それをいかに少なく使うかを決めます。
SQL Azureは、主にすべてのクールなDMVにアクセスできないため、SQL Serverとは異なります。あなたはまだそれらのすべてではなく、いくつかを取得します。あなたが得る利点の1つは、スロットルエラーが発生している場合、どのリソースを抑制しているのかを教えてください。
状況によっては、次のクエリが役立つ場合があります。私はGlenn Berryからこれらを盗んだが、私の唯一の貢献は彼らがAzureで走っていることを理解していることだ。また、Azure以外のインストールにも注力していますが、SQLパフォーマンスの作業には多くのアドバイスがあります。
--List query plans and stats ordered by last execution time
SELECT TOP(50) q.text, s.last_execution_time, s.execution_count, s.total_worker_time,
s.max_elapsed_time, s.max_worker_time, (s.total_worker_time/s.execution_count) AS AverageExecutionTime,
s.max_physical_reads, s.max_logical_reads,
s.max_logical_writes, s.min_rows, s.max_rows
FROM sys.dm_exec_query_stats as s
cross apply sys.dm_exec_sql_text(plan_handle) AS q
ORDER BY s.last_execution_time DESC
--List query plans and stats ordered by average execution time
SELECT TOP(50) q.text, s.last_execution_time, s.execution_count, s.total_worker_time,
s.max_elapsed_time, s.max_worker_time, (s.total_worker_time/s.execution_count) AS AverageExecutionTime,
s.max_physical_reads, s.max_logical_reads,
s.max_logical_writes, s.min_rows, s.max_rows
FROM sys.dm_exec_query_stats as s
cross apply sys.dm_exec_sql_text(plan_handle) AS q
ORDER BY [AverageExecutionTime] DESC
--Get 50 most I/O intensive queries
SELECT TOP(50) OBJECT_NAME(qt.objectid) AS [SP Name],
qs.total_logical_writes,
qs.total_logical_reads,
(qs.total_logical_reads + qs.total_logical_writes) /qs.execution_count AS [Avg IO],
SUBSTRING(qt.[text],qs.statement_start_offset/2,
(CASE
WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max), qt.[text])) * 2
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) AS [Query Text],
qs.execution_count,
qs.creation_time
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE qt.[dbid] = DB_ID()
ORDER BY [Avg IO] DESC OPTION (RECOMPILE);
--Get executing requests
SELECT session_id, blocking_session_id, wait_type, last_wait_type, wait_time, total_elapsed_time, cpu_time, logical_reads, reads, writes
FROM sys.dm_exec_requests AS r
ORDER BY wait_time DESC
あなたのスロットル壁に関するもう少し情報を提供してもよろしいですか? 1インスタンスあたり120インサート*を言及しました。これは、複数のインスタンスにわたって120インサート/秒を超えることを意味しますか?全体的にどこをトッピングしていますか?また、どのサイズの計算インスタンスを使用していますか? –
また、挿入を処理するスレッドの数はいくつですか?シングルスレッドの場合、インサートのシリアル特性によってインサート速度が制限されることがあります。 –
私たちは負荷のあるシステムをストレステストしました。この構成は除外されません。私は単一のSQL Azureインスタンスの負荷制限を知ろうとしています。フロントエンドの場合、この構成には2つの追加のWebロールがあります。それはすべてSQL Serverのスロットル関連です。ここでは、IMOというWebロールのインスタンスサイズは重要ではありません。最大300件の同時リクエストをテストしました。ここでは、テーブルの絞り込み、インデックス/制約の削除、クラスタリングキーの既定値の設定などの戦略を使用して、SQL Azureインスタンスからどれほどのパフォーマンスを奪い取るかを測定しています。 –