锁是数据库为了控制并发数据的完整性而引入的机制,在并发应用中出现锁现象并不可怕,锁现象通常分为死锁和锁等待两种情形。
死锁是因为两个并发的进程或者线程同时各自占有一个资源,又需要占有对方资源,但又都各不相让造成的,这通常是因为程序在并发上考虑不周造成的。
锁等待则是数据库中最普通的情况,一各应用使用数据期间必然要加锁,防止其他进程或应用破坏数据,其他进程或应用在此期间不得不等待前一个应用释放锁。锁等待时间参数是可调的,但要视实际应用情况而定,比如在网络环境中,复杂应用环境,或者对实时性要求不高的环境中,可以将锁等待时间调大一些,有些情况要调小一些。锁等待不同于死锁,死锁属于程序并发不当,需要调整程序并发机制,锁等待则属于性能问题,可能需要调整程序的sql语句。
不管是死锁还是锁等待,数据库都有相应参数可调,也有相应的工具可以捕获和分析,以下是锁处理的通常办法。
(1) 查看和更改与锁相关的主要数据库参数
(2) 查看当前并发应用
(3) 查看和更改快照参数,获取快照
·
(4) 使用事件查看器,查看和更改与锁相关的主要配置参数
利用db2 get db cfg,在参数列表中寻找DLCHKTIME和LOCKTIMEOUT两个参数。
-DLCHKTIME 单位是毫秒,是DB2检查死锁的间隔时间,假设该值为10000ms,则意味着每隔10秒钟检查一下当前数据库中有无死锁存在,如有死锁,会选择回滚其中的某一个事务,让另外一个事务完成交易。
-LOCKTIMEOUT单位是秒,是锁等待最长时间,超过该时间仍未获得锁,则返回错误。设置提示:缺省情况下,LOCKTIMEOUT是-1,意味着锁等待时间无限期,这和实际应用需求一般是不太相符的,需要将其值设为大于0的一个数。
-DLCHKTIME时间通常要设得比LOCKTIMEOUT时间小一些,否则未等发现死锁,就会被以锁等待超时而返回错误更改方法:db2 update db cfg using locktimeout 10
查看当前并发应用,利用db2 list applications 或db2 list applications show detail 或 db2 list applications for database dbname [show detail]。该命令可以查看当前是否有多个应用在连接着数据库,从而排查是否有并发的存在。
查看和更改快照参数,如果在合理设置了DLCHKTIME和LOCKTIMEOUT参数仍然出现锁现象,可以查看快照或者创建事件监控器来分析原因。要采用快照,首先要打开快照开关,利用db2 get monitor switches,输出中将包含以下参数。
查看快照信息,查看数据库管理器级别快照信息:db2 get snapshot for dbm;查看数据库级别快照信息:db2 get snapshot for database on dbname;查看应用级别快照信息:db2 get snapshot for application agentid appl-handler;查看表级别快照信息:db2 get snapshot for tables on dbname;查看锁快照信息:db2 get snapshot for locks on dbname或db2 get snapshot for locks on for application agentid appl-handler;查看动态sql语句快照信息:db2 get snapshot for dynamic sql on dbname
使用事件查看器,可以使用时间查看器收集锁事件,SQL语句事件,从而根据事件分析锁原因。事件类型,使用事件监控器,首先要选定所关注的事件类型,DB2中有很多事件类型,可以用于锁分析的通常会用到以下三种:DEADLOCKS; DEADLOCKS WITH DETAILS;STATEMENTS。步骤:创建事件监控器:create event monitor evmname for eventtype write to file ‘directory’ ;例:create event monitor mymonitor for deadlocks, statements
write to file ‘c:\temp’ ;把事件监控器打开,接上例:set event monitor mymonitor state 1 /*注:1为打开,0为关闭*/事件监控器开始工作,当所有应用断掉连接后,将事件记录下来;查看事件细节:db2evmon –path ‘c:\temp’
分享到:
相关推荐
### DB2锁相关情况介绍 #### 一、DB2锁机制概述 DB2数据库系统提供了丰富的锁机制,用于控制并发事务对数据资源的访问,确保数据的一致性和完整性。锁在多用户环境中至关重要,它能避免多个事务同时修改同一数据...
"db2性能监控工具"是DB2数据库管理员和系统管理员用来优化和维护数据库性能的关键资源。以下是对这些工具及其重要性的详细解释: 1. **监控工具的重要性**: - 性能监控是确保DB2稳定运行的关键,它帮助识别潜在的...
为了更详细地了解锁的情况,可以配置监控开关以开启锁监控功能。步骤如下: 1. **连接到数据库**: ```sql db2 connect to ``` 2. **获取当前监控开关设置**: ```sql db2 get dbm monitor switches ``` 3...
数据库快照是性能监控中的一个重要组成部分,它包含了数据库的实时统计信息和状态信息,如连接信息、锁状态、排序效率、缓冲池命中率等。通过定期收集和分析这些快照,可以及时发现并解决潜在的性能问题。 ### 关键...
本文将详细介绍DB2锁的概述、监控与定位方法、调优技巧、9.7版本的锁机制以及案例分享。 DB2锁概述: DB2数据库使用锁来维护数据一致性,并控制对数据的并发访问。锁机制是事务管理的一部分,与事务、日志和隔离...
### DB2数据库锁升级分析及处理步骤详解 在企业级应用环境中,数据库的高效稳定运行是业务连续性的关键。IBM的DB2作为一款成熟且功能强大的数据库管理系统,其锁升级机制是确保数据完整性和并发控制的重要组成部分...
### 常见DB2锁等待解决流程 #### 背景与意义 在数据库管理领域,特别是针对IBM DB2数据库的应用场景中,锁等待是一个常见的性能瓶颈问题。当两个或多个事务请求对同一资源进行操作时,如果没有妥善处理这些请求间...
《DB2性能调优之SQL执行监控》 在数据库管理领域,DB2作为一款强大的关系型数据库管理系统,其性能调优是一项至关重要的任务。本文将深入探讨如何通过监控SQL执行来提升DB2的性能,帮助数据库管理员更好地理解和...
5. **监控与分析**:定期检查DB2的日志,通过工具如DB2 Deadlock Monitor进行分析,找出引发死锁的模式。 当你遇到死锁时,可以通过以下步骤来解决: 1. **识别死锁**:使用DB2的系统视图如SYSPROC.ADMIN_GET_...
基于Linux平台的DB2数据库监控管理免费工具。以基于WEB的中文图形界面对多个DB2数据库和实例进行管理。管理对象包括DB2数据库的实例、数据库、表空间、缓冲池、应用程序、配置等。管理项目包括数据库事务负载、IO...
为了检测锁等待,脚本中还包含了更新DB2监控配置的命令。这涉及到了一些监控开关的启用,如`DFT_MON_LOCK`和`DFT_MON_STMT`,它们分别用于控制锁和语句的监控。此外,还启用了其他一些监控项,如`lockON`、`sortON`...
5. **性能数据**:共享内存使用百分比、缓冲区命中率、缓冲区繁忙比率、数据字典命中率、内部锁获取率和库高速缓存命中率等是主要的性能指标,通过相应的SQL语句进行监控并设置阈值告警。 接下来,对于Sybase数据库...
### DB2性能优化与监控详解 #### 一、引言 在现代企业的信息化建设中,数据库作为核心的数据存储和管理工具扮演着至关重要的角色。IBM DB2作为一款高性能的企业级数据库管理系统,在诸多领域都有广泛的应用。为了...
### DB2数据库性能监控与调优实践 #### 性能调优概述 DB2数据库作为IBM的一款企业级数据库管理系统,在众多行业中发挥着至关重要的作用。随着业务量的增长和技术的发展,数据库性能逐渐成为影响整个系统效率的关键...
总的来说,本文通过深入探讨一个具体的DB2锁等待问题,展示了如何使用锁等待分析方法和db2trc工具来诊断和解决此类问题。这对于提升DBA在处理复杂并发问题时的能力,以及理解DB2内部机制具有很大的帮助。通过学习和...