剩余谓词是用关系数据服务(RDS)来进行评估的,而且,它在这四类谓词中成本最昂贵。由于相对范围界定谓词和索引参数谓词来说,剩余谓词和数据参数谓词的成本比较高,所以,我们应该尽可能地限制范围界定谓词和索引参数谓词界定的行数。
我们来看一下DB2的组件:索引管理器,数据管理服务和关系数据服务。图1显示DB2的各个组件和处理这四类谓词的位置。
图1 DB2 UDB组件和谓词
其实,DB2组件很多,图1只是一个简化后的示意图。
关系数据服务(RDS)从应用程序那里接收到SQL请求,并返回结果集;除了剩余谓词外,RDS将所有谓词都发送给数据管理服务(DMS);剩余谓词由RDS进行评估。
DMS评估数据参数谓词。如果SELECT列表中存在一些不能由索引搜索进行评估的列,那么,DMS就会直接扫描数据页。
索引管理器从DMS那里接收、评估范围界定谓词和索引参数谓词,然后,将数据页的行标识符(RID)返回给DMS。
了解各种谓词的定义、转换条件及其使用场所,对我们深入剖析应用程序,提高应用程序性能是有所裨益的。
3、指定FOR UPDATE子句
如果想更新提取的数据,我们应该在游标定义的SELECT语句中指定FOR UPDATE子句。这样做的好处在于,数据库管理器在开始的时候就可以选择适当的加锁级别,例如,使用U(更新)锁,而不是S(共享)锁,这样,当处理后续的UPDATE语句时,就可以省去从S锁转换到U锁的开销了。
指定FOR UPDATE子句的另外一个好处是可以减少应用程序的死锁机会。死锁是这样一种情形:一个以上的应用程序等待另外一个应用程序释放对数据的锁定,而那些等待的应用程序正占据着另外应用程序所需要的数据,并且对该数据也进行了锁定。我们假设两个应用程序按下列顺序同时对同一行进行提取、更新操作:
(1)应用程序1提取该行
(2)应用程序2提取该行
(3)应用程序1更新该行
(4)应用程序2更新该行
在第4步,应用程序2将等待应用程序1完成更新操作,还要等应用程序1释放占据锁定,然后才能开始应用程序2的更新操作。可是,当我们声明一个游标时不指定FOR UPDATE子句,应用程序1就会获得并占据一个S(共享)锁定,对该行加锁(第1步),这意味着第二个应用程序用不着等待也可以获得并占据一个S锁(第2步)。然后,第一个应用程序试图获得一个U(更新)锁以处理更新语句,但是它必须等第二个应用程序释放其正占据着的S锁(第3步)。同时,第二个应用程序也试图获得一个U锁,并且由于第一个应用程序占据着S锁而进入等待状态(第4步)。这种情形就是死锁,造成的后果是应用程序1或应用程序2的交易不得不回滚。
分享到:
相关推荐
### DB2数据库SQL语句大全 #### 1. 强制关闭所有应用程序 ```sql db2forceapplicationall ``` 此命令用于强制关闭所有正在运行的应用程序,确保在进行维护操作之前所有的应用程序都已关闭。 #### 2. 在线备份...
在现代数据库管理系统(DBMS)中,SQL语句的性能优化对于提高整体应用程序的响应速度和资源利用率至关重要。IBM DB2 Universal Database (UDB) 作为一款成熟且功能强大的数据库产品,提供了多种工具帮助用户监控和分析...
本文将深入探讨DB2数据库中的SQL注入语句,以及如何通过这些语句来猜解数据库结构和数据。 首先,SQL注入的基础原理是通过在合法的SQL查询语句中嵌入恶意代码,以改变原本的查询逻辑。在给定的示例中,攻击者试图猜...
3. **SQL Monitor监控**:利用DB2的SQL Monitor功能,可以实时监控SQL语句的执行情况,及时发现并解决性能瓶颈。 #### 二、索引策略与优化 索引对于提高SQL查询性能至关重要。合理设计和维护索引可以显著加快查询...
#### 二、SQL语句优化 SQL语句的执行效率直接影响到数据库的整体性能。通过对SQL语句的优化,可以在很大程度上提升数据库的运行速度。 #### 2.1 SQL语句执行计划分析 - **DB2 Explain**:利用DB2 Explain工具分析...
预编译是指对SQL语句进行语法检查和优化的过程,绑定是指将SQL语句与DB2数据库进行绑定的过程,编译是指将预编译后的SQL语句转换为机器代码的过程。 在DB2嵌入式SQL应用程序的开发中,开发人员还需要了解DB2数据库...
1. 版本信息:可以使用以下SQL语句来获取DB2数据库的版本信息: ```sql SELECT versionnumber, version_timestamp FROM sysibm.sysversions; ``` 2. 当前用户:可以使用以下SQL语句来获取当前用户信息: ```sql ...
深刻理解DB2的锁及并发机制、索引原理、数据库参数、优化器原理、SQL语句调优等内部机理才能针对性地快速提出解决问题的方法;快照、db2pd、db2expln及事件监控器等则是必须熟练掌握的工具。《DB2数据库性能调整和...
任何应用程序对数据库的操作最终都会转化为SQL语句。因此,SQL语句的执行效率直接影响到数据库系统的整体性能。据估计,SQL语句可能消耗掉数据库70%至90%的资源。不同的SQL语句写法可能会导致显著的性能差异。由于大...
SQL语句是应用程序与数据库之间交互的主要方式,其性能直接影响到整体应用的响应速度及数据库服务器的负载。根据统计,SQL语句可能消耗掉数据库70%至90%的资源,因此优化SQL不仅能够提升执行效率,还能显著减轻...
结合具体的业务场景,通过监控SQL执行,我们可以制定相应的性能优化策略,如调整数据库参数、优化存储过程、重构SQL语句等,实现DB2性能的持续改进。 总的来说,通过对DB2中的SQL执行进行监控,我们可以全面了解...
在DB2 V9版本中,为了更好地管理和优化数据库性能,特别是针对那些消耗大量CPU资源的SQL语句进行分析和优化是非常重要的。本篇文章将详细介绍如何通过DB2 V9的管理视图来查找消耗CPU资源较多的SQL语句。 #### 目标 ...
本文档《sql性能优化十大要素》详细介绍了在DB2环境下,如何优化SQL语句的性能。文档作者是Sheryl M. Larsen,通过十条具体建议来实现SQL的高效执行,这些要素对于数据库管理员(DBA)、开发人员,以及任何使用关系...
标题与描述均聚焦于SQL Server, Oracle, 和DB2数据库中的SQL语句比较,这是一个对IT专业人士特别是数据库管理员(DBA)、开发人员以及对数据库技术感兴趣的人来说极为实用的主题。以下是对给定文件中提及的关键知识点...
- **执行时间统计**:每个SQL语句执行完毕后,系统会自动记录并显示其执行时间,帮助用户快速了解每条SQL语句的性能表现。 **2. 受影响记录数统计** - 对于更新、插入或删除操作,工具会报告受影响的记录数。 - ...
4. **SQL优化**:DB2的查询优化器在执行SQL语句时会选择最优的执行计划。SQL语句的语法分析、查询重写和计划优化是其中的关键步骤。查询重写可以消除DISTINCT、视图合并、子查询到连接的变换,以及共享聚集操作,以...