The*_*war 11 performance sql-server execution-plan
我是初级 DBA,有 3 年的经验。我们的工作是微调查询或建议开发人员应该重写特定代码或需要索引。
开发团队经常问的一个简单问题是:“昨天运行良好,突然发生了什么变化?” 我们将被要求检查基础设施方面。对任何问题的第一反应似乎总是将最大的责任归咎于基础设施,这始终是首先要验证的事情。
我们应该如何回答开发团队提出的“改变了什么”的问题?大家有遇到过同样的情况吗?如果是这样,请分享您的经验。
Kin*_*hah 10
如何回答 dev 改变了什么问题?
这不仅是 DEV 的一个非常常见的问题,它适用于 IT 和业务中的每个团队。
发生了什么变化?==> 可以用事实和数字来回答。
事实参考例如
如果您有要显示的数据,则可以得出数字。例如 :
(您必须根据您的环境和需求、收集数据的频率/收集的数据以及保留期的长度进行锻炼)或(您可以投资第三方软件,如 sqlsentry 或 idera 的诊断管理器)将为您完成上述工作)。
好吧,您可能会获得不同的计划,因为:
sp_configure更改可以刷新缓存我在这里更详细地介绍了很多这些:
如果这些在不同的环境中运行,那么我有一系列的事情要在这里检查:
此外,重要的是要记住,创建索引或更改查询可能不是查询突然表现更好的直接原因 - 有时只是因为这些更改确实生成了一个新计划和/或使已经存在的计划无效.
像往常一样,Aaron Bertrand和Kin提供了很好的答案。然而,这两个答案都包含一个共同点。如果您分析任何一个答案,您就会发现 XYZ 没有像昨天那样工作的原因不是因为您/他们/人 X 做了什么。事情发生变化的原因是由于 XYZ 的原因,数据库决定以不同的方式做事。
数据库是一个活生生的、会呼吸的实体。数据库将做出决定,并由于假设、统计和其他启发式工具的组合而改变主意。这与大多数应用层编程有很大不同(机器学习是一个明显的例外)。
我将使用一些军事参考,因为我现在想不出更好的东西。一个更一般的比喻将不胜感激(没有双关语意)。
在大多数应用程序中,程序员充当演练指导员。它们会准确地告诉计算机要做什么,以什么顺序,有时还有多长时间。对数据库进行编程更像是充当指挥官。你告诉它你希望它在高层次上做什么,并在需要时提供一些指导。该数据库的任务是根据初级军官和士官等当前情报,找出执行计划的最佳方式。
通过在其他程序员的脑海中明确区分这一点,他们有望开始看到您没有像他们那样对环境拥有独裁权力。您正在引导数据库找到解决方案,但有时数据库会因为好的或坏的原因而偏离轨道。提醒他们,最终数据库为什么偏离轨道并不重要,重要的是我们可以做些什么来恢复它。
*我认识到“为什么”对于未来的预防、学习等非常有价值,但似乎 OP 正面临着那些不想了解或帮助问题的人的阻力。
| 归档时间: |
|
| 查看次数: |
879 次 |
| 最近记录: |