sybase数据库锁如何监控

sybase数据库锁如何监控,第1张

Sybase只能用sp_helpdb或者sp_spaceuesd类似的系统存储过程,考虑了一下,看系统表的参考吧。所以写出如下语句:

    use master

    go

    select b.name,sum(a.size) *2 ,sum(a.unreservedpgs) *2 unreservedpgs from sysusages a,sysdatabases b

    where a.dbid=b.dbid

    group by b.name

    go

测试,ok。

说明:*2表示页的大小是2k,得到的结果也是k,结果集中第一个字段是数据库的名称,第二个是该数据库分配的空间,第三个是该数据库尚未使用的空间。根据实际需要扩展该sql即可,可以得到某个表空间的使用率超过75%之类的告警。

对于死锁的监控,很麻烦,参考sp_sysmon以及sp_who和sp_lock的实现,写了语句如下:

select p.spid,suser_name(p.suid),p.blocked,suser_name(p1.suid),db_name(p.dbid),p.status,p.program_name,getdate(),p.time_blocked

from master..sysprocesses p,master..sysprocesses p1

where p.blocked>0 and p.blocked *=p1.spid

可以根据time_blocked的大小判断是阻塞还是死锁,如果时间很短就结束了,说明是阻塞,如果很长,就应该是死锁了。

此文章主要是对Oracle数据库锁机制的详细研究 首先我们要介绍的是Oracle数据库锁的类型 同时也阐述 在实际应用中我们经常会遇到的与锁相关的异常情况 特别对经常遇到的由于等待锁而使事务被挂起的问题进行了定位及解决 并对死锁这一比较严重的现象 提出了相应的解决方法和具体的分析过程

数据库是一个多用户使用的共享资源 当多个用户并发地存取数据时 在数据库中就会产生多个事务同时存取同一数据的情况 若对并发 *** 作不加控制就可能会读取和存储不正确的数据 破坏数据库的一致性

加锁是实现数据库并发控制的一个非常重要的技术 当事务在对某个数据对象进行 *** 作前 先向系统发出请求 对其加锁 加锁后事务就对该数据对象有了一定的控制 在该事务释放锁之前 其他的事务不能对此数据对象进行更新 *** 作

在数据库中有两种基本的锁类型 排它锁(Exclusive Locks 即X锁)和共享锁(Share Locks 即S锁) 当数据对象被加上排它锁时 其他的事务不能对它读取和修改 加了共享锁的数据对象可以被其他事务读取 但不能修改 数据库利用这两种基本的锁类型来对Oracle数据库的事务进行并发控制

在实际应用中经常会遇到的与锁相关的异常情况 如由于等待锁事务被挂起 死锁等现象 如果不能及时地解决 将严重影响应用的正常执行 而目前对于该类问题的解决缺乏系统化研究和指导 本文在总结实际经验的基础上 提出了相应的解决方法和具体的分析过程

Oracle数据库的锁类型

根据保护的对象不同 Oracle数据库锁可以分为以下几大类 DML锁(data locks 数据锁) 用于保护数据的完整性 DDL锁(dictionary locks 字典锁) 用于保护数据库对象的结构 如表 索引等的结构定义 内部锁和闩(internal locks and latches) 保护数据库的内部结构

DML锁的目的在于保证并 *** 况下的数据完整性 本文主要讨论DML锁 在Oracle数据库中 DML锁主要包括TM锁和TX锁 其中TM锁称为表级锁 TX锁称为事务锁或行级锁

当Oracle执行DML语句时 系统自动在所要 *** 作的表上申请TM类型的锁 当TM锁获得后 系统再自动申请TX类型的锁 并将实际锁定的数据行的锁标志位进行置位 这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志 而只需检查TM锁模式的相容性即可 大大提高了系统的效率

TM锁包括了SS SX S X等多种模式 在Oracle数据库中用 - 来表示 不同的SQL *** 作产生不同类型的TM锁 如表 所示

在数据行上只有X锁(排他锁) 在 Oracle数据库中 当一个事务首次发起一个DML语句时就获得一个TX锁 该锁保持到事务被提交或回滚 当两个或多个会话在表的同一条记录上执行DML语句时 第一个会话在该条记录上加锁 其他的会话处于等待状态 当第一个会话提交后 TX锁被释放 其他会话才可以加锁

当Oracle数据库发生TX锁等待时 如果不及时处理常常会引起Oracle数据库挂起 或导致死锁的发生 产生ORA 的错误 这些现象都会对实际应用产生极大的危害 如长时间未响应 大量事务失败等

TX锁等待的分析

在介绍了有关地Oracle数据库锁的种类后 下面讨论如何有效地监控和解决锁等待现象 及在产生死锁时如何定位死锁的原因

监控锁的相关视图 数据字典是Oracle数据库的重要组成部分 用户可以通过查询数据字典视图来获得数据库的信息 和锁相关的数据字典视图如表 所示

TX锁等待的监控和解决在日常工作中 如果发现在执行某条SQL时数据库长时间没有响应 很可能是产生了TX锁等待的现象 为解决这个问题 首先应该找出持锁的事务 然后再进行相关的处理 如提交事务或强行中断事务

死锁的监控和解决在数据库中 当两个或多个会话请求同一个资源时会产生死锁的现象 死锁的常见类型是行级锁死锁和页级锁死锁 Oracle数据库中一般使用行级锁 下面主要讨论行级锁的死锁现象

当Oracle检测到死锁产生时 中断并回滚死锁相关语句的执行 报ORA 的错误并记录在Oracle数据库的日志文件alertSID log中 同时在user_dump_dest下产生了一个跟踪文件 详细描述死锁的相关信息

在日常工作中 如果发现在日志文件中记录了ora 的错误信息 则表明产生了死锁 这时需要找到对应的跟踪文件 根据跟踪文件的信息定位产生的原因

如果查询结果表明 死锁是由于bitmap索引引起的 将IND_T_PRODUCT_HIS_STATE索引改为normal索引后 即可解决死锁的问题

表 Oracle的TM锁类型

锁模式 锁描述 解释 SQL *** 作

none

NULL 空 Select

SS(Row S) 行级共享锁 其他对象只能查询这些数据行 Select for update Lock for update Lock row share

SX(Row X) 行级排它锁 在提交前不允许做DML *** 作 Insert Update Delete Lock row share

S(Share) 共享锁 Create index Lock share

SSX(S/Row X) 共享行级排它锁 Lock share row exclusive

lishixinzhi/Article/program/Oracle/201311/18509

1、首先点击桌面上的SQL server数据库。

2、然后打开SQL server数据库,输入登录名,密码,点击连接。

3、接着点击左上角新建查询,选择master数据库。

4、先查看数据库被锁的表。

5、接着输入解锁进程,然后执行就可以进行数据库解锁了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6719964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存