首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle对高容量写入和低容量读取的建议

Oracle对高容量写入和低容量读取的建议
EN

Stack Overflow用户
提问于 2008-10-11 17:32:37
回答 5查看 3.2K关注 0票数 2

网上有没有一些关于如何调整oracle来做大量插入和低读操作的通用指南?

下面的所有答案都是非常好的建议。我必须澄清以下几点。我使用的是10g,这是我们使用Oracle的绝对要求。我还对用于调优的oracle实例参数(可能是一些不同的锁定策略)更感兴趣。

EN

回答 5

Stack Overflow用户

发布于 2008-10-11 18:23:07

让我假设您想要做大量的插入操作,所以您只是想忽略所有其他类型的操作,只是为了让这些插入操作完成,而没有问题。

首先,您是否完全排除了其他类型的数据库?像工业数据库这样的系统可以很好地处理大量的插入,通常用于从工厂环境中测量某物的设备接收和存储数据。Oracle是一个关系型数据库,它可能不是适合您需要的软件类型。

话虽如此,让我们假设您可以、将要或应该使用Oracle。你需要做的第一件事是考虑你需要做出这个假设的所有不同类型的数据。如果它们都是关于相同类型的数据,那么您需要一个表,并且它需要是精简的,并且对于插入来说是平均的。

执行此操作的最佳方法是执行以下操作:

  1. 根本不会在这个表上添加任何索引,如果您需要一个主键,这是您希望
  2. 使用的唯一索引。如果您需要对这个表执行读取操作,请考虑使用一个包含您执行读取、查找和聚合操作所针对的索引的影子表。如果不需要进行毫秒级的更新,可以考虑使用来自主表的数据进行定期批处理作业的更新。这会用尽可能少的读锁定扰乱主表
  3. 确保你的服务器有快速的磁盘。事务性写入操作通常会在某些时候涉及磁盘,因此请确保这是一个小瓶颈。
  4. 如果您的应用程序正在从许多传入来源收集数据,请考虑在数据库前面添加一个层,以将并发连接的数量保持在最少,从而将到该表的事务的数量保持在最少。如果您在oracle数据库的同一页上获得大量写锁定,最终您的性能将受到影响。

如果可以拆分数据,请考虑将其拆分,使其存储在不同的物理磁盘上。这样,磁盘I/O问题将不会是跨数据类型的,并且只影响一种类型的数据。

另一方面,您有一个反规范化的表,其中包含许多针对查找和更新之间的平衡进行了优化的索引,并且您需要找到一些中间方法来获得您想要的性能。

票数 2
EN

Stack Overflow用户

发布于 2008-10-11 17:45:18

在数据库设计方面,在要插入的表上放置尽可能少的约束、索引和触发器,因为这些都会减慢插入速度。

索引的缺乏显然会损害您的SELECT性能,但听起来这不是您主要关心的问题。

票数 1
EN

Stack Overflow用户

发布于 2008-10-11 18:06:34

我们谈论的是哪种应用程序?哪个版本的Oracle?

例如,如果您正在设计数据仓库加载流程,您通常会希望对临时表执行直接路径插入,然后构建任何必要的索引,然后执行分区交换以将数据加载到已分区的目标表中。当然,如果您正在执行单行插入,这就不能很好地工作。

根据Oracle版本和应用程序类型,您可能还希望对表启用压缩。从CPU的角度来看,插入通常很便宜,因此可能有足够的CPU可用于压缩,这可以大大减少所需的I/O量,这通常是您的瓶颈。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/194352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档