AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 398790
Accepted
Aldarund
Aldarund
Asked: 2012-06-15 07:23:36 +0800 CST2012-06-15 07:23:36 +0800 CST 2012-06-15 07:23:36 +0800 CST

插入时 Oracle 重做日志性能下降

  • 772

我有一个 oracle 11g 数据库。我正在测试插入。数据库运行在noarchive模式。我配置了 3 个重做日志,每个 2gb。

我正在尝试将数据插入测试表。一开始它以 15k ins/秒的速度运行良好。我在 200 次插入后提交。

但是在大约 1.3m 插入记录后,它变得非常慢,大约 1-2k ins/second。正如我此时在资源浏览器中注意到的那样,我们已经填满了所有重做日志,因此从这一点开始的插入工作很慢。

所以我的问题是为什么它在填充重做日志时变得如此缓慢,即使我每提交 200 条记录也是如此。以及如何解决这种情况(除了在插入时完全关闭日志记录)

database oracle oracle-11g
  • 1 1 个回答
  • 2039 Views

1 个回答

  • Voted
  1. Best Answer
    kubanczyk
    2012-10-12T01:34:00+08:002012-10-12T01:34:00+08:00

    重做日志是按顺序写入的。数据文件以随机方式写入。

    每个硬盘驱动器在顺序写入时工作最好,此时它可能达到全带宽(比如 100 MB/s),因为那时它不需要寻道(将其磁头重新定位到另一个磁道并等待磁道旋转到适当的位置)。当需要搜索时,单个 HDD 可能会限制为每秒 200 次搜索。因此,如果您写入 8 kB,然后寻找到另一个地方,您将从同一驱动器获得 1.56 MB/s(这是 200*8)。在这两种情况下,驱动器都会 100% 繁忙,但吞吐量存在明显差异(200 对 1.56)。对于 RAID0,多个驱动器在统计上提供每秒 n*200 次寻道。

    这与 SSD 无关,在那种情况下,搜索几乎是即时的。

    在初始阶段,你的数据文件不会写太多,因为所有的插入都进入了数据库缓存。重做日志总是立即写入,没有(太多)缓冲,它很快,它是顺序的。redo log没有错。一段时间后,您只是用完了可用缓存,数据库编写器尝试通过写入数据文件来释放一些缓存。如果您只插入一个表空间中的一个表,则数据文件可能会按顺序或半顺序写入。

    那么为什么要随机操作呢?好吧,您可能在数据库中有一些额外的东西,例如:索引、分区、审计、其他表等。所有这些都有助于随机化。

    将每个顺序操作分开发生在一组不同的物理硬盘驱动器上,并将所有随机操作放在另一组物理驱动器上将是有益的。否则顺序性能将受到严重影响。在您的情况下,在性能方面,将重做文件与数据文件放在同一物理硬盘驱动器上是不好的。

    有关更多信息,最好检查自动工作负载存储库 (AWR) 快照(这些是简单的文本报告)。

    • 1

相关问题

  • 为海量数据库和许多表优化 PHPMyAdmin 配置

  • 什么是多级数据库?

  • 用于 UNIX 域套接字的 mysqldump

  • 好的数据库初学者书籍?[关闭]

  • 将大型数据集快速批量导入 MySQL

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve