random_page_cost
random_page_cost
是一个用于设置规划器对非顺序获取磁盘页面的成本估计的配置参数。
random_page_cost
添加于PostgreSQL 7.0。
默认值
random_page_cost
的默认值为:4.0
。
用法
random_page_cost
是一个全局 GUC,对所有数据库有效。但是,可以使用以下方法为单个表空间设置它:
ALTER TABLESPACE ... SET ( random_page_cost = ...)
如果不同的值更适合它们存储的介质。请注意,如果为表空间设置,则无法覆盖random_page_cost
。
按 PostgreSQL 版本分列的详细信息
random_page_cost (PostgreSQL 18)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 17)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 16)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 15)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 14)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 13)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 12)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 11)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 10)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 9.6)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 9.5)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 | |
待重启 | 否 |
文档: random_page_cost
random_page_cost (PostgreSQL 9.4)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 |
文档: random_page_cost
random_page_cost (PostgreSQL 9.3)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 |
文档: random_page_cost
random_page_cost (PostgreSQL 9.2)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 |
文档: random_page_cost
random_page_cost (PostgreSQL 9.1)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 |
文档: random_page_cost
random_page_cost (PostgreSQL 9.0)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 |
文档: random_page_cost
random_page_cost (PostgreSQL 8.4)
设置 | 4 |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
枚举值 | |
启动值 | 4 |
重置值 | 4 |
源文件 | |
源代码行号 |
文档: random_page_cost
random_page_cost (PostgreSQL 8.3)
设置 | |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
文档: random_page_cost
random_page_cost (PostgreSQL 8.2)
设置 | |
单位 | |
类别 | 查询调优 / 规划器成本常量 |
简短描述 | 设置规划器对非顺序获取磁盘页面的成本估计。 |
额外描述 | |
上下文 | 用户 |
变量类型 | 实数 |
来源 | 默认值 |
最小值 | 0 |
最大值 | 1.79769e+308 |
文档: random_page_cost
更改历史记录
- PostgreSQL 7.0
- 添加 (提交 b1577a7c)
示例
给定一个任意大的表,并将random_page_cost
设置为默认值4
,PostgreSQL 会选择索引扫描
postgres=# CREATE TABLE foo (id INT NOT NULL PRIMARY KEY); CREATE TABLE postgres=# INSERT INTO foo values(generate_series(1,10000000)); INSERT 0 10000000 postgres=# SHOW random_page_cost; random_page_cost ------------------ 4 (1 row) postgres=# EXPLAIN SELECT * FROM foo WHERE id BETWEEN 1000000 and 2000000; QUERY PLAN ----------------------------------------------------------------------------------- Index Only Scan using foo_pkey on foo (cost=0.43..32073.10 rows=1035633 width=4) Index Cond: ((id >= 1000000) AND (id <= 2000000)) (2 rows)
但是,如果将random_page_cost
设置为(一个不太可能的高)值,PostgreSQL 将确定顺序扫描将更有效(即使实际上可能并非如此)
postgres=# SET random_page_cost to 4000; SET postgres=# EXPLAIN SELECT * FROM foo WHERE id BETWEEN 1000000 and 2000000; QUERY PLAN -------------------------------------------------------------- Seq Scan on foo (cost=0.00..194248.72 rows=1035633 width=4) Filter: ((id >= 1000000) AND (id <= 2000000)) (2 rows)
参考文献
- PostgreSQL 文档: random_page_cost
有用链接
- 调整 random_page_cost 及索引相关性如何影响查询计划 - 2024 年 5 月 PgAnalyze 博客文章