我阅读了这篇关于SSD上的PostgreSQL性能的文章:
这两种配置似乎是重要的random_page_cost和seq_page_cost。
由于这两个参数都需要匹配特定的硬件,所以我想知道是否能够自动检测匹配的值?
我脑子里有以下几个步骤:
发布于 2018-04-22 05:26:03
由于这两个参数都需要匹配特定的硬件,所以我想知道是否能够自动检测匹配的值?
当然,自动设置参数是可能的,但没有人提交修补程序来完成。
你需要知道驱动器的顺序读取速度和非顺序读取速度。有很多方法可以得到这一点,但你也可以使用谷歌,因为它可能没有多大关系。例如,google快速搜索三星SSD 840 Pro (256个SSD)的顺序读取和非顺序读取性能,可以从AnandTech显示这一点,
大约是1:5的比率,所以
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_cost是0.005。AFAIK,这意味着扫描索引中的1000个条目在规划者的眼里是一样的,就像去堆一次获取一个块一样。
https://dba.stackexchange.com/questions/204178
复制相似问题