cursor_tuple_fraction

指示将提取游标行数的分数的GUC

cursor_tuple_fraction 是一个用于设置规划器对将检索的游标行数分数的估计值的配置参数

cursor_tuple_fractionPostgreSQL 8.4中添加。

默认值

cursor_tuple_fraction的默认值为:0.1

用法

如果查询正在由游标执行,这意味着可能只会实际检索潜在查询结果的子集,PostgreSQL将尝试优化查询计划。例如,如果作为顺序扫描而不是索引扫描返回整个数据集效率更高,但是对于要检索的数据子集,索引扫描会更快,则它将使用索引扫描。

cursor_tuple_fraction确定预期通过FETCH操作检索查询结果的百分比,如果可用,它将选择更适合于数据子集的计划。

按PostgreSQL版本详细说明

cursor_tuple_fraction (PostgreSQL 18)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 17)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 16)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 15)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 14)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 13)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 12)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 11)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 10)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 9.6)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 9.5)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  
待重启 false

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 9.4)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 9.3)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 9.2)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 9.1)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 9.0)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  

文档: cursor_tuple_fraction

cursor_tuple_fraction (PostgreSQL 8.4)

设置 0.1
单位  
类别 查询调整/其他规划器选项
简短描述 设置规划器对将检索的游标行数分数的估计值。
额外描述  
上下文 用户
变量类型 real
来源 默认值
最小值 0
最大值 1
枚举值  
引导值 0.1
重置值 0.1
源文件  
源代码行号  

文档: cursor_tuple_fraction

更改历史

示例

cursor_tuple_fraction 的使用方法示例 - 首先,设置一个包含 10,000,000 行(已索引)随机数的简单表,并禁用自动真空

cursor_tuple_fraction设置为1(最大值),并将random_page_cost设置为非常高的值,则会选择顺序扫描

postgres=# BEGIN;
BEGIN

postgres=*# SET random_page_cost TO 1000;
SET

postgres=*# SET cursor_tuple_fraction TO 1;
SET

postgres=*# EXPLAIN
  DECLARE cur CURSOR FOR
  SELECT * FROM cursor_test ORDER BY val;
                                 QUERY PLAN                                 
----------------------------------------------------------------------------
 Sort  (cost=40459807.82..40484763.90 rows=9982431 width=8)
   Sort Key: val
   ->  Seq Scan on cursor_test  (cost=0.00..188320.31 rows=9982431 width=8)
(3 rows)

但将其降低到0.1(默认值)会导致索引扫描

postgres=*# SET cursor_tuple_fraction TO 0.1;
SET

postgres=*# EXPLAIN
  DECLARE cur CURSOR FOR
  SELECT * FROM cursor_test ORDER BY val;
                                         QUERY PLAN                                         
--------------------------------------------------------------------------------------------
 Index Only Scan using val_ix on cursor_test  (cost=0.43..54989736.90 rows=9982431 width=8)
(1 row)

可以使用实际需要的时间来演示差异,分别使用cursor_tuple_fraction设置为10.1来提取10行

postgres=# BEGIN ;
BEGIN
Time: 0.261 ms

postgres=*# SET cursor_tuple_fraction TO 1;
SET
Time: 0.305 ms

postgres=*# DECLARE cur CURSOR FOR
  SELECT * FROM cursor_test ORDER BY val;
DECLARE CURSOR
Time: 0.324 ms
postgres=*# FETCH 10 FROM cur; val ------------------------ 4.086947802406371e-08 2.2672169275317344e-07 3.811600721714825e-07 4.729380020940255e-07 5.001395353421145e-07 5.545030219433755e-07 5.911655163171048e-07 6.835541628280595e-07 7.550144764945088e-07 7.852209042980007e-07 (10 rows) Time: 3699.970 ms (00:03.700) postgres=*# SET cursor_tuple_fraction TO 0.1; SET Time: 0.295 ms postgres=*# FETCH 10 FROM cur; val ------------------------ 1.0436382211764794e-06 1.0606182454520052e-06 1.3870003436888823e-06 1.4260912035712892e-06 1.5682459066912458e-06 1.7877217302064707e-06 1.8104408385788417e-06 1.9592999442874515e-06 1.974146760508333e-06 2.328882489743833e-06 (10 rows) Time: 0.311 ms

分类

游标GUC配置项规划器

反馈

提交任何关于"cursor_tuple_fraction" 的评论、建议或更正 在此处