我们使用Sybase ASE (15.5)服务器作为我们的DB,并且有奇怪的、间歇性的SPID阻塞问题,我正试图在应用层以编程方式检测和缓解这些问题。
Sybase允许您调度所谓的"reorgs“,据我所知,这是周期性的重新索引/表压缩、清理等,基本上是定期的DB维护。
每隔一段时间,我们就会看到所有的行星互相排列,其中:
widgets表上放置一个(阻塞)共享锁;然后widgets表。reorg在widgets上放置独占锁请求,但无法获得锁,因为widgets已经被挂起的SPID/查询锁定和阻塞;然后widgets上的共享锁;这样widgets上的独占锁之前无法启动,但是widgets被挂起的SPID捆绑在阻塞共享锁中。而且因为reorg在widgets上放置了独占锁,所有其他希望在widgets上共享锁的查询都必须等到reorg完成(因为新请求的独占锁超过了新请求的共享锁)。我认为我在这里的理想策略是:
我的问题:
提前感谢!
发布于 2013-09-18 22:47:33
您可以使用以下查询获取数据库中运行的命令:
select cmd from sysprocesses要查找锁定信息,可以加入master..syslocks和your_db..sysobjects,以了解您要访问的对象上存在哪些锁。syslocks.type表示已就位的锁的类型,这些可能的值可以在这里找到:
select object_name(id), db_name(dbid), type from master..syslocks
where dbid = db_id("your_db")http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36274.1550/html/tables/X16427.htm
希望这能帮上忙。
要查找锁是否绑定到reorg,我认为您应该能够将syslocks.spid连接到sysprocesses.spid,其中cmd = "REORG“或类似的内容:
select p.cmd, p.spid, l.type from master..sysprocesses p, master..syslocks l where CMD = "REORG"https://stackoverflow.com/questions/18881086
复制相似问题