codecamp

PostgreSQL 实现

64.4.1. GiST 缓冲构建

64.4.1. GiST 缓冲构建

通过简单地插入所有元组来构建大型 GiST 索引很容易变得很慢,因为如果索引元组分散在索引中并且索引大到不足以放入在缓存中,插入操作需要执行很多随机 I/O。从版本 9.2 开始,PostgreSQL 支持一种更有效率的方法来基于缓冲构建 GiST 索引,这能显著地减少用于非排序数据集所需的随机 I/O 数量。对于排序好的数据集这种收益很小甚至不存在,因为在那时只有少数页面会接收新元组,并且那些页面能放在缓存中(即便整个索引不能放在缓存中)。

但是,缓冲索引构建需要更频繁地调用penalty函数,这会消耗更多额外的 CPU 资源。还有,在缓冲构建中使用的缓冲区需要临时磁盘空间,最多为结果索引的尺寸。缓冲也可能影响结果索引的质量,不管是正向还是负向。这种影响取决于多种因素,如输入数据的分布和操作符类的实现。

默认情况下,当索引尺寸达到effective_cache_size时,一个 GiST 索引构建会切换到缓冲方法。可以通过 CREATE INDEX 命令的buffering参数手工打开或关闭这个特性。默认行为对大部分情况是好的,但是如果输入数据是排序好的,关闭缓冲特性可能会加速构建过程。


PostgreSQL 可扩展性
PostgreSQL 示例
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

PostgreSQL SQL语言

PostgreSQL 服务器管理

PostgreSQL 客户端接口

PostgreSQL 服务器编程

PostgreSQL 参考

PostgreSQL 内部

PostgreSQL 附录

PostgreSQL 参考书目

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }