个用户或客户犯了一个错误,允许他们取消查询将消除系统上不必要的处理。一个简单的取消按
钮会为系统的性能创造奇迹。当忽略这个特性时,会导致难于发现和解决的性能问题。O D B C和
D B -库连接两者都提供了A P I用于查询取消。如果你确实允许取消一个查询,就应该保证应用执
行一个提交或回滚操作,以确保数据的完整性,因为取消一个查询不能自动地提交或回滚事务。
另外一种你可以使用的简单技术是,总是实行查询或锁超时。这种方法防止错误编写的
查询永无休止地执行,这在允许特定查询的环境中是一个常见问题。 SQL Server和O D B C提供
函数和语句以控制查询持续时间和锁超时。
另外一个高效应用设计的常用方面是应用生成工具的选择。虽然我们没有全面概括这些
工具的选择,但确实有一个关于它们特性的建议。一些应用生成工具不允许你显式地控制
S Q L语句的生成和发送给SQL Server。透明地生成S Q L 语句的工具听起来非常吸引人,但是它
们的确能够引发性能问题。这样的工具通常不提供查询取消、查询超时或全面事务控制的机
制。你可能经常遇到锁和事务阻塞而引发的问题,这些问题正如我们在其他章节中看到的那
样,对总体系统性能非常关键。
在可能时,尽量不要在应用中使用数据库游标。游标是非常有用的工具,但是比使用常
规的、面向集的 S Q L 语句需要更大的开销。在面向集的 S Q L 语句中,客户应用告诉服务器更
新满足特定标准的记录集。 SQL Server将算出如何作为一个单独的工作单元完成这个更新。
当通过一个游标进行更新时,客户应用要求服务器为每一行维护行锁或版本信息,以备客户
在行被取出后,要求更新这些行。
另外,使用游标意味着服务器正在维护客户状态信息,例如用户在服务器的当前行集。这
种状态信息通常在临时存储区中进行维护。在用户数量较少时,通常这不是一个问题。但是,
随着用户数量增长,维护这种状态信息就变为对宝贵的服务器资源的昂贵开销。一个更好的策
略是让客户应用快速地进入和退出,在调用之间,在服务器上不需要维护任何客户状态信息。
如果你发现必须要使用游标,就应该决定通过使用更为有效的游标类型,例如快速向前
游标,或通过使用一条单独的查询;是否能够将游标查询写得更为高效。我们在本章后面研
究高效游标使用技术。
你应该避免在同一个系统上混杂联机事务处理 ( O LT P ) 和决策支持查询。每种类型的工作
量都有不同的要求和功能,如果它们被安放到一个系统上,可能会引起竞争。我们建议有一
个或更多个系统用于 O LT P工作量,并有使用脱机数据的其他系统用于你的决策支持查询。决
策支持和O LT P系统在第1 2 章和第1 3 章中有详细讨论。
最后,你应该尽量让事务处理周期尽可能地短,以降低阻塞和提高并发性。一个长时间
运行的查询会阻塞其他的查询。一个影响许多行的D E L E T E或U P D AT E操作可能会获得多个锁,
甚至可能升级为表锁,这些锁可能会阻止其他事务的执行。你可以找出优化长时间运行查询
的方法,包括改变索引、将一个大的而且复杂的查询分离为简单的查询、或在脱机时间或在
一台独立的计算机上运行查询等方法。在 S Q L 存储过程中或在准备好的执行语句中执行 S Q L
语句也能够提高应用性能。通常,长时间运行的查询是决策支持查询。记住不要试图将决策
支持和联机事务处理查询混杂到同一个数据库中。
17.1.2 关键路径事务
在分析应用和查询前,你应该努力识别关键路径 (Critical Path)中的事务。关键路径事务
2 1 4 第四部分 优化S Q L语句
评论0
最新资源