SQL Server 开发人员需要避免的八种习惯
唉,说起开发人员,DBA 一定有一肚子苦水,但你却又离不开他们。在某些
方面上,SQL Server 开发人员和 DBA 们总有着长期的、“光荣的”历史性分歧,
开发人员想为应用程序采取某种方法,而 DBA 们不希望那样做。
应用程序开发人员对 SQL Server 性能的影响是巨大的,可能是积极影响,也
可能负面影响。你可以随便调整索引和存储子系统,但是你作为 DBA 对性能的影
响比起训练有素的开发人员对性能的影响来说是微不足道的,开发人员才知道如
何从 SQL Server 获得最佳性能。但是,并不是所有开发人员都有这种经验和能力。
本文中,笔者总结了 SQL Server 开发人员的八个不好的习惯,这些做法很可能会
对系统本身的性能造成极大影响。
1. 在服务器上运行所有应用。
存储过程可以用像 C#这类.NET framework 语言替代编写,一些开发人员喜
欢把几乎整个应用程序的逻辑都放到 SQL Server 上。不幸的是,这并不是使用
SQL Server 的最佳方式。我们需要考虑一定的平衡,有一些程序是需要放到 SQL
Server 上运行的,而另外一些应用,尤其是那种长期运行的处理,需要在其它地
方运行。
2. 写 ad-hoc 查询
TechTarget 中国《数据库工程师》2013 年 1 月刊
所有内容版权均归 TechTarget 中国所有,未经许可不得转载。
42
SQL Server 讨厌运行 ad-hoc 查询,因为它每次都要为这些查询编译查询计
划。相反,开发人员应该把查询编写成存储过程,这样就可以让 SQL Server 更容
易缓存执行计划。存储过程还有助于提供对某些类型安全攻击的有力保护。
3. 在开发环境中设计索引
开发环境永远不能反映真实生产环境的情况。虽然 SQL Server 开发人员在开
发过程中建立索引是一种较好的初步设想,但是你应该在进入生产环境以后再次
体验它们的效果,重新调整索引以便适应真实环境,并定期重复这一动作以满足
生产需求的不断变化。
4. 查询太多数据
没有哪种行为能比得上开发人员查询一百万行数据对服务器性能所造成的破坏,
而实际上他只需要其中的一行数据。相反,开发人员可以在客户端应用中实现分
页,只查询需要显示的数据,只是在用户真的需要那么多数据的时候再去查。
5. 使用 sysadmin 或者“sa”账号。
这是最让安全管理员讨厌的做法,但是对于开发人员,他们很容易让客户端应
用随意访问 SQL Server,无需花时间理解安全方面如何考虑。SQL Server 提
供了许多更好的选择,那些把“sa”账号写进应用程序的 SQL Server 开发人员
应该受到鄙视。
TechTarget 中国《数据库工程师》2013 年 1 月刊
所有内容版权均归 TechTarget 中国所有,未经许可不得转载。
43
6. 无限制地使用游标
有经验的 DBA 都知道,游标是让人又爱又恨的东西,而且他们知道开发人员
对游标经常是青睐有加。对于 SQL Server,游标是内存和处理器密集型的,需
要在内存中批量吞吐大量数据,然后一次处理一行。开发人员最好避免使用,除
非真的必要。
7. 不使用视图
视图是 SQL Server 获得性能提升的另一种方式,因为它与存储过程一样,
可以缓存执行计划。视图还帮助隐蔽数据结构,避免客户端应用看到真实的后端
数据库结构,这样随着时间的推移做结构变化也就更容易了,会对客户端造成很
少的影响。
8. 过度标准化
虽然 SQL Server 可以支持处理相当大量的表连接操作(我有的客户端应用使
用九个或十个表连接的情况很常见),但是超过一定的量是会有问题的。如果经常
运行多达 20 个表的连接,那就有点太多了,这可能是数据库设计过度标准化的
信号。标准化对于减少冗余有好处,但是也带来了性能压力。非规范化是以更优
的性能为理由,消除标准化规则应力的过程。
出现这些问题,DBA 往往没有太多的办法,因为它们通常是内嵌在代码中的,
TechTarget 中国《数据库工程师》2013 年 1 月刊
所有内容版权均归 TechTarget 中国所有,未经许可不得转载。
44
DBA 是接触不到的。但是你可以提醒 SQL Server 开发人员注意,要求他们在未
来的开发中对这些问题给以关注。
(作者:Don Jones 译者:冯昀辉 来源:TechTarget 中