说起开发人员,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查询。

  SQL Server讨厌运行ad-hoc查询,因为它每次都要为这些查询编译查询计划。相反,开发人员应该把查询编写成存储过程,这样可以让SQL Server更容易缓存执行计划。存储过程还有助于提供对某些类型安全攻击的有力保护。

  3、在开发环境中设计索引。

  开发环境永远不能反映真实生产环境的情况。虽然SQL Server开发人员在开发过程中建立索引是一种较好的初步设想,但是你应该在进入生产环境以后再次体验它们的效果,重新调整索引以便适应真实环境,并定期重复这一动作以满足生产需求的不断变化。

  4、查询太多数据。

  没有哪种行为能比得上开发人员查询一百万行数据对服务器性能所造成的破坏,而实际上他只需要其中的一行数据。相反,开发人员可以在客户端应用中实现分页,只查询需要显示的数据,只是在用户真的需要那么多数据的时候再去查。

  5、使用sysadmin或者“sa”账号。

  这是让安全管理员讨厌的做法,但是对于开发人员,他们很容易让客户端应用随意访问SQL Server,无需花时间理解安全方面如何考虑。SQL Server提供了许多更好的选择,那些把“sa”账号写进应用程序的SQL Server开发人员应该受到鄙视。

  6、无限制地使用游标。

  有经验的DBA都知道,游标是让人又爱又恨的东西,而且他们知道开发人员对游标经常是青睐有加。对于SQL Server,游标是内存和处理器密集型的,需要在内存中批量吞吐大量数据,然后一次处理一行。开发人员好避免使用,除非真的必要。

  7、不使用视图。

  视图是SQL Server获得性能提升的另一种方式,因为它与存储过程一样,可以缓存执行计划。视图还帮助隐蔽数据结构,避免客户端应用看到真实的后端数据库结构,这样随着时间的推移做结构变化也更容易了,会对客户端造成很少的影响。

  8、过度标准化。

  虽然SQL Server可以支持处理相当大量的表连接操作(我有的客户端应用使用九个或十个表连接的情况很常见),但是超过一定的量是会有问题的。如果经常运行多达20个表的连接,那有点太多了,这可能是数据库设计过度标准化的信号。标准化对于减少冗余有好处,但是也带来了性能压力。非规范化是以更优的性能为理由,消除标准化规则应力的过程。

  出现这些问题,DBA往往没有太多的办法,因为它们通常是内嵌在代码中的,DBA是接触不到的。但是你可以提醒SQL Server开发人员注意,要求他们在未来的开发中对这些问题给以关注。