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