如何解决的Sybase表锁(VB6)?
-
22-07-2019 - |
题
我不是一个伟大的VB程序员,但我与维持/增强使用Sybase ASE的作为后端VB6的桌面应用程序的任务。这个程序有大约500个用户。
最近,我附加功能到本申请中,其在数据库中执行附加插入/更新到单个行,关键字字段是交易号和场被索引。该表被更新一次它大约有6000条记录,如交易完成时的记录都被删除。部署后,应用了一天工作的罚款和用户的前一半是报告的性能降低。
最后,我们追踪的性能问题在数据库中的表锁,不得不回滚到以前版本的应用程序。使用的第一天是星期一,通常是供系统使用一个非常沉重的一天,所以我很困惑,为什么这个问题并没有在这一天出现。
在,这是代替代码,有启动的Sybase事务的呼叫。内的BeginTrans和CommitTrans之间的块,存在对更新数据库中的DLL文件的调用。我把我的新代码在DLL中的类模块。
我很困惑,为什么一个单一的插入/更新单行会导致这样的问题,特别是因为系统已经改变之前好工作。是否有可能我在这里已经露出了更大的问题?或者说,我只需要重新考虑我的方法呢?
提前感谢的人谁已经在类似的情况,可以提供建议。
解决方案
原来,罪魁祸首是,的BeginTrans和CommitTrans调用的范围内出现一个消息框。直到他们承认该消息的消息框,用户将保持在数据库上阻止锁。解决的办法是移动消息框上述范围之外。
其他提示
我不能够理解没有SQL代码的全貌,您正在使用。
此外,如果它是一个单一的插入或更新,你为什么用一个交易?难道许多用户将尝试更新同一行?
如果您发布的VB代码和SQL都(与查询计划如果可能的话),这将是有益的。然而,随着信息,我们有;我会跑update statistics table_name
对表,以确保该查询计划是最新的。
如果您确信您的代码必须在一个事务中运行你尝试添加包含您的SQL自己的事务块,而不是使用一个已经存在?