-3

我正在优化我的 Oracle 数据库。我对将并发 10 请求写入表和将并发 10 请求写入 10 表之间的 IO 性能感到困惑

如果我有 10 个类型的数据可以存储在 1 个表中 --> 哪种方式可以在 1 个或 10 个表之间插​​入数据

有人知道吗?

4

1 回答 1

2

性能调优是一个很大的话题,问题不能用这么少的信息来回答。但我会尝试提供一些基本的指示。

如果我猜对了,您主要关心的是在当前单个表中的插入性能。

第一步应该是找出真正限制你表现的因素。让我们考虑一些场景:

  • 磁盘 I/O:磁盘很慢。因此,请获得您可以获得的最快的磁盘。这很可能意味着 SSD。将它们放在针对性能进行了调整的 RAID 中,据我所知,“条带化”是关键词。当然,SSD 会出现故障,因为您的 HD 会出现故障,因此您需要为此做好计划。当 HD 未完全充满时(从未真正检查过),它们的速度也更快。分区表也可能有所帮助(见下文)。但大多数时候我们可以减少 I/O 负载,这比更多更快的硬件更有效......

  • 锁争用(例如主键)。分区表和索引可能是一个解决方案。分区表在逻辑上是一个表(您可以像普通表一样选择并写入它),但在内部,数据会分布在多个表中。分区索引与索引类似。这可能会有所帮助,因为添加新值时唯一键下的索引会被锁定,因此两个会话不能插入相同的值。如果值分布在 n 个索引之间,这可能会减少此类锁的争用。此外,分区可以分布在不同的表空间/磁盘上,因此您对物理内容的等待时间更少。

  • 时间非常限制:如果您对表有限制,他们需要时间来完成他们的工作。如果您进行批量插入,则应考虑延迟约束,它们仅在提交时间而不是每次插入时检查。如果您对您的应用程序很小心,您甚至可以禁用它们并在之后启用它们而无需检查它们。这很快,但当然你必须非常确定约束确实成立。当然,您应该确保您的约束具有执行良好所需的所有索引。

  • 谈论批量插入。如果您正在执行这些操作,您可能需要查看直接加载:http ://docs.oracle.com/cd/A58617_01/server.804/a58227/ch_dlins.htm (我认为这是 Oracle 8 版本,我是确保某处有更新的文档)

把它包起来。如果不知道您的性能问题到底出在哪里,就无法知道如何解决它。所以找出你的问题在哪里,然后再提出一个更精确的问题。

于 2013-06-28T08:13:39.483 回答