PostgreSQL 11 preview - 优化器 增强 汇总

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

标签

PostgreSQL , 优化器 , 增强 , 11


背景

PostgreSQL 11 优化器增强。

E.1.3.1.4. Optimizer

  • Improve the selection of the optimizer statistics' most-common-values (Jeff Janes, Dean Rasheed)

    高频词的选择性计算更好。

    postgres=# \d pg_stats  
                         View "pg_catalog.pg_stats"  
             Column         |   Type   | Collation | Nullable | Default   
    ------------------------+----------+-----------+----------+---------  
     schemaname             | name     |           |          |   
     tablename              | name     |           |          |   
     attname                | name     |           |          |   
     inherited              | boolean  |           |          |   
     null_frac              | real     |           |          |   
     avg_width              | integer  |           |          |   
     n_distinct             | real     |           |          |   
     most_common_vals       | anyarray |           |          |   
     most_common_freqs      | real[]   |           |          |   
     histogram_bounds       | anyarray |           |          |   
     correlation            | real     |           |          |   
     most_common_elems      | anyarray |           |          |   
     most_common_elem_freqs | real[]   |           |          |   
     elem_count_histogram   | real[]   |           |          |   
    

    Previously most-common-values (MCV) were chosen based on their significance compared to all column values. Now, MCV are chosen based on their significance compared to the non-MCV values. This improves the statistics for uniform (fewer) and non-uniform (more) distributions.

  • Improve selectivity estimates for >= and <= when the constants are not common values (Tom Lane)

    Previously such cases used the same selectivity as > and <, respectively. This change is particularly useful for BETWEEN with small ranges.

    大于等于、小于等于某常量时,如果这个常量是一个非高频词(不在most_common_vals中),使用更优的选择算法。

  • Optimize var = var to var IS NOT NULL where equivalent (Tom Lane)

    重写var=var这样的表达式,改成var is not null,从而提高选择性评估的准确性。

    This leads to better selectivity estimates.

    PostgreSQL 11:

    postgres=# explain select * from aaa where id=id and info='abc';  
                            QUERY PLAN                           
    -----------------------------------------------------------  
     Seq Scan on aaa  (cost=0.00..379776.80 rows=16 width=368)  
       Filter: ((id IS NOT NULL) AND (info = 'abc'::text))  
    (2 rows)  
    

    PostgreSQL 10:

    postgres=# explain select * from aaa where id=id and info='abc';  
                                   QUERY PLAN                                  
    -------------------------------------------------------------------------  
     Seq Scan on aaa  (cost=10000000000.00..10000990476.50 rows=1 width=368)  
       Filter: ((id = id) AND (info = 'abc'::text))  
    (2 rows)  
    
  • Improve row count optimizer estimates for EXISTS and NOT EXISTS queries (Tom Lane)

    增强exists, not exists的行数评估。

  • Add optimizer selectivity costs for HAVING clauses (Tom Lane)

    增加having子句的选择性(返回多少行)成本估算(以前不对这部分进行估算)。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
SQL 弹性计算 关系型数据库
PostgreSQL 12 preview - CTE 增强,支持用户语法层控制 materialized 优化
标签 PostgreSQL , CTE , materialized , not materialized , push down 背景 PostgreSQL with 语法,能跑非常复杂的SQL逻辑,包括递归,多语句物化计算等。 在12以前的版本中,WITH中的每一个CTE(common table express),都是直接进行物化的,也就是说外层的条件不会推到CTE(物化节点)里
830 0
|
SQL 机器学习/深度学习 存储
【重新发现PostgreSQL之美】- 38 肝者,将军之官,谋虑出焉. 优化器
大家好,这里是重新发现PostgreSQL之美 - 38 肝者,将军之官,谋虑出焉. 优化器
|
弹性计算 关系型数据库 数据库连接
PostgreSQL 12 preview - Move max_wal_senders out of max_connections for connection slot handling
标签 PostgreSQL , max_wal_senders , max_connections , sorry, too many clients already 背景 如果你需要使用PG的流复制,上游节点的max_wal_senders参数,用来限制这个节点同时最多可以有多少个wal sender进程。 包括逻辑复制、物理复制、pg_basebackup备份等,只要是使用stre
337 0
|
弹性计算 安全 关系型数据库
PostgreSQL 12 preview - 可靠性提升 - data_sync_retry 消除os层write back failed status不可靠的问题
标签 PostgreSQL , data_sync_retry , write back , retry , failed status 背景 有些OS系统,对fsync的二次调用不敏感,因为OS层可能有自己的CACHE,如果使用了buffer write,并且出现write back failed的情况,有些OS可能在下次fsync时并不能正确的反馈fsync的可靠性与否。(因为这个B
515 0
|
SQL Oracle 关系型数据库
PostgreSQL JOIN limit 优化器 成本计算 改进 - mergejoin startup cost 优化
标签 PostgreSQL , join , limit , startup cost , cbo , 优化器改进 背景 PostgreSQL limit N的成本估算,是通过计算总成本A,以及估算得到的总记录数B得到: (N/B)*A 大概意思就是占比的方法计算 对于单表查询...
1165 0
|
SQL Oracle 算法
PostgreSQL 12 preview - plan_cache_mode参数控制强制使用plan cache或强制custom plan (force_custom_plan and force_generic_plan)
标签 PostgreSQL , plan_cache_mode 背景 plan cache在OLTP中,可以大幅降低生成sql parser, 执行计划的开销。 但是在某些场景中,plan cache可能成为问题,比如AP类型的场景中,由于SQL 输入条件的变化(通常AP业务涉及的条件可能比较容易出现这样的问题),可能导致plan cache并不是最佳的执行计划。
1259 0
|
算法 关系型数据库 C语言
PostgreSQL 当有多个索引可选时,优化器如何选择
标签 PostgreSQL , 索引 , 复合索引 , 选择 , 成本 , 优化器 背景 当一个表有很多索引时,并且一个QUERY可以使用到其中的多个索引时,数据库会如何做出选择?最终选择哪个,或者哪几个索引呢? 《PostgreSQL 多查询条件,多个索引的选择算法与问题诊断方法》 选择单个索引时,PATH可以选择index scan , index only scan, bitmap scan。
2888 0
|
存储 关系型数据库 PostgreSQL
PostgreSQL优化器之从一个关于扫描方式选择引发的思考
# 一个关于PostgreSQL使用组合索引的问题 近期阅读了《数据库查询优化器的艺术》这本书,对PG和Mysql优化器技术的轮廓有了一定了解。在阅读的过程中,因为知识背景和书本身的表述问题产生了许多困惑,这里就分享对其中一个困惑的探索过程作为看完书的总结。 在这本书的第十八章,关于PG和Mysql的优化器对于索引的优化能力对比中的一段让我困惑不已。如图一所示,单独使用组合索引的后半部分作为查
4639 0
|
关系型数据库 物联网 PostgreSQL
PostgreSQL技术周刊第16期:PostgreSQL 优化器代码概览
PostgreSQL(简称PG)的开发者们:云栖社区已有5000位PG开发者,发布了3000+PG文章(文章列表),沉淀了700+的PG精品问答(问答列表)。 PostgreSQL技术周刊会为大家介绍最新的PG技术与动态、预告活动、最热问答、直播教程等,欢迎大家订阅PostgreSQL技术周刊。
3503 0
|
SQL 算法 关系型数据库
PostgreSQL 优化器代码概览
## 简介 PostgreSQL 的开发源自上世纪80年代,它最初是 Michael Stonebraker 等人在美国国防部支持下创建的POSTGRE项目。上世纪末,Andrew Yu 等人在它上面搭建了第一个SQL Parser,这个版本称为Postgre95,也是加州大学伯克利分校版本的PostgreSQL的基石[1]。
1570 0

相关产品

  • 云原生数据库 PolarDB