5 QUERY TUNING

5.1 Planner Method Configuration.

下列参数控制查询优化器是否使用特定的存取方法。除非对优化器特别了解,一般情况下,使用它们默认值即可。

5.1.1 enable_bitmapscan

布尔型
默认: enable_bitmapscan = on
打开或者关闭规划器对位图扫描规划类型的使用。

5.1.2 enable_hashagg

布尔型
默认: enable_hashagg = on
打开或者关闭查询规划器对散列连接规划类型的使用。

5.1.3 enable_hashjoin

布尔型
默认:
enable_hashjoin = on
打开或者关闭查询规划器对散列连接规划类型的使用。

5.1.4 enable_indexscan

布尔型
默认: enable_indexscan = on
打开或者关闭查询规划器对索引扫描规划类型的使用。

5.1.5 enable_indexonlyscan

布尔型
默认: enable_indexonlyscan = on

5.1.6 enable_material

布尔型
默认: enable_material = on

5.1.7 enable_mergejoin

布尔型
默认: enable_mergejoin = on
打开或者关闭查询规划器对合并连接规划类型的使用。

5.1.8 enable_nestloop

布尔型
默认: enable_nestloop = on
打开或者关闭查询规划器对嵌套循环连接规划类型的使用。

5.1.9 enable_seqscan

布尔型
默认: enable_seqscan = on
打开或者关闭查询规划器对顺序扫描规划类型的使用。

5.1.10 enable_sort

布尔型
默认: enable_sort = on
打开或者关闭查询规划器使用明确的排序步骤。

5.1.11 enable_tidscan

布尔型
默认: enable_tidscan = on
打开或者关闭查询规划器对TID扫描规划类型的使用。

5.2 优化器成本常量 Planner Cost Constants

优化器用一个正的浮点数来表示不同的查询计划的执行成本,每个基本的数据库操作都会被赋给一个确定的成本常量,优化器根据每个基本操作的执行成本来计算每个查询计划的执行成本。不要轻易地改变下面的参数的值,使用默认值即可。

5.2.1 seq_page_cost

浮点数
默认: seq_page_cost = 1.0
设置从数据文件上顺序读取一个数据块的执行成本。

5.2.2 random_page_cost

浮点数
默认: random_page_cost = 4.0
设置从数据文件上随机读取一个数据块的执行成本。
IO很好的机器,不需要考虑离散和顺序扫描的成本差异。

5.2.3 cpu_tuple_cost

浮点数
默认: cpu_tuple_cost = 0.01
设置处理每一个数据行的执行成本。

5.2.4 cpu_index_tuple_cost

浮点数
默认: cpu_index_tuple_cost = 0.005
设置在扫描索引的过程中处理每一个索引项的执行成本。

5.2.5 cpu_operator_cost

浮点数
默认: cpu_operator_cost = 0.0025
设置处理每一个运算符或函数的执行成本。

5.2.6 effective_cache_size

整数
默认: effective_cache_size = 4GB
设置单个查询可以使用的数据缓冲区的大小。
和shared_buffer等内存无关,只是给优化器生成计划使用的一个假设值。
设置稍大,优化器更倾向使用索引扫描而不是顺序扫描,建议设置为可用空闲内存(是指主机物理内存在运行pg时得空闲值)的25%。
扣掉会话连接RSS,shared buffer, autovacuum worker, 剩下的都是OS可用的CACHE。

parallel_tuple_cost = 0.1

parallel_setup_cost = 1000.0

min_parallel_table_scan_size = 8MB

min_parallel_index_scan_size = 512kB

5.3 Genetic Query Optimizer

下列参数控制优化器使用的遗传算法。除非对遗传算法特别了解,一般情况下,使用它们默认值即可。

5.3.1 geqo

布尔型
默认: geqo = on
打开或者关闭遗传优化器。

5.3.2 geqo_threshold

整数型
默认: geqo_threshold = 12
确定使用遗传优化器的查询类型。
如果FROM子句中引用的的表的数目超过geqo_threshold的值,就会使用遗传优化器。对于简单的查询使用穷举优化器。

5.3.3 geqo_effort

整数型
默认: geqo_effort = 5 取值范围:1-10
控制遗传优化器在生成查询计划需要的时间和查询计划的有效性之间做一个折中。
值越大,优化器花在选择查询计划的上的时间越长,同时找到一个最优的查询计划的可能性就越大。
系统通常不直接使用geqo_effort的值,而是使用它的值来计算参数geqo_pool_size和geqo_generations的默认。

5.3.4 geqopoolsize

整数型
默认: geqo_pool_size = 0 典型的取值在10和1000之间
控制遗传优化器的池(pool)大小。
池大小是遗传群体中的个体数目。
如果参数的值是0,系统会自动根据geqo_effort的值和查询中引用的表的个数选择一个默认值。

5.3.5 geqo_generations

整数型
默认: geqo_generations = 0
控制遗传优化器的代(generation)的大小。
代是遗传算法的迭代次数。
1表示典型的取值范围与池的取值范围相同。
如果参数的值是0,系统会自动根据geqo_pool_size的值和选择一个默认值。

5.3.6 geqoselectionbias

浮点数
默认: geqo_selection_bias = 2.0 取值范围:1.5-2.0
控制遗传优化器的代选择偏差(selection bias)的大小

5.3.7 geqo_seed = 0.0

浮点数
默认: geqo_seed = 0.0 取值范围:0.0-1.0

5.4 Other Planner Options

5.4.1 default_statistics_target

整数型
默认: default_statistics_target = 100 取值范围:1-10000
注意:PG10的配置文件没有该参数
设置默认的收集优化器统计数据的目标值。
它的值越大,ANALYZE操作的执行的时间越长,扫描的数据行的个数也就越多,得到的优化器统计数据就越准确。
也可以使用命令ALTER TABLE ... ALTER COLUMN ... SET STATISTICS来为表的每个列设置一个单独的统计数据目标值,这个值的作用与参数default_statistics_target是一样,它只影响相关的列的统计数据收集过程。

5.4.2 constraint_exclusion

字符型
默认: constraint_exclusion = partition 取值范围:on、off、partition
如果该参数的值是on,查询优化器将使用表上的约束条件来优化查询。
如果它的值是off,查询优化器不会使用表上的约束条件来优化查询。

cursor_tuple_fraction = 0.1 # range 0.0-1.0

from_collapse_limit = 8

join_collapse_limit = 8 # 1 disables collapsing of explicit JOIN clauses

force_parallel_mode = off

PostgreSQL配置文件--QUERY TUNING的更多相关文章

  1. postgresql 配置文件优化

    postgresql 配置文件优化 配置文件 默认的配置配置文件是保存在/etc/postgresql/VERSION/main目录下的postgresql.conf文件 如果想查看参数修改是否生效, ...

  2. 过滤PostgreSQL配置文件中被注释的部分

    以下正则可以过滤掉PostgreSQL配置文件被注释的部分,包括'#'前带空格的部分,但参数前带空格的部分不会过滤掉 postgres@linux-ij7j:/opt/pg8122/data> ...

  3. Inside TSQL Querying - Chapter 3. Query Tuning

    Tuning Methodology When dealing with performance problems, database professionals tend to focus on t ...

  4. PostgreSQL Hardware Performance Tuning

    Bruce Momjian POSTGRESQL is an object-relational database developed on the Internet by a group of de ...

  5. PostgreSQL配置文件--WAL

    3 WAL WRITE AHEAD LOG 3.1 Settings 3.1.1 fsync 字符串 默认: fsync = on 开启后强制把数据同步更新到磁盘,可以保证数据库将在OS或者硬件崩溃的 ...

  6. PostgreSQL配置文件--其他

    9 CLIENT CONNECTION DEFAULTS 9.1 Statement Behavior 9.1.1 search_path 字符型 默认:search_path = '"$u ...

  7. PostgreSQL配置文件--实时统计

    7 实时统计 RUNTIME STATISTICS 7.1 Query/Index Statistics Collector 下面的参数控制是否搜集特定的数据库运行统计数据 7.1.1 track_a ...

  8. PostgreSQL配置文件--日志和错误

    6 错误操作和日志 ERROR REPORTING AND LOGGING 6.1 日志写到哪里 Where to Log 6.1.1 log_destination 字符串 默认: log_dest ...

  9. PostgreSQL配置文件--复制

    4 复制 REPLICATION 4.1 Sending Server(s) 4.1.1 max_wal_senders 数字型 默认: max_wal_senders = 10 , 为0表示启用流复 ...

随机推荐

  1. linux命令--head

    head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 具体使用参考链接: h ...

  2. 阿里云Centos等更新源设置成阿里源方法。

    https://help.aliyun.com/knowledge_detail/5974184.html ---------------------------------------------- ...

  3. resteasy web Guice集成版本

    xxxx:8080/resteasy/messageservice/aaaa Hello : aaaa web.xml <context-param> <param-name> ...

  4. 关于rem的一点总结【原创】

    关于rem的一点总结 最近在写一个关于小说阅读的webApp,由于没有借用任何框架,所以很多底层的内容都需要自己去解决,幸好的是这次只是关于移动端的内容,还不至于去向着jquery的方向码代码.言归正 ...

  5. electron 编译 sqlite3避坑指南---尾部链接有已经编译成功的sqlite3

    electron 编译 sqlite3避坑指南(尾部链接有已经编译成功的sqlite3) sqlite很好用,不需要安装,使用electron开发桌面程序,sqlite自然是存储数据的不二之选,奈何编 ...

  6. CentOS7.5更改grub2菜单背景&开机动态画面

    Grub2菜单背景 红帽企业版 Linux 7 的引导装载程序是“GRUB 2”.您可以更改“GRUB 2”外观的几个部分.以下几小节将向您展示如何改变 Linux 发行版名称.菜单颜色,和背景图片. ...

  7. macos不能打开windows samba共享问题(转载)

    转自:https://www.macx.cn/thread-2095377-1-1.html?mod=viewthread&tid=2095377&extra=page%253D1&a ...

  8. Nginx错误:nginx: [error] OpenEvent("Global\ngx_reload_6252") failed (2: The system cannot find the file specified)

    执行nginx -s reload命令: nginx: [error] OpenEvent("Global\ngx_reload_6252") failed (2: The sys ...

  9. qTip2 Events详细说明

    绑定事件: 这个API触发一些特殊的事件(以下详细信息),允许你给qTip分配多个时间监听,和为某一事件做出响应,例如: 我们绑定一个事件句柄,它将侦听qTip的移动的事件,和更新DIV元素里面显示的 ...

  10. 洛谷P2713 罗马游戏

    题目传送门 分析: 好吧,其实没什么好分析的,左偏树裸题. Code: #include<cstdio> #include<cstring> #include<cstdl ...