• [技术干货] PostgreSQL开启Huge Page场景分析
        PostgreSQL用户经常发现,服务端在连接数较大的情况下,会出现系统内存消耗过多的情况,严重者可能会造成OOM。但是服务端配置的共享内存(shared_buffers,wal_buffers等)是一定的,为什么内存会持续增加呢?这就与PostgreSQL的多进程架构有关了,下面我们来分析下。1. 大规格PG实例内存使用率较高分析为了保证物理内存能得到充分的利用,避免内存空间浪费,Linux把进程当前使用的内存部分加载到物理内存里,而不使用的部分则暂不加载。PostMaster进程注册共享内存时,系统只是分配一个虚拟的地址空间,并不直接分配物理内存。当有实际的内存访问时,CPU才会将虚拟地址映射到物理内存的一个地址上。维护这个映射关系的就是PageTable,它负责将虚拟内存地址转换成物理内存地址。 Linux的内存管理采取的是分页存取机制:把较大的物理内存分为了一个个固定大小(4kB)的内存页进行管理。每块内存页通过PageTable中的一个元组来维护虚拟/物理内存之间的映射。CPU为了提高虚拟/物理内存之间的转换效率,也会在TLB中缓存一定量的Page Table元组。对于PostgreSQL这种多进程架构程序来说,当服务端使用的共享内存较大,且并发连接数较多时,由于操作系统对于每个进程都要维护单独的内存映射,PageTable中的元组数目将会变得非常多,所占用的内存大小也会特别大。2. Huge Page改善措施Linux为了应对这种场景,降低多进程下PageTable的内存消耗。自从2.6及以上内核版本提供了内存页大小为2MB的管理方式,称为Huge Page。如果使用Huge Page的话,相同物理内存使用量的情况下内存页的数目变少,减少了PageTable元组的条目个数,从而降低了系统的内存占用。作为世界上最先进的开源数据库,PostgreSQL也适配了Linux的Huge Page特性,服务端在注册共享内存时,会通过配置参数huge_pages来决定是否申请大页内存。postgresql.conf:    huge_pages = on             -- 注册共享内存时必须使用大页    huge_pages = try            -- 注册共享内存时首先考虑大页,若系统提供的大页内存不足时,则全部使用普通页    huge_pages = off            -- 注册共享内存时不使用大页真实应用场景:某PG用户将实例(shared_buffers = 64GB)部署在一台内存为256GB的ECS上,业务繁忙时ECS内存使用率为85%,PageTable占用内存120GB。而开启Huge Page后相同业务场景的内存使用率降低到50%以下,PageTable大小仅300M!3. PG实例开启Huge Page操作步骤    (1)查看操作系统的Huge Page大小grep Hugepage /proc/meminfo    (2)估算PostgreSQL实例需要的Huge Page使用量:128GB/2MB * 1.2 = 78643    (3)/etc/sysctl.conf中添加:vm.nr_hugepages = 78643    (4)重新加载系统配置参数:sysctl –p    (5)确认是否配置成功。可以看到Huge Page总数为78643    (6)确认PG配置文件打开huge_pages    (7)启动PostgreSQL服务端,可以看到系统中的空闲Huge Page已经减少,部分大页已经被共享内存使用。    4. Huge Page使用建议虽然Huge Page在一定场景下可以改善服务端内存使用过高的情况,但不是鼓励所有的PG实例都使用大页,盲目的开启Huge Page可能引起服务端的性能下降。下面我们根据Huge Page的优缺点来分析下使用场景。Huge Page优势:(1)CPU的TLB可以缓存的物理地址空间更大,从而提升TLB的命中率,降低CPU负载;(2)Huge Page使用的内存是不可交换(swap)的,没有内存空间换入/换出的开销;(3)极大的减少了系统维护PageTable的内存开销。Huge Page劣势:(1)Huge Page使用的内存需要预先分配;(2)Huge Page使用固定大小的内存区域,不会被释放;(3)对于写密集型的场景,Huge Page会加大Cache写冲突的发生概率。所以强烈推荐PG实例开启Huge Page的场景:共享内存使用较大(>=8GB)且连接数较多(>= 500),并且热点数据分散。不推荐PG实例开启Huge Page的场景:写业务密集,热点数据集中且内存使用较小。5.PG开启Huge Page时的注意事项(1)当配置参数huge_pages设置为on时,若PG启动时需要注册的共享内存大于操作系统提供的Huge Page大小时,数据库将无法启动。推荐将huge_pages参数设置为try,在此种场景下,PostMaster将会改为申请普通内存。(2)修改shared_buffers/wal_buffers等共享内存相关的GUC参数时,需要重新计算操作系统所需的Huge Page数,以防服务端无法启动或者部分大页内存没有被使用且无法释放而造成浪费。
  • [问题求助] 欧拉2.8是否支持docker安装postgresql 12.4
    鲲鹏欧拉2.8已安装docker,是否支持用docker安装postgresql 12.4数据库
  • [数据库] 全新增强4大特性,华为云PostgreSQL 12 正式商用~~
    全新增强4大特性,华为云PostgreSQL 12 正式商用PostgreSQL是世界上备受欢迎的一款典型开源关系型数据库,在保证数据可靠性和完整性方面尤为出色。为了给用户提供更稳定可靠的服务,华为云数据库团队经过精心研发,正式推出了RDS for PostgreSQL 12版本,并于日前开始商用。PostgreSQL 12自官方推出以来,在各方面都得到了加强,TPC-C 性能测试下,平均可以提升约40%的查询性能和空间利用率,特别是数据量较大情况下,用户可以以较小的成本换来性能和空间管理等存储特性,包括企业级安全、后台管理和SQL/JSON支持、生成列、优化WITH查询、授权控制、可插拔表存储接口等功能。华为云RDS for PostgreSQL 12除了具备官方的全新功能外,还针对华为云用户的特殊使用场景,设计了更为贴心的服务,极大提升了用户体验。华为云RDS for PostgreSQL 12的4大特性性能提升40%华为云RDS for PostgreSQL 12版本在性能和易维护性方面有了显著的增强,尤其是对索引和分区子系统,大大提升了各种操作访问/查询的效率。Ø  索引:对标准索引类型B树索引进行了优化,使其可以更好地处理索引更新频率较高类型的负载的总体性能。另外生成GiST、GIN或SP-GiST索引的WAL日志的负载显著减少,SP-GiST索引支持<->距离操作的K-NN(即相邻最近)查询,以及CREATE STATISTICS指令现在支持最常用值MCV 的统计来帮助那些字段值非均匀分布的查询生成更优化的查询计划。Ø  分区表:对分区表的查询也做了较大改进,特别是对那些有数千个分区的表,而结果只需从几个有限的分区提取数据的查询。PostgreSQL 12增强数据INSERT 和COPY方式加入分区表的操作,支持不阻塞查询的情况下新增分区。增强SQL一致性和功能华为云RDS for PostgreSQL 12版支持对JSON文档进行查询时使用JSON路径表达式的功能。对使用JSONB格式保存的文档,这些查询可以利用已有的索引机制来高效提取数据。支持WITH查询,可以实现非物化操作处理,这对很多现在已有的查询有很大帮助;引入“生成列”功能,支持将计算出来的生成列存储起来。增强授权控制华为云RDS for PostgreSQL 12扩展了安全方面的功能,增加了GSS接口,支持客户端和服务端的双向加密。增强系统管理PostgreSQL 12版的REINDEX CONCURRENTLY指令可以在不影响新的索引写入的前提下让用户执行重建索引操作,这有助于用户在不停机状态下实现对较大索引的重建。使用pg_checksums指令对停机的PostgreSQL来开启或关闭页校验功能,该功能有助于检查已写入磁盘的数据一致性,而以前版本中该操作仅允许在initdb的阶段来执行。此外,华为云RDS for PostgreSQL 12支持自动备份与恢复,支持对参数进行自定义设置,支持一键扩容,故障闪恢复,提供多种安全策略保护数据库和用户隐私。华为云RDS for PostgreSQL 12架构图适用更多场景华为云RDS for PostgreSQL 12版本提供了卓越的性能和功能,适用于位置应用系统、科研项目信息系统、金融保险系统、互联网电商等场景。位置应用系统华为云RDS for PostgreSQL 12支持PostGIS插件,提供空间对象、空间索引、空间操作函数和空间操作符等空间信息服务功能,非常适用于位置应用类产品。科研项目信息系统华为云RDS for PostgreSQL 12支持更复杂的数据类型,能够存储精确的数据,基于VPN进行数据私密保护,并且能够自定义数据类型。还可将不常用的数据转存到OBS云存储,节省存储成本和主机空间。金融保险系统华为云RDS for PostgreSQL 12使用多版本并发控制(MVCC)保证数据一致性,主备实例数据同步复制实现数据双保险,确保数据不丢失,并且配合OBS实现存储空间扩展,将冷数据转存到OBS中,进一步节省历史数据存储成本。互联网电商华为云RDS for PostgreSQL 12在互联网应用高并发场景下具有较高稳定性,并且所有操作都可以在SQL中完成,无需来回进行数据导入,提高开发效率。每一次的改进和优化都是对技术的追求和对客户的用心服务,华为云RDS for PostgreSQL 12版本的推出,更是对这一理念的具体实践,未来华为云数据库会提供更加优质的产品和服务,欢迎大家选购体验。
  • [技术干货] 40%性能提升,华为云推出PostgreSQL 12 商用版
    摘要:日前,华为云数据库正式推出了RDS for PostgreSQL 12版本,并开始商用。本文将从华为云RDS for PostgreSQL 12的4大特性和架构图等多方面来解读华为云PostgreSQL 12版本,帮助大家深入了解PostgreSQL 12版本的产品功能特性,更好的应用实施。全新增强4大特性,华为云PostgreSQL 12 正式商用PostgreSQL是世界上备受欢迎的一款典型开源关系型数据库,在保证数据可靠性和完整性方面尤为出色。为了给用户提供更稳定可靠的服务,华为云数据库团队经过精心研发,正式推出了RDS for PostgreSQL 12版本,并于日前开始商用。PostgreSQL 12自官方推出以来,在各方面都得到了加强,TPC-C 性能测试下,平均可以提升约40%的查询性能和空间利用率,特别是数据量较大情况下,用户可以以较小的成本换来性能和空间管理等存储特性,包括企业级安全、后台管理和SQL/JSON支持、生成列、优化WITH查询、授权控制、可插拔表存储接口等功能。华为云RDS for PostgreSQL 12除了具备官方的全新功能外,还针对华为云用户的特殊使用场景,设计了更为贴心的服务,极大提升了用户体验。华为云RDS for PostgreSQL 12的4大特性性能提升40%华为云RDS for PostgreSQL 12版本在性能和易维护性方面有了显著的增强,尤其是对索引和分区子系统,大大提升了各种操作访问/查询的效率。Ø  索引:对标准索引类型B树索引进行了优化,使其可以更好地处理索引更新频率较高类型的负载的总体性能。另外生成GiST、GIN或SP-GiST索引的WAL日志的负载显著减少,SP-GiST索引支持<->距离操作的K-NN(即相邻最近)查询,以及CREATE STATISTICS指令现在支持最常用值MCV 的统计来帮助那些字段值非均匀分布的查询生成更优化的查询计划。Ø  分区表:对分区表的查询也做了较大改进,特别是对那些有数千个分区的表,而结果只需从几个有限的分区提取数据的查询。PostgreSQL 12增强数据INSERT 和COPY方式加入分区表的操作,支持不阻塞查询的情况下新增分区。增强SQL一致性和功能华为云RDS for PostgreSQL 12版支持对JSON文档进行查询时使用JSON路径表达式的功能。对使用JSONB格式保存的文档,这些查询可以利用已有的索引机制来高效提取数据。支持WITH查询,可以实现非物化操作处理,这对很多现在已有的查询有很大帮助;引入“生成列”功能,支持将计算出来的生成列存储起来。增强授权控制华为云RDS for PostgreSQL 12扩展了安全方面的功能,增加了GSS接口,支持客户端和服务端的双向加密。增强系统管理PostgreSQL 12版的REINDEX CONCURRENTLY指令可以在不影响新的索引写入的前提下让用户执行重建索引操作,这有助于用户在不停机状态下实现对较大索引的重建。使用pg_checksums指令对停机的PostgreSQL来开启或关闭页校验功能,该功能有助于检查已写入磁盘的数据一致性,而以前版本中该操作仅允许在initdb的阶段来执行。此外,华为云RDS for PostgreSQL 12支持自动备份与恢复,支持对参数进行自定义设置,支持一键扩容,故障闪恢复,提供多种安全策略保护数据库和用户隐私。华为云RDS for PostgreSQL 12架构图适用更多场景华为云RDS for PostgreSQL 12版本提供了卓越的性能和功能,适用于位置应用系统、科研项目信息系统、金融保险系统、互联网电商等场景。位置应用系统华为云RDS for PostgreSQL 12支持PostGIS插件,提供空间对象、空间索引、空间操作函数和空间操作符等空间信息服务功能,非常适用于位置应用类产品。科研项目信息系统华为云RDS for PostgreSQL 12支持更复杂的数据类型,能够存储精确的数据,基于VPN进行数据私密保护,并且能够自定义数据类型。还可将不常用的数据转存到OBS云存储,节省存储成本和主机空间。金融保险系统华为云RDS for PostgreSQL 12使用多版本并发控制(MVCC)保证数据一致性,主备实例数据同步复制实现数据双保险,确保数据不丢失,并且配合OBS实现存储空间扩展,将冷数据转存到OBS中,进一步节省历史数据存储成本。互联网电商华为云RDS for PostgreSQL 12在互联网应用高并发场景下具有较高稳定性,并且所有操作都可以在SQL中完成,无需来回进行数据导入,提高开发效率。每一次的改进和优化都是对技术的追求和对客户的用心服务,华为云RDS for PostgreSQL 12版本的推出,更是对这一理念的具体实践,未来华为云数据库会提供更加优质的产品和服务,欢迎大家选购体验。偷偷告诉你,除了上面的特性解读,我们还特邀了专家线上面对面直播详解,更多华为云PostgreSQL 12 的强大功能等你解锁,戳下方二维码,快来报名观看直播吧!
  • [热门活动] 【华为云•微话题】PostgreSQL 12首发之际,吐槽or赞美?来来,走一波,参与即可赢取U型枕&amp;双肩包
    【直播回看】华为云PostgreSQL 12正式商用,特邀华为云数据库专家Willie为你讲解PostgreSQL业内地位、华为云PostgreSQL 12亮点、架构及关键特性。福利来啦:看直播,学知识,互动赢无线鼠标,下单还有机械键盘和蓝牙耳机哦直播链接:https://huaweicloud.bugu.mudu.tv/watch/lm0rk1dm【微话题活动】PostgreSQL经过20+年的开源发展,2017、2018连续2年被DB-Engines评选为 "年度优秀数据库”,2019年度又被OSCON国际开源组织评为“终身成就奖”的开源产品。华为云PostgreSQL 12已正式商用发布,在各方面都得到了加强,包括企业级安全、后台管理和SQL/JSON支持、生成列、优化WITH查询、授权控制、可插拔表存储接口等功能。尤其突出的是,查询性能和空间利用率平均提升了约40%,在数据量较大情况下,用户可以以较小的成本换取处理性能和空间管理。今天我们邀请到华为云数据库产品管理专家Willie和大家讨论一下:【PostgreSQL 12首发之际,吐槽or赞美?】活动时间2020年5月9日-2020年5月22日参与方式直接在本帖回复关于以下问题的理解或评论1、您从事什么行业,为什么使用或计划使用PostgreSQL数据库?2、您在使用过程中,发现PostgreSQL数据库目前存在的问题有哪些?3、华为云PostgreSQL 12商用发布后,是否可以解决您的问题?4、华为云PostgreSQL 12支持ARM版本,会给行业和您的工作带来什么价值?5、您觉得华为云PostgreSQL在目前的市面上有什么差异性优势,未来应该加强什么?本期奖品A.回帖参与本次讨论,回复与话题相关的原创内容,即可获得U型枕1个(数量有限,先到先得)。B.数据库产品管理专家Willie评出3名优质评论奖,各送出华为云定制双肩包1个。(两样奖品不可同时获得,奖品于活动结束发放) 评奖标准回复话题数量和内容质量                                                                                                        优质评论奖3名                                                                              参与奖
  • [热门活动] 【福利贴】华为云PostgreSQL 12首发强势特性解析专场直播,微信转发后回复盖楼赢好礼
    【直播主题】:华为云PostgreSQL 12正式商用,Willie直播详解首发“酷炫”特性【直播看点】:Part 1:PostgreSQL 12亮点大揭秘Part 2:PostgreSQL 12架构及关键特性剖析Part 3:PostgreSQL特惠活动攻略             云数据库组合推荐与购买攻略             互动抽奖与直播福利【直播时间】:5月19日 19:00-20:00【报名链接】:https://bbs.huaweicloud.com/signup/b9ebd73ade5142efb50f48c648fcdf53【直播福利】颈枕 8个、无线鼠标 3个、雷柏机械键盘 6个、HUAWEI FreeBuds悦享版无线耳机 1个更有直播专享PG1元尝鲜价 100个,五折优购(满3000元减1500元满减券 50个、满1000元减500元满减券 50个、满500元减200元满减券 50个)欢迎大家参与和转发~——————————————————————我是分割线——————————————————————————当当当当~~最后公布本帖福利即日起至5月19日 18:00 分享此长图到朋友圈,并截图回复此贴即可(此贴已设置仅楼主可见)5月14日、5月15日、5月18日,连续三天,每天抽取1名幸运小伙伴,赠送颈枕一个噢中奖公示:5月20日,在此处公示赶快行动起来吧~中奖人员公示:日期获奖人员5月14日加油O幸福5月15日小伙贼奔放5月18日yhl请获奖用户在5日内添加小助手微信(cloud_xiaolu)领奖,否则视为放弃奖励不予补发。注:若收货地址为中国大陆地区,则邮费论坛承担;若收货地址为港澳台地区及海外地区,则邮费需要您自行承担。
  • [热门活动] 【福利贴】华为云PostgreSQL 12首发强势特性解析专场直播,点赞吐槽互动赢好礼
    【直播主题】:华为云PostgreSQL 12正式商用,Willie直播详解首发“酷炫”特性【直播看点】:Part 1:PostgreSQL 12炫酷特性详解            PostgreSQL简介和应用场景            PostgreSQL 12架构及关键特性剖析            PostgreSQL应用案例Part 2:PostgreSQL特惠活动攻略             云数据库组合推荐与购买攻略             互动抽奖与直播福利【直播时间】:5月19日 19:00-20:00【直播链接】:https://bbs.huaweicloud.com/signup/b9ebd73ade5142efb50f48c648fcdf53【直播福利】颈枕 8个、无线鼠标 3个、雷柏机械键盘 6个、HUAWEI FreeBuds悦享版无线耳机 1个更有直播专享PG1元尝鲜价 100个,五折优购(满3000元减1500元满减券 50个、满1000元减500元满减券 50个、满500元减200元满减券 50个)欢迎大家参与和转发~——————————————————————我是分割线——————————————————————————当当当当~~最后公布本帖福利在此贴盖楼,回复一句关于数据库的话可以是学习心得、自我感悟,对华为云数据库产品建议,学习诉求等,均可举例:华为云数据库xxx用着很棒我希望华为云数据库定期举办xxx活动第33、66、99、150、200楼的童鞋即可获得颈枕一个噢如有重复中奖,顺延至下一楼层的未中奖用户中奖公示:5月22日,在本帖二楼公示赶快行动起来吧~中奖人员公示:楼层获奖人员33楼啊酒哥哥66楼hw84820715请获奖用户在5日内添加小助手微信(cloud_xiaolu)领奖,否则视为放弃奖励不予补发。注:若收货地址为中国大陆地区,则邮费论坛承担;若收货地址为港澳台地区及海外地区,则邮费需要您自行承担。
  • [交流吐槽] 希望添加PostgreSQL镜像
    希望添加PostgreSQL的Linux repo仓库,官方上游仓库: https://ftp.postgresql.org/pub/或者: https://www.postgresql.org/ftp/或者: https://download.postgresql.org/pub/另: 发现rsync地址: rsync://rsync.postgresql.org/pgsql-ftp通过rsync方案同步镜像应该更方便一些
  • [技术干货] 浅析PostgreSQL并行查询代价估算
    并行查询特性最早是在PostgreSQL 9.6中引入。自那时起,社区一直在扩展该功能。在PostgreSQL 11和PostgreSQL 12中,社区开发人员向数据库引擎添加了更多的相关功能。本文就PostgreSQL查询优化器对并行执行代价估算的工作原理进行阐述,不足之处希望大家多多指正。串行顺序扫描执行代价估算       为了方便解释,用一个简单的例子来说明问题。首先通过代码片段1创建一个表包含两列。    1.  //代码片段1     2.  mydb=# CREATE TABLE people (id int PRIMARY KEY NOT NULL, age int NOT NULL);      3.  CREATE TABLE为了演示并行查询带来的益处,利用代码片段2往表people**一千万条数据,其中age字段是0-100之间的随机数。    1.  //代码片段2     2.  mydb=# INSERT INTO people        3.         SELECT id, (random()*100)::integer AS age        4.         FROM generate_series(1,10000000) AS id;       5.  INSERT 0 10000000默认情况下PostgreSQL是打开并行执行的。我们首先关闭并行执行开关,检查串行查询执行的耗时。通过将配置参数max_parallel_workers_per_gather设置为0可以关闭并行执行特性。从查询执行计划可以看到,顺序扫描的执行代价为144.248ms(Pg的执行计划显示的时间由两部分组成,‘..’前面的称之为start_up_cost,后面部分叫做run_cost)。总的查询执行代价为169.248ms。Pg如何计算得到这些数字的? 1.  //代码片段3  2.  mydb=# SET max_parallel_workers_per_gather TO 0;    3.  SET    4.  mydb=# explain analyze select count(*) from people;    5.                                 QUERY PLAN    6.  --------------------------------------------------------------------------------  7.   Aggregate  (cost=169248.60..169248.61 rows=1 width=8) (actual time=1375.237..1375.237 rows=1 loops=1)    8.      -> Seq Scan on people(cost=0.00..144248.48 rows=10000048 width=0)    9.   (4 rows)Pg查询执行时间total_cost = start_up_cost + run_cost,具体来说pg的运行时的代价由以下的式子计算得到:                total_cost = cpu_run_cost + disk_run_cost                                   = (cpu_tuple_cost + cpu_operator_cost) × Ntuple + seq_page_cost×Npage (1)        其中cpu_tuple_cost是CPU传输该记录的代价;cpu_operator_cost指函数运算或其他操作符的开销。有了上述计算规则以后,可以通过Pg的元数据表pg_class查询表people相关统计信息,见代码片段4。可以得到Npage=44248,Ntuple = 10000048.Pg源代码的cost.h头文件定义了公式(1)相关的计算代价,见代码片段5:    1.  //代码片段4     2.  mydb=# SELECT relpages, reltuples FROM pg_class WHERE relname = 'people';       3.   relpages |   reltuples       4.   ----------+---------------       5.     44248 | 1.0000048e+07       6.  (1 row)计算代价如下:    1.  //代码片段5     2.  /* defaults for costsize.c's Cost parameters */       3.  /* NB: cost-estimation code should use the variables, not these constants! */       4.  /* If you change these, update backend/utils/misc/postgresql.sample.conf */       5.  #define DEFAULT_SEQ_PAGE_COST  1.0       6.  #define DEFAULT_RANDOM_PAGE_COST  4.0       7.  #define DEFAULT_CPU_TUPLE_COST  0.01       8.  #define DEFAULT_CPU_INDEX_TUPLE_COST 0.005       9.  #define DEFAULT_CPU_OPERATOR_COST  0.0025       10. #define DEFAULT_PARALLEL_TUPLE_COST 0.1       11. #define DEFAULT_PARALLEL_SETUP_COST  1000.0将代码片段5的计算代价,放入公式(1),我们可以得到顺序扫描的代价:                              total_cost = (cpu_tuple_cost)×Ntuple + seq_page_cost×Npage                        = 0.01×1.0000048e+07 + 1×44248                                 = 144248.48这就是代码片段3第8行的顺序执行代价。而总的执行代价,需要对每条元组进行count函数操作,因此需要加上cpu_operator_cost,因此聚集函数count的查询执行start_up_cost为:                              Start_up_cost = cpu_run_cost + disk_run_cost                               = (cpu_tuple_cost + cpu_operator_cost)×Ntuple + seq_page_cost×Npage (1)                       = (0.01 + 0.0025) ×1.0000048e+07 + 1×44248                               = 169248.6 (代码片段3第7行所示)最后,系统只需要对这条元组传输即可,因此总的查询执行代价为:                            total_cost = (cpu_tuple_cost)×Ntuple + start_up_cost                                       =  0.01 + 169248.6                                       =  169248.61(代码片段3第7行所示)并行顺序扫描执行代价估算现在我们将并行执行的特性打开令max_parallel_workers_per_gather=2,相应的执行计划如下:1.  //代码片段6 2.  mydb=# set max_parallel_workers_per_gather = 2;   3.  SET   4.  mydb=# explain analyze select count(*) from people;   5.                           QUERY PLAN   6.  ------------------------------------------------------------------------------------------------------------ 7.   Finalize Aggregate  (cost=97331.80..97331.81 rows=1 width=8) (actual time=524.896..524.896 rows=1 loops=1)   8.     ->  Gather  (cost=97331.58..97331.79 rows=2 width=8) (actual time=524.828..526.162 rows=3 loops=1)   9.           Workers Planned: 2   10.          Workers Launched: 2   11.          -> Partial Aggregate  (cost=96331.58..96331.59 rows=1 width=8)   12.                -> Parallel Seq Scan on people  (cost=0.00..85914.87 rows=4166687 width=0)   13.  Planning Time: 0.307 ms   14.  Execution Time: 526.209 ms   15. (8 rows)为了解释并行查询执行代价,我们首先看看不同进程(为什么用进程是历史原因)之间工作量的分配。当并发进程只有两个的时候,主进程需要将大部分时间花费在执行工作,当并行进程的增加,主进程逐渐将工作转向聚合部分结果。Pg的进程工作量分配正是建立在这个基础之上。具体的分配算法见代码片段7第22行-27行。并行执行的框架如图1所示。1.  //代码片段7 2.  static double   3.  get_parallel_divisor(Path *path)   4.  {   5.      double      parallel_divisor = path->parallel_workers;   6.     7.       /*  8.        * Early experience with parallel query suggests that when there is only 9.        * one worker, the leader often makes a very substantial contribution to 10.       * executing the parallel portion of the plan, but as more workers are  11.       * added, it does less and less, because it's busy reading tuples from the  12.       * workers and doing whatever non-parallel post-processing is needed.  By  13.       * the time we reach 4 workers, the leader no longer makes a meaningful  14.       * contribution.  Thus, for now, estimate that the leader spends 30% of  15.       * its time servicing each worker, and the remainder executing the  16.       * parallel plan.  17.       */   18.     if (parallel_leader_participation)   19.     {   20.         double      leader_contribution;   21.    22.         leader_contribution = 1.0 - (0.3 * path->parallel_workers);   23.         if (leader_contribution > 0)   24.             parallel_divisor += leader_contribution;   25.     }   26.    27.   return parallel_divisor;  28.  }                                                                                    图1.并行执行框架因此当并行执行的worker为2的时候,每个工作进程所分配得到的工作量为:10000048.0 / (2 + (1 – 0.3 * 2)) = 4166686.66 rows.这就是代码片段6第13行得到每个worker处理的元组(rows)数目。这里需要注意的是虽然是并行扫描但是IO代价仍然是按照全表扫描的代价计算。这主要是因为每个并发进程在同一份数据上按照block-by-block的方式顺序推进全局next指针,这等价于全表扫描。总结PostgreSQL的口号是开源数据库中最强大的关系型数据库系统。其实业界也一直将其称为开源数据库的oracle。此言不虚,因为很多企业客户在去“O”问题上选择用PostgreSQL替代Oracle。PostgreSQL不仅在语法上高度兼容Oracle而且在性能上也向Oracle靠拢,例如并行查询特性就是PostgreSQL引以为豪的特性之一。PostgreSQL实现了并行scan,merge-join,hash-join,以及partition-join等。这篇文章对PostgreSQL的并行查询进行了初步的分析,探讨了并行工作进程之间的工作量分配,查询执行代价的计算,以及并行查询的总体框架。后续我们计划对PostgreSQL的并行join算法进行深入探讨以更好地了解PostgreSQL的并行查询功能。
  • [迁移工具] Porting Advisor 移植 PostgreSQL,移植报告问题
    环境介绍:平台:X86 计算,通用计算增强型, c6.large.22vCPUs | 4GB, CentOS 7.6 64bit) 迁移工具:Porting-advisor-x86_64-linux-1.1.3.tar.gzhttps://www.postgresql.org/ftp/source/v11.3/ ,下载的PostgreSQL 11.3 版本源代码包 postgresql-11.3.tar.gz1、代码移植工具填写信息:2、经过迁移工具分析后,显示内容如下:3、但试验手册上的试验中显示:需要移植的依赖库 SO 文件、源文件、代码行数均为 0,说明postgresql-11.3 源码不需要修改,可以直接进行源码编译安装。 有点疑惑,不知是工具的问题还是实验手册的问题?实验手册图如下:
  • KUNPENG平台Postgres10.4.0+postgis2.4.4移植自动安装脚
    1 POSTGIS简介PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。2 环境信息2.1 环境信息类别子项版本获取地址OSCentOS7.5 Aarch64https://www.centos.org/download/服务器配置16U16GB50GB软件postgresql10.4https://ftp.postgresql.org/pub/source/v10.4/postgresql-10.4.tar.gz软件postgis2.5.0http://download.osgeo.org/postgis/source/postgis-2.5.0.tar.gz依赖geos3.7.0https://download.osgeo.org/geos/geos-3.7.0.tar.bz2依赖proj5.2.0http://download.osgeo.org/proj/proj-5.2.0.tar.gz依赖gdal2.2.1https://codeload.github.com/OSGeo/gdal/tar.gz/v2.2.1依赖json-c0.13.1https://github.com/json-c/json-c/archive/json-c-0.13.1-20180305.tar.gz依赖libxml22.9.8https://github.com/GNOME/libxml2/archive/v2.9.8.tar.gz 3 软件移植3.1 环境准备:OS安装类型:CentOS-7.5-aarch64-1804。 注:操作系统安装使用最小简化版安装(如上图),其余步骤安装一般安装操作系统步骤即可。3.1.1 相关软件下载上传:1、 上传CentOS 7.5系统ISO镜像文件至服务器2、 上传环境列表中的软件和依赖文件至服务器3.2 软件安装脚本执行指导下载附件脚本至服务器。赋予脚本执行权:限chmod +x postgres+postgis_install.sh执行Postgres+postgis安装脚本:sh postgres+postgis_install.sh4 软件运行4.1 验证执行脚本成功运行结束时会回显如下信息: 按照回显信息提示进行操作,出现如下信息则安装成功: 
  • KUNPENG平台PostgreSQL10移植自动安装脚本
    1 POSTGRESQL简介PostgreSQL是以加州大学伯克利分校计算机系开发的关系型数据库管理系统(ORDBMS)。2 环境信息2.1 环境信息类别子项版本获取地址OSCentOS7.5 Aarch64https://www.centos.org/download/服务器配置16U16GB50GB软件POSTGRESQL10Yum安装 3 软件移植3.1 环境准备:OS安装类型:CentOS-7.5-aarch64-1804。 注:操作系统安装使用最小简化版安装(如上图),其余步骤安装一般安装操作系统步骤即可。3.1.1 相关软件下载上传:1、 上传CentOS 7.5系统ISO镜像文件至服务器3.2 软件安装脚本执行指导下载附件脚本至服务器。赋予脚本执行权:限chmod +x postgresql_install.sh执行PostgreSQL安装脚本:sh postgresql_install.sh 4 软件运行4.1 验证执行安装完毕后,系统会创建一个数据库超级用户 postgres,密码为空。#  sudo -i -u postgres这时使用psql命令进入 postgres,输出以下信息,说明安装成功: 
  • [中间件] 【华为云鲲鹏云服务最佳实践】【数据库篇】第003期 Postgresql 9.2.24 安装配置指南
    1、简介      PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。      官方链接:https://www.postgresql.org/      类别:数据库2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5 Kernel4.14 软件包Postgresql9.2.24 3、依赖安装无4、组件编译安装无5、系统配置CentOS 7.5已经安装了Postgresql 9.2.24版本,说明该软件可以在该环境上正确安装。6、测试测试内容:初始化并启动数据库cd /usr/libexec/initscripts/legacy-actions/postgresqlpostgresql-setup initdbsystemctl status postgresql测试结果:测试内容:修改数据库密码(PostgreSQL在数据库用户同名的系统账号下登录免密)测试结果:测试内容:创建用户、数据库并未数据库赋权测试结果:测试内容:登录数据库测试结果:测试内容:数据库操作(创建表、**数据、查询)测试结果:7、参考信息官方文档:https://www.postgresql.org/docs/8、FAQ 无
  • [交流分享] 【鲲鹏翱翔】数据库01-PostgreSQL移植安装指南
    1、简介PostgreSQL是一个功能强大的开源企业级数据库系统,可以运行在所有主流操作系统上,包括Linux、Unix(AIX、BSD、HP-UX、SGI IRIX、Mac OS X、Solaris和Tru64)和Windows。PostgreSQL是完全的事务安全性数据库,完整地支持外键、联合、视图、触发器和存储过程(并支持多种语言开发存储过程),同时对SQL标准高度兼容,它实现的功能完全遵守于ANSI-SQL:2008标准。PostgreSQL具有多版本并发控制(MVCC)、按时间点恢复(PITR)、表空间、异步复制、嵌套事务、在线热备、复杂查询的规划和优化以及为容错而进行的预写日志等高级功能;支持国际字符集、多字节编码并支持使用当地语言进行排序、大小写处理和格式化等操作;也在所能管理的大数据量和所允许的大用户量并发访问时具有完全的高伸缩性。官方归档目录链接:https://www.postgresql.org/ftp/source/类别:数据库检验版本:PostgreSQL 9.5.5/9.1.102、环境类别子项版本获取地址(方法) 硬件CPUHi1616--网络Ethernet-10GE--存储NVMe SATA   40G --内存7G 2.4GHz--OSCentOS7.5Kernel4.14 软件GCC4.8.5readline6.2zlib1.2.73、组件安装PostgreSQL数据库安装需要的组件均可以直接yum安装。yum -y   install readline-devel zlib-devel gcc gcc-c++ zlib readline4、PostgreSQL安装设置安装路径,获取postgresql-9.5.5安装包cd   /optwget https://ftp.postgresql.org/pub/source/v9.5.5/postgresql-9.5.5.tar.gz解压压缩文件tar -zxvf   postgresql-9.5.5.tar.gz进入解压目录文件夹,配置编译安装环境cd   /opt/ postgresql-9.5.5./configure   --build=arm-linux --host=arm-linux --prefix=/usr/local/pgsql     注:--build指明编译环境,--host指明运行环境,--prefix指明安装路径.  环境配置完成后,开始编译安装makemake   install  创建用户,默认root用户不能启动postgresqladduser   postgres   将安装目录下的数据授权给postgres用户chown  -R postgres:postgres /usr/local/pgsql   设置用户环境变量su   postgresvi ~/.bash_profile   添加以下内容export   PGHOME=/usr/local/pgsqlexport   PGDATA=/usr/local/pgsql/dataexport   PATH=$PATH:$PGHOME/bin   使配置生效source   ~/.bash_profile   检验环境变量是否设置正确psql -V     如能正确显示数据库的版本信息,则配置正确5、初始化数据库       设置环境变量完成后,直接执行initdb即可完成初始化   Initdb初始化时需要指定数据目录,如未指定,会自动在环境变量中寻找PGDATA,此示例中上述步骤已设置PGDATA。initdb     看到如下信息后即代表初始化成功。 6、启动和连接设置日志文件路径mkdir   /usr/local/pgsql/log启动数据库pg_ctl   -D /usr/local/pgsql/data -l /usr/local/pgsql/log/pg_server.log start执行完成后会显示服务器启动。查看进程ps -ef   |grep postgres完成后,命令行输入psql即可进入数据库。7、参考信息配置安装指导:https://blog.csdn.net/wlwlwlwl015/article/details/532563588、FAQ1. 在make阶段出现spinlocks错误,怎么解决?A:首先执行make clean,清除已生成的编译文件。重新配置configure文件,在host后加上 –-disable-spinlocks,重新编译安装即可2.在initdb的时候,可能会报以下错误 解决方法:删除/var/lib/pgsql/data目录,再initdb
  • [行业资讯] 华为云数据库 PostgreSQL 11 全新上线
    日前,华为云数据库 PostgreSQL 11 全新上线,不但完整兼容社区版、功能更加完善,而且性能进一步提升,尤其是对大数据量和高计算负载的情况下均进行了增强。PostgreSQL 11 主要特性:1.对分区表进行了大幅改进和增强。增加了哈希分区、支持创建主键、外键、索引、支持UPDATE分区键以及增加了默认分区2.增加了对存储过程的支持,存储过程支持嵌入事务。 这是该版本重量级新特性,对从Oracle转到PostgreSQL用户而言相当友好。3.增强了并行查询能力和并行数据定义能力。支持并行创建索引、并行Hash Join、并行 CREATE TABLE .. AS等4.增加了对 just-in-time (JIT) 编译的支持,加速SQL中的表达式执行效率。 JIT 表达式的编译使用LLVM项目编译器来提升在WHERE条件、指定列表、聚合以及一些内部操作表达式的编译执行。 作为一种典型的开源关系型数据库,PostgreSQL在保证数据可靠性和完整性方面表现出色,支持互联网电商、地理位置应用系统、金融保险系统、复杂数据对象处理等应用场景,既有商业数据库的功能特性,又能在扩展性、安全性、稳定性等高级数据库特性方面超越它们,号称最先进的开源关系型数据库。 PostgreSQL 引擎特点: 多样化数据类型不仅支持常见的字符、数字类型,还包括数组、空间数据类型,网络数据类型等,另外支持自定义数据类型。编程接口和语言ODBC / JDBC / Libpq  PL / Perl、plPHP、PL/Python、PL/Ruby、PL/Tcl 等。高安全性字段加密,基于 DB / Schema / 表/列的权限控制。NoSQL 兼容基于 SQL 支持 JSON、XML 等非结构化数据类型。强大的并发控制4种标准的事务隔离等级、B-tree/GiST/GIN/SP-GiST 索引、表级锁/行级锁/建议锁。 云数据库PostgreSQL 在继承社区版功能特性的基础上,采用安全组和VPC 技术严格控制访问,具备安全事后审计功能;且完全同步协议,主备秒级切换保证事务一致性,提供更低的 RTO 保证。 云数据库无需购买和安装任何软硬件,减少 DBA 投入和成本,进一步为用户节省成本,在线一键按需购买,扩容 CPU/ 内存 /存储资源,实时监控告警,运维更高效。 目前,华为云数据库PostgreSQL支持9.5/9.6/10.0.3版本,上线了最大程度兼容oracle 的内核增强版,并将上线9.4版本,不但版本齐全,而且所有版本均提供单机版和高可用版(双机版),规格从1U2G到60U256G选择更多,支持弹性扩容缩容,可满足不同用户业务需求选择,拥有超高性价比。 此外,华为云数据库PostgreSQL支持同版本在线迁移和离线迁移,支持9.5到9.6跨版本迁移,支持跨云灾备场景。而且华为云PostgreSQL已兼容30+款多功能插件,不仅支持丰富的数据类型,而且直接支持 SQL操作 JSON 及 XML,实现工具化智能管理。 值得一提的是,华为云PostgreSQL 增强版,提供最接近 Oracle 数据库的用户体验,同时完整保留 PostgreSQL 的所有功能,兼容大部分 Oracle 语法和数据库对象,包括内建函数、数据类型、系统视图、匿名块和存储过程等,成为金融行业去 O 用户的最佳选择。           想了解更多内容,请扫码关注【HW云数据库】
总条数:115 到第
上滑加载中