如何管理不断增长且功能更多的巨大交易?

How to manage a huge transaction that keeps growing with more functionality?

我们有一个应用程序,所有交易往返必须在 30 秒内完成。 我遇到的问题是添加了越来越多的功能,很快就会超过 30 秒的阈值。

一个例子:
在处方集中添加产品是一项巨大的交易,只有在以下所有部分成功完成后才会提交:

  1. 产品标识(名称、NDC 等...)1 table
  2. 产品组(免费药物等...)(另一个 table)
  3. 产品标签(另一个table)
  4. 产品临床评论(另一个table)
  5. 产品配置(另一个table)
  6. 产品设置为垃圾箱时可以包含其他产品

还有更多功能,例如

  1. 产品计划参与(340B、买入等...)

等等……

交易也需要时间,因为它必须将具有不同系统生成密钥的完全相同的值传播到每个活动实践。

因此,如果将 Tylenol 添加到具有 key = 1 的处方集并且有 600 个有效实践,事务将插入 601 行,每个行具有完全相同的值但不同的键,这样每个实践都有自己的副本来配置根据他们的喜好。

由于时间和资源不足,无法重新设计。随着越来越多的功能被添加到这个交易中,我想知道是否有一个正确的方法来"divide and conquer"以便交易可以在30秒内完成?

"divide and conquer" 我指的是职能分组。所以在我的场景中,添加产品可以分为第 1 组——最低要点(标识、组、配置),第 2 组——标签和临床评论,第 3 组——项目参与。

然而,"divide and conquer" 将意味着应用程序和用户的多站工作流程。添加 Group1 后的用户将必须执行 Group2 和 Group 3。

目前交易平均需要10秒。当 1 个产品属于多个组时,大约需要 17 秒。

主 table 已经有 7 个索引。添加存储过程有 1800 多行。

有人遇到过这个问题吗?任何意见将不胜感激。

谢谢!

根据所执行工作的详细信息和使用的 SQL 服务器的版本,可能可以通过 parallel insertion and/or parallel query.

获得一些效率

如果您不能重新设计数据库,这些事务已经运行基本上尽可能高效地满足其要求和数据库设计,并且 它们仍然不够快,那么您的选择就很少了:更快的硬件或将事务拆分为多个单独的事务。后者可能是遵守法律条文却违背法律精神,甚至根本不符合法律条文。

除了重新设计数据库和软件之外,您可能无法提高性能,但我没有足够的信息来评估它。