将大型 DB2 表拆分为多个表以提高性能是否有意义?

Does it make sense to split big DB2 tables into multiple tables to improve the performance?

我们目前有一个 OLTP 应用程序将信息存储在 DB2 数据库中。 有关声明的信息存储在多个 DB2 table 中,其中一些 table 非常庞大(2.6 亿条记录)。

如果我们想提高性能,复制每个用于存储声明信息的 table 是否有意义。因此,我们现在有 2 个 tables DECLARATION_A 和 DECLARATION_B,而不是只有一个 table 声明。这个想法是将与类型 A 的声明相关的信息存储在 DECLARATION_A table 中,将类型 B 的声明存储在 DECLARATION_B table.

  1. 那么这种拆分是否会提高那些写入和读取声明 table 的业务流程的性能?
  2. 或者更具体地说:这种拆分是否也会确保业务流程 A 即 reading/updating/creating 类型 A 的声明的记录 受并发业务的影响较小处理 B,即 reading/updated/creating 类型 B 的声明记录?

一般来说,我不认为拆分 table 会提高你的表现,我会尝试,在较高层次上解释原因。如果您将 table 拆分为 AB,那么您必须将更新路由到其中一个并读取到另一个。即使通过避免并发读取来加速读取(假设您当前使用悲观锁定协议),您也需要定期确保将更新传播到读取 table(例如,B)来自更新 table(例如,A)。前一个操作会产生额外的开销,因此,最终我不希望你的性能有所提高。

此外,DBMS 的设计旨在尽可能避免不同内存页之间的冲突。换句话说,如果您的最新事务正在更新页面 X,那么在释放页面 X 上的锁之前,读取事务将受到影响。根据您的工作负载,页面 X 将是最后一页(在 append-only 工作负载中)或内存中的多个页面(在随机更新模式中)。

总而言之,我认为您需要提供您的数据库正在使用的锁定机制,以及您的应用程序的操作配置文件(即 SELECT/INSERT/DELETE/UPDATEs 的百分比)。

视情况而定。

如果是 OLTP 应用程序,则表示具有 record-level、index-based 访问权限的短事务。使用相同的硬件和两个争夺相同资源的数据库是个好主意吗?

如果它是具有 not-sure-what-we-are-doing 实现的混乱 OLTP-like 系统,重新审视架构和程序并最终通过 purpose/business 应用拆分数据可能会很好。