首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析Sybase表锁(VB6)?

如何解析Sybase表锁(VB6)?
EN

Stack Overflow用户
提问于 2009-03-15 21:25:09
回答 3查看 2.8K关注 0票数 1

我不是一个伟大的VB程序员,但我的任务是维护/增强一个使用Sybase ASE作为后端的VB6桌面应用程序。这个应用程序大约有500个用户。

最近,我向这个应用程序添加了一些功能,它对数据库中的单个行执行额外的插入/更新操作,关键字段是事务编号,该字段是索引字段。被更新的表通常有大约6000条记录,因为当事务完成时,记录会被删除。部署后,该应用程序在用户报告性能缓慢之前工作了一天半。

最终,我们将性能问题追溯到数据库中的表锁,并不得不回滚到应用程序的前一个版本。第一天的使用是在星期一,这通常是系统使用非常繁重的一天,所以我很困惑为什么问题没有在那一天出现。

在已有的代码中,有一个启动Sybase事务的调用。在BeginTrans和CommitTrans之间的块中,有一个对更新数据库的DLL文件的调用。我将新代码放在DLL的一个类模块中。

我搞不懂为什么对单行执行一次插入/更新就会导致这样的问题,特别是在更改之前系统工作正常的情况下。有没有可能我暴露了一个更大的问题?或者我只需要重新考虑我的方法?

感谢任何遇到过类似情况并能提供建议的人。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-19 00:35:05

事实证明,罪魁祸首是出现在BeginTrans和CommitTrans调用范围内的一个消息框。拥有消息框的用户将在数据库上维护一个阻塞锁,直到他们确认该消息为止。解决方案是将消息框移出上述范围。

票数 1
EN

Stack Overflow用户

发布于 2009-03-15 21:41:20

如果没有您正在使用的SQL代码,我就无法理解完整的情况。

另外,如果是单个insert或update,为什么要使用事务?有没有可能会有很多用户尝试更新同一行?

票数 0
EN

Stack Overflow用户

发布于 2009-03-16 09:59:36

如果你同时发布了VB代码和SQL (如果可能的话,还有查询计划),这将是很有帮助的。但是,根据我们已有的信息,我将对表运行update statistics table_name,以确保查询计划是最新的。

如果您确定您的代码必须在事务内运行,您是否尝试过添加包含SQL的自己的事务块,而不是使用已有的事务块?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/648572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档