为什么DBS不能自动调整/调整缓冲区大小?

时间:2010-12-10 02:56:21

标签: database size buffer performance

不确定是否存在DBS以及这是否确实是一个有用的功能,但是: 关于如何通过调整缓冲区大小来加速数据库操作有很多建议。一个例子是将Open Street Map数据(行星文件)导入Postgres实例。为此目的,有一个名为osm2pgsql(http://wiki.openstreetmap.org/wiki/Osm2pgsql)的工具,以及一个建议为此目的调整特定缓冲区参数的指南。 在导入的最后一步,数据库正在创建索引,并且(根据我在阅读文档时的理解)将受益于庞大的maintenance_work_mem,而在正常操作期间,这不会太有用。 相反,这个线程http://www.mail-archive.com/pgsql-general@postgresql.org/msg119245.html表明在最终的索引创建过程中,一个大的maintenance_work_mem不会太有意义。 理想情况下(对于总缓冲存储器的大小有限),DBS应该知道什么缓冲区大小组合最有利可图。 那么,是否有一些很好的理由可以解释为什么没有内置的启发式算法能够根据当前任务自动调整缓冲区大小?

2 个答案:

答案 0 :(得分:0)

我的猜测通过自适应方式获得旋钮非常困难。首先,您将不得不向机器查询许多未知数,例如它有多少RAM可用 - 还有未知的“您希望机器上还能运行什么”。

除此之外,仅通过设置max_mem_usage参数,问题是如何建立一个系统

  • 能够很好地适应大多数典型负载。
  • 对于某些负载,不要有奇怪的病理问题。
  • 是一些可以理解的代码,没有错误。

对于postgresql,答案也可以是

  • 还没有人写它,因为其他东西被认为更重要。
  • 还没有写。

答案 1 :(得分:0)

问题与任何预测软件相同。仅仅因为历史上发生的事情并不意味着它会再次发生。此外,您需要完成一项任务,以便全面分析您应该如何更有效地完成任务。问题是下一个任务不一定像以前完成的任务。因此,如果您的导入例程需要8gb的内存来完成,那么为每个只读用户分配8gb内存是否有意义?反过来也不会很好。

在将此决定留给人类时,数据库将展示对所有情况都不是最佳的性能特征,但作为回报,让我们(人类)单独优化每个案例(如果愿意)。

另一个重要方面是,大多数人/公司在不同但可能更好的水平上重视可靠和稳定的水平。成本高并不像成本变化大。这当然不是一直都是如此,因为整个公司都是基于这样一个事实:偶尔会达到1%。

现代数据库已经在努力使自己适应所呈现的任务,例如越来越软化的查询优化器。至少Oracle可以选择跟踪影响优化器决策的一些措施(单块读取的成本将随当前负载而变化)。