首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动检测“random_page_cost”与“seq_page_cost”

自动检测“random_page_cost”与“seq_page_cost”
EN

Database Administration用户
提问于 2018-04-17 12:25:18
回答 1查看 12.2K关注 0票数 13

我阅读了这篇关于SSD上的PostgreSQL性能的文章:

https://amplitude.engineering/how-a-single-postgresql-config-change-improved-slow-query-performance-by-50x-85593b8991b0

这两种配置似乎是重要的random_page_costseq_page_cost

由于这两个参数都需要匹配特定的硬件,所以我想知道是否能够自动检测匹配的值?

更新

我脑子里有以下几个步骤:

  1. 脚本创建了一些虚拟表。
  2. 脚本将数据插入到表中。
  3. 脚本执行一些查询
  4. 脚本显示random_page_cost和seq_page_cost的匹配值
  5. 人工或自动系统接受这些值并更新配置。这一步不是问题的一部分。
EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-04-22 05:26:03

由于这两个参数都需要匹配特定的硬件,所以我想知道是否能够自动检测匹配的值?

当然,自动设置参数是可能的,但没有人提交修补程序来完成。

你需要知道驱动器的顺序读取速度和非顺序读取速度。有很多方法可以得到这一点,但你也可以使用谷歌,因为它可能没有多大关系。例如,google快速搜索三星SSD 840 Pro (256个SSD)的顺序读取和非顺序读取性能,可以从AnandTech显示这一点,

  • 随机读取101.4/mbps
  • 顺序读取510.7/mbps

大约是1:5的比率,所以

代码语言:javascript
复制
SET random_page_cost = 5;
SET seq_page_cost = 1;

警告,random_page_cost考虑缓存,

随机访问机械磁盘存储通常比四倍顺序访问要昂贵得多。但是,使用了较低的默认值(4.0),因为对磁盘的大多数随机访问(如索引读取)都假定在缓存中。默认值可以被认为是建模随机访问比顺序慢40倍,同时期望90%的随机读取被缓存。如果您认为90%的缓存速率是对工作负载的错误假设,则可以增加random_page_cost以更好地反映随机存储读取的真实成本。相应地,如果您的数据可能完全处于缓存中,例如当数据库小于整个服务器内存时,减少random_page_cost可能是适当的。相对于顺序存储(例如固态驱动器),具有较低随机读取成本的存储也可能更好地用于random_page_cost的较低值建模。

我已经证明了我的random_page_cost比顺序慢5倍。random_page_cost已经缓存了多少,这仍然是一个通配符。唉,这些值并没有多大关系,除非索引扫描和顺序扫描如此接近,以至于您可以意外地选择顺序扫描。很少有这样的情况。指数将速度提高数千倍的现象并不少见。

例如,我的cpu_index_tuple_cost0.005。AFAIK,这意味着扫描索引中的1000个条目在规划者的眼里是一样的,就像去堆一次获取一个块一样。

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

https://dba.stackexchange.com/questions/204178

复制
相关文章

相似问题

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