【问题标题】:How to improve single insert performance in oracle如何提高oracle中的单次插入性能
【发布时间】:2019-10-17 05:22:36
【问题描述】:

在我的业务案例中,我需要插入一行并且不能使用批量插入。所以我想知道Oracle的吞吐量是多少。我尝试了这些方法:

有效方式

  • 我使用多线程,每个线程拥有一个连接插入数据
  • 我用ssd存储oracle数据文件

无效的方式

  • 我使用多表将数据存储在一个架构中
  • 我用的是表分区
  • 我使用多模式来存储数据
  • 调高数据文件块大小
  • 在插入 SQL 中使用附加提示

最终最好的TPS是1w/s+

其他:

  • Oracle 11g
  • 单次插入数据大小1k
  • CPU i7,64GB 内存

【问题讨论】:

  • 插入大小为 1k 时,您不需要任何特别的东西,除非您的问题中没有解释特殊情况。我可以肯定地说(1)不要增加块大小,(2)如果您希望查询数据,请不要使用多个模式,(3)如果您认为 Oracle 是瓶颈,请不要线程化您的客户端代码, 和 (4) append 提示不适用于此处。作为经理,我建议:专注于您的应用,而不是单个插入。做一个香草INSERT 并继续前进。如果插入速度稍快但应用程序延迟交付并且INSERT 逻辑一团糟,那么没人会感谢您。
  • 非常感谢您的顾问。但就我而言,我在我的框架中使用 oracle 作为事件存储(与 CQRS 相关)。所以只有插入和选择会发生,我需要尽力提高插入性能。
  • 什么是“单次插入”?使用insert ... values插入1行?

标签: oracle performance oracle11g sql-insert


【解决方案1】:

Oracle 针对从单行插入到数百行的批处理进行了高度优化。您没有提到这一行插入是否存在性能问题,也没有提到插入需要多长时间。对于这样一个简单的操作,您无需担心任何这些细节。如果您有成千上万的基于 Web 的用户每分钟在表中插入一行,那没问题。如果您在适当的时间提交工作,并且没有大量索引,则单行插入的时间不应超过几毫秒。

在 SQL*Plus 中尝试命令

set autotrace on explain statistics
set timing on

并运行您的插入语句。

编辑您的问题以包含解释计划的结果。并确保将结果缩进 4 个空格。

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2018-11-02
    相关资源
    最近更新 更多