1

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

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

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

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

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

提前感谢任何遇到类似情况并可以提供建议的人。

4

3 回答 3

1

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

于 2009-03-19T00:35:04.620 回答
0

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

另外,如果是单次插入或更新,为什么要使用事务?是否有可能许多用户会尝试更新同一行?

于 2009-03-15T21:41:20.453 回答
0

如果您同时发布了 VB 代码和 SQL(如果可能,请提供查询计划),这将很有帮助。但是,根据我们拥有的信息;我会update statistics table_name 针对该表运行以确保查询计划是最新的。

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

于 2009-03-16T09:59:36.340 回答