提前:对不起,问题的长度......无法在细节和简洁之间取得适当的平衡。
我们的 Web 应用程序的数据库服务器存在问题,其中应该(并且通常会)在很短的时间内(< 10 毫秒)运行的查询在随机情况下需要 1 到 30 秒的时间来执行 - 没有明显的图案。根据我们的分析器跟踪,其中一些甚至是“无所作为”的查询,例如"exec sp_reset_connection"
(通常在 0ms 内运行;观察到 3~6s 的峰值)"SET NO_BROWSETABLE ON"
,等等。一些示例是:
SELECT * FROM [Localisation].[TimeZoneRule] WHERE [Name] = 'EU'
Run Code Online (Sandbox Code Playgroud)
其中TimeZoneRule
5 列大约有 500,000 行。有一个代理主键和一个索引Name
。通常需要 0.97ms,在 11s 达到峰值。表永远不会写入(在上线之前预先填充)。Profiler 将其记录为占用 0-15 个 CPU、18-25 个读取、0-1 个写入(不知道为什么要写入)。
UPDATE [Core].[User] SET [LastUsed] = GETUTCDATE() WHERE Id = '<uid>'
Run Code Online (Sandbox Code Playgroud)
其中User
大约 10 列(其中之一是 Xml 列)有大约 30,000 行。Id
是集群主键。表定期写入和读取。通常需要10~20ms,在26s达到峰值。Profiler 将其记录为占用 0 个 CPU、15-36 次读取、0-1 次写入。
INSERT INTO [Log].[Session] (ASPSessionId, Start, …
Run Code Online (Sandbox Code Playgroud)