我阅读了这篇关于 SSD 上 PostgreSQL 性能的文章:
这两个配置似乎很重要random_page_costvsseq_page_cost
由于两个参数都需要匹配特定的硬件,我想知道是否可以自动检测匹配值?
更新
我脑子里有这些步骤:
Eva*_*oll 11
由于两个参数都需要匹配特定的硬件,我想知道是否可以自动检测匹配值?
自动设置参数当然是可能的,但没有人提交过补丁来做到这一点。
您需要知道驱动器的顺序和非顺序读取速度。有一吨的方式来获得,但你可能只是以及使用谷歌,因为它可能并不重要的是很多。例如,在谷歌快速搜索三星 SSD 840 Pro (256GB)的顺序和非顺序读取性能时,AnandTech 显示了这一点,其中
这大约是 1:5 的比例,所以
SET random_page_cost = 5;
SET seq_page_cost = 1;
Run Code Online (Sandbox Code Playgroud)
警告,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_cost是0.005. AFAIK,这意味着在规划者眼中扫描索引中的 1000 个条目与去一次堆获取一个块是一样的。
| 归档时间: |
|
| 查看次数: |
9188 次 |
| 最近记录: |