O. *_*nes 13 performance sql-server database-tuning query-performance
在生产应用程序(C# 与 SQL Server 2014 Standard 对话)中,有一个如下所示的查询。大多数情况下,它以毫秒为单位运行。但偶尔(对于 的某些值@Id
),它会发疯并需要一分钟左右的时间。这比应用超时时间长,因此用户的应用失败。
在“疯了”的情况下,返回的结果集是正确的,因为它在许多但不是所有其他情况下都是空的。
幸运的是,这在生产和开发环境中都是可重现的。
开发人员说从查询中删除“TOP 1”,然后确保应用程序使用结果集的额外行,清除性能问题。
查询规划器在TOP 1
存在时建议没有索引。(在开发中)。
正在更改查询并修复应用程序。推出需要一段时间。
我的问题:是否有任何 DBA 可访问的方法来调整或调整生产 SQL Server 实例以在新查询推出应用程序更改之前解决此问题?
SELECT TOP 1
subscription_id
FROM subscription AS sub
JOIN billing_info AS bi ON bi.billing_info_id = sub.billing_info_id
JOIN person_group AS apg ON apg.person_id = bi.person_id
JOIN pplan ON pplan.plan_id = sub.plan_id
JOIN product ON product.product_id = [plan].product_id
JOIN product_attribute ON product_attribute.product_id = product.product_id
WHERE apg.group_id = @Id
AND apg.start_date < GETDATE()
AND (apg.end_date IS NULL OR apg.end_date > GETDATE())
AND (sub.end_date IS NULL OR sub.end_date > GETDATE())
AND product_attribute.attribute_type = 'special feature'
AND product_attribute.attribute_data = '1'
ORDER BY sub.start_date ASC;
Run Code Online (Sandbox Code Playgroud)
Mar*_*ith 12
如果您无法更改查询,则可以使用计划指南。
测试查询的性能OPTION (QUERYTRACEON 4138)
(需要有sysadmin
权限的人来尝试)。
如果这产生了令人满意的性能,您可以将其与计划指南一起应用。如果它不能产生令人满意的性能,请尝试找到一个可以实现的提示。可能OPTION (HASH JOIN, MERGE JOIN)
是不适当的嵌套循环是问题所在。您可能需要求助于USE PLAN N'...'
提示。
一旦您知道所需的提示,您就可以使用此处的信息应用它们。
归档时间: |
|
查看次数: |
1650 次 |
最近记录: |