SQL Server应用程序性能调优之设计优化
优化你的应用程序设计
如果你为应用程序使用了多层设计,SQL Server只是一个大型应用程序的一部分。多层设计的实现方式对应用程序性能影响之大,或许会远远超乎你的想象,它比SQL Server所带来的影响大的多。
不幸的是,在应用程序性能低下时,人们往往将其原因归咎于SQL Server,而没有反思应用程序的设计,实际上很多情况下设计缺陷才是导致应用程序性能问题的主要原因。下面我提供一些可以帮助你进行应用设计的建议,以防止SQL Server继续独担性能低下的罪名。
在设计多层应用时你首先需要决定的是,选择逻辑和物理设计。在这两种设计中,物理设计中最易发生导致性能问题的错误,原因是在这个设计中要完成理论在真实世界中的实现。和任何其它事情一样,你面临着多种选择,其中很多选择会带来升级或性能问题。
为了确定哪一种选择才是正确的,需要你再次借助于测试手段,在设计阶段就开始早期潜在测试,你可以使用快速原型测试法,来判断哪一种实现可以最好的满足用户的需要。
另外,当你在设计物理实现时,尽量遵循以下建议,来确保应用程序的可升级性和最优化性能:
尽可能将以数据为中心的任务以存储过程的形式在SQL Server上完成。避免在展现层和业务层处理数据。
不要在业务层保存修改状态数据,尽可能的在数据库中实现。
不要创建复杂或难懂的对象分级。复杂类的创建和使用通常会比较耗资源,会降低应用程序的性能和扩展性。原因是当创建和释放这些对象时,内存分配操作的开销通常比较大。在进行应用程序设计时,可以考虑使用微软事务处理服务器(MTS)来充分利用数据库连接池和对象池的优势。MTS可以运行将数据库连接和对象都放到pool中,可以大大提高应用程序的整体性能和可扩展性。
如果你的应用程序针对SQL Server的查询耗时较长,在设计应用程序时可以考虑异步进行查询。这样一个查询不用必须等待前面一条执行完后才能进行。将这个功能加入到你的多层应用软件的一个办法是使用微软消息队列服务器(MSMQ)。
虽然按照以上建议并不能确保你获得一个可升级、快速执行的应用程序,却可以说是一个好的开始。
优化数据库的设计
与应用程序设计类似,数据库设计对SQL Server应用程序的可升级性和性能也非常关键。同样与应用程序设计类似,如果你在开始的时候没有合理的进行数据库设计,当应用程序被投入到生产环境中后,再对其进行修改往往非常困难,且代价较高。在设计SQL Server数据库时,以下几件事情对其升级和性能非常关键,需要牢记。
同样的道理,你需要尽可能早的使用真实数据来测试你的设计。这意味着你需要开发具有示例数据的原型数据库,然后使用预计会在真实应用中发生的行为类型来对该设计进行测试。
一开始就需要你确定的设计原则之一是,数据库将被使用来进行联机事务处理(OLTP),还是在线分析处理(OLAP)。在设计数据库时人们常犯的一个最大错误是,试图设计数据库同时满足OLTP和OLAP需要。如果你希望获得高性能和可扩展性,这两种应用程序类型是互相排斥的。
OLTP数据库通常是高度规格化的,有助于降低必须存储的数据量。存储的数据越少,SQL Server执行的I/O操作就越少,数据库访问就会越快。事务处理也尽可能在短时间内完成,以减少锁定冲突现象。最后一点,为降低大量插入、更新和删除操作的开销,要尽可能少的使用索引。
另一方面,OLAP数据库则是高度反规格化的。另外,它不使用事务处理,因为数据库是只读的记录锁定不是什么问题。当然,为了满足广泛的报表需求,需要大量使用索引。
由此可见,OLTP和OLAP数据库实现的目的完全不同,你不可能设计一个数据库同时满足这两种需求。 #p#page_title#e#
在数据库设计早期阶段发现问题后,修改起来相对比较容易,因此不要等到应用程序开发完成后,再去修改数据库设计,这几乎是不可能的。