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

最近,我附加功能到本申请中,其在数据库中执行附加插入/更新到单个行,关键字字段是交易号和场被索引。该表被更新一次它大约有6000条记录,如交易完成时的记录都被删除。部署后,应用了一天工作的罚款和用户的前一半是报告的性能降低。

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

在,这是代替代码,有启动的Sybase事务的呼叫。内的BeginTrans和CommitTrans之间的块,存在对更新数据库中的DLL文件的调用。我把我的新代码在DLL中的类模块。

我很困惑,为什么一个单一的插入/更新单行会导致这样的问题,特别是因为系统已经改变之前好工作。是否有可能我在这里已经露出了更大的问题?或者说,我只需要重新考虑我的方法呢?

提前感谢的人谁已经在类似的情况,可以提供建议。

有帮助吗?

解决方案

原来,罪魁祸首是,的BeginTrans和CommitTrans调用的范围内出现一个消息框。直到他们承认该消息的消息框,用户将保持在数据库上阻止锁。解决的办法是移动消息框上述范围之外。

其他提示

我不能够理解没有SQL代码的全貌,您正在使用。

此外,如果它是一个单一的插入或更新,你为什么用一个交易?难道许多用户将尝试更新同一行?

如果您发布的VB代码和SQL都(与查询计划如果可能的话),这将是有益的。然而,随着信息,我们有;我会跑update statistics table_name对表,以确保该查询计划是最新的。

如果您确信您的代码必须在一个事务中运行你尝试添加包含您的SQL自己的事务块,而不是使用一个已经存在?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top