ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Postgresql性能优化 (二)

Postgresql性能优化 (二)

原创 Linux操作系统 作者:charles_zx 时间:2010-12-01 09:51:22 0 删除 编辑
查询类:random_page_cost参数和effective_cache_size参数

  索引可以增加查询效率,而该参数的设置会影响数据库是否积极地使用索引。
  默认的索引是树状结构,根据索引来检索数据的时候,是根据索引的匹配结果再到实际表中的对应位置读取数据。从磁盘的角度来讲,这种读取数据的方式叫做乱序读取(正式叫法不清楚...)。 相反,不利用索引,直接扫描表的方式叫做顺序读取。
  乱序读取当然比顺序读取要慢。而postgresql用random_page_cost参数来设置乱序读取要比顺序读取慢多少(倍)。
  现在我们使用的新服务器的内存比数据库要大3倍,所以理论上所有的数据都能放入内存。这样的话,乱序读取和顺序读取的效率不会差多少。而默认的4倍就不合适了。这次我们把它设置为1,也就是说和顺序读取一样的效率,让数据库积极的使用索引来检索数据。
  另外,effective_cache_size参数是告诉数据库,OS的缓存大小。越大,数据库使用索引的积极性就越高。因为数据很可能在os的缓存里,乱序读取的效率也不差。这个值理论上等于OS可以使用的缓存大小。
 
  验证方法:
 
  一个很简单的方法就是查看是否使用了Bitmap位图扫描规划。
  位图扫描规划是Bitmap Index Scan和Bitmap Heap Scan的组合。先用Bitmap Index Scan通过索引,把匹配结果放到位图表(这个表会使用work_mem设置的大小,超过就要写入到临时文件,影响效率),在通过这个位图表循序读取数据库表(Bitmap Heap Scan),返回最终结果。

  从理论上来说,性能按照 索引扫描 > 位图扫描 > 顺序扫描  的顺序由高到低排列。
 
  如果你的服务器的内存没这么富裕,可以通过pg_statio_user_tables和pg_statio_user_indexes表查看每个表和索引的缓存程度。
  根据表的缓存程度,调节相关的SQL语句查询时的设置值。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/378235/viewspace-680709/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-05-27

  • 博文量
    177
  • 访问量
    140089