关于postgresql:PostgreSQL开发与实战4查询性能Top-SQL

作者:太阳 一、查问以后正在运行的Top SQL查问以后正在运行的会话中耗时最长的Top SQL,where条件可按需批改SELECT pgsa.datname AS database_name , pgsa.usename AS user_name , pgsa.client_addr AS client_addr , pgsa.application_name AS application_name , pgsa.state AS state , pgsa.backend_start AS backend_start , pgsa.xact_start AS xact_start , extract(epoch FROM now() - pgsa.xact_start) AS xact_time, pgsa.query_start AS query_start , extract(epoch FROM now() - pgsa.query_start) AS query_time , pgsa.query AS query_sqlFROM pg_stat_activity pgsaWHERE pgsa.state != 'idle' AND pgsa.state != 'idle in transaction' AND pgsa.state != 'idle in transaction (aborted)'ORDER BY query_time DESCLIMIT 20;pg_stat_activity视图各字段含意:http://postgres.cn/docs/13/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW ...

March 1, 2024 · 2 min · jiezi

关于postgresql:PostgreSQL开发与实战3参数整理

作者:太阳 引言在治理和配置PostgreSQL数据库时,理解参数的分类和理解如何查看和更改这些参数是至关重要的。参数的分类波及到不同的失效形式,如外部参数、须要重启失效的参数、不须要重启而能够从新加载配置文件失效的参数等。本文将介绍各类参数的分类及其在PostgreSQL中的作用。 一、参数的分类参数的类型名称阐明internal外部参数,只读无奈批改。postgres程序写死或者是在初始化指定后无奈批改的参数postmaster更改该类参数,需重启失效sighup不需重启,从新加载配置文件即可失效,且会对以后所有过程失效backend不需重启,从新加载配置文件即可失效,但只对新连贯失效superuser该类参数可由超级用户应用set命令来扭转,只影响本身session配置,不影响其它会话;从新加载配置文件后只对新连贯失效user该类参数可由普通用户能够应用set命令来扭转,只影响本身session配置,不影响其它会话;从新加载配置文件后只对新连贯失效二、查看与更改参数的形式1、pg_settings视图所有的配置参数都在零碎视图pg_settings中,该视图各字段含意如下,其中context字段用于记录参数的类型: name:运行时配置参数名setting:参数的以后值unit:存储参数的单位,如mscategory:参数的逻辑组short_desc:参数的简短形容extra_desc:附加的参数的详细描述context:用于记录参数的类型,可依据该值判断参数批改是否需重启失效vartype:参数类型 (bool, enum, integer, real, or string)source:以后参数值的起源min_val:参数的最小允许值(对非数字值为空)max_val:参数的最大允许值(对非数字值为空)enumvals:用于存储参数的可取值(对非数字值为空)boot_val:如果参数没有被别的其余设置,此列为在服务器启动时设定的参数值reset_val:在以后会话中,RESET将会设置的参数值sourcefile:以后值被设置的配置文件(空值示意从非配置文件的其余起源设置,由不是超级用户也不是pg_read_all_settings成员的用户查看时也为空值),在配置文件中应用include指令时有用sourceline:以后值被设置的配置文件中的行号(空值示意从非配置文件的其余起源设置,由不是超级用户也不是pg_read_all_settings成员的用户查看时也为空值)。pending_restart:如果配置文件中批改了该值但须要重启,则为true,否则为false2、查看参数show xxx;或select current_setting('xxx');3、批改参数批改以后session的参数配置:set maintenance_work_mem to '128M';或select set_config('maintenance_work_mem','128M',false);ALTER SYSTEM动静批改全局参数:ALTER SYSTEM SET configuration_parameter { TO | = } { value | 'value' | DEFAULT }将参数从postgresql.auto.conf文件中移除ALTER SYSTEM RESET configuration_parameter将所有参数从postgresql.auto.conf文件中移除ALTER SYSTEM RESET ALL阐明:ALTER SYSTEM会把给出的参数 设置写入到postgresql.auto.conf文件中,该文件会随着 postgresql.conf一起被读入。ALTER SYSTEM RESET能够把参数从postgresql.auto.conf文件中移除。应用 RESET ALL能够移除所有这类配置项。用ALTER SYSTEM设置的值将在从新加载配置文件后失效(用pg_ctl reload或select pg_reload_conf();),那些只能在服务器启动时更改的参数则会在下一次服务器重启后失效。4、令批改后的参数失效1)从新加载配置文件对于不需重启失效的参数,可在操作系统层执行pg_ctl reload或psql中执行select pg_reload_conf();从新加载配置文件令参数的批改失效。 2)重启失效局部参数需重启失效,可查看pg_settings视图的pending_restart字段,如果为true示意需重启失效。 三、常见的各类参数1、监听连贯相干参数含意listen_addressesserver端对客户端的Tcp/ip监听地址,默认为"localhost"示意仅容许本地通过嵌套字连贯,"*"示意监听所有IP,即容许所有IP拜访port服务器监听TCP端口,默认5432max_connectionsserver端容许最大连接数,默认100superuser_reserved_connectionsServer端为超级账号保留的连接数,默认3unix_socket_directoryServer监听客户端Unix嵌套字目录,默认/tmp2、内存相干参数含意shared_buffer共享内存缓存区大小,默认128MBtemp_buffers每个会话应用的长期缓存区大小,默认8MBwork_mem内存长期表排序操作或者hash须要应用到的内存缓存大小,默认4MBmaintenance_work_mem对于维护性操作(vacuum、create index)最大应用内存,默认64M,最小1M。max_stack_depthServer端执行堆栈最大平安深度,默认2M,若发现无奈执行简单函数时可适当调整该参数3、谬误日志相干参数含意logging_collector是否关上日志log_rotation_age超过多少天生产一个新的日志文件log_rotation_size超过多少大小生成一个新的日志文件log_directory日志目录,能够是绝对路径或绝对PGDATA的相对路径log_destination日志记录类型,默认是stderr,只记录谬误输入log_filename日志文件名,默认是postgresql-%Y-%m-%d_%H%M%S.loglog_truncate_on_rotation当日志名已存在时,是否笼罩原文件4、慢SQL相干参数含意log_statement记录语句类型,none示意不开启,ddl标记仅仅记录DDL语句,all示意全副语句均记录log_min_duration_statement单位ms,记录执行超过多少ms的语句5、主从以及WAL相干参数含意wal_level可配置minimal、replica、logical,此配置决定多少信息写入wal日志中,更改参数需重启失效。minimal,只写入在数据库解体会忽然关机进行复原时所须要的信息;设置为replica,会增加一些备库只读查问时须要的信息,须要流复制物理备库、归档、工夫点复原时,需设置为replica;须要逻辑订阅或逻辑备库则设置为logical,logical减少反对逻辑解码所需的信息fsync是否应用fsync()将内存中的脏页刷新到物理磁盘,默认为ONsynchronous_commit事务提交是否须要期待对应的wal日志刷盘,默认为ON;复制一致性要求模式,可设置 remote_apply、on(默认值)remote_write、local、 和offwal_sync_methodwal日志刷盘形式full_page_write当关上该参数时,当在检查点之后第一次批改一个页面时,整个页面都被写入wal,防止数据库解体复原时数据页损坏wal_log_hints在full_page_writes的根底上,即便数据页产生了一些不重要的更改,也会将整个页面写入到wal日志。若数据库应用pg_rewind,须要开启该参数或者关上 data checksumswal_compression当开启full_page_writes参数或者进行根底备份时,是否对wal日志进行压缩,默认为offwal_buffer数据库变更操作首先会写入wal buffer,而后wal buffer刷盘写入到wal log,个别可设置为wal log的1/32,但不倡议过小或者过大,个别设置为16MB。wal_writer_delaywal buffer进行刷盘从工夫维度上的频率,默认200ms。若间隔上一次刷盘工夫小于 wal_writer_delay 且容量小于 wal_writer_flush_after ,wal仅仅会写入os,并不会进行刷盘wal_writer_flush_afterwal buffer 进行刷盘从容量上的频率,默认为8kb。若间隔上一次刷盘工夫小于 wal_writer_delay 且容量小于 wal_writer_flush_after ,wal仅仅会写入os,并不会进行刷盘max_wal_size在两次checkpoint期间wal日志增长最大限度,该参数的限度属于软限度。当archive异样、standby复制异样、重负载、wal_keep_segments参数设置过大时,该参数可能会进行扩大。该参数设置过大会影响数据解体复原的工夫min_wal_size当wal日志空间占用小于该参数时,wal日志会被进行复用而不会被删除,该参数可确保批处理操作时有足够的wal空间进行存储,默认为80MBwal_keep_size指定在 pg_wal 目录中保留的 wal segment file 的最小大小,以便流复制环境中的 standby server 从主库中 fetch wal file;单位MBwal_sender_timeout发送方(主库)walsender过程的超时工夫,如果存在超过这个工夫、进行流动的复制连贯,会被中断,默认以毫秒为单位,默认60swal_receiver_timeout接管方(从库)walreceiver过程的超时工夫,如果存在超过这个工夫、进行流动的复制连贯,会被中断,默认以毫秒为单位,默认60s6、复制相干参数含意max_wal_senders数据库启动wal发送过程的最大并发数(备用服务器复制或者根底备份)max_replication_slots数据库可创立的复制槽个数wal_keep_segments为保障备用服务器复制落后时,主数据库仍保留所需的wal日志的wal段大小synchronous_standby_namesPG默认采纳异步复制,如要配置同步复制,需将synchronous_standby_names设置为非空,synchronous_commit设置为ON官网阐明:http://postgres.cn/docs/13/runtime-config-replication.html#GU... hot_standbystandby实例是否可进行查问wal_sender_timeout中断那些进行流动超过指定毫秒数的复制连贯。这对发送服务器检测一个后备机解体或网络中断有用。设置为0将禁用该超时机制,默认为 60 秒wal_receiver_timeout从master实例接管wal的最大工夫限度,终止处于非活动状态的复制连贯。设置为0会禁用超时机制,默认值是 60 秒hot_standby_feedback当开启该参数时,备用服务器执行大查问或者大事物期间,主数据库进行相应的vacuum操作时,保留备用服务所需的版本记录。若备份服务器长时间存在大查问或者大事物,会导致对应表收缩7、超时相干参数含意deadlock_timeout超过该参数的锁才会进行死锁检测,默认1slock_timeout锁期待超时工夫,默认为0示意始终期待statement_timeout管制语句执行时长,单位是ms。超过设定值,该语句将被终止idle_in_transaction_session_timeout终止开启事务但闲暇工夫超过指定持续时间(以毫秒为单位)的任何会话,默认为0示意不开启该性能checkpoint_timeout两次检查点之间的最长工夫距离,单位是秒archive_timeout强制数据库切换新的wal日志的工夫距离,默认为0,示意禁用,个别1min设置是比拟正当的authentication_timeout实现服务器认证的最长工夫,如果在这个工夫内没有实现认证,服务器将敞开连贯,默认1minwal_sender_timeout中断那些进行流动超过指定毫秒数的复制连贯。这对发送服务器检测一个后备机解体或网络中断有用。设置为0将禁用该超时机制,默认为 60 秒。wal_receiver_timeout从master实例接管wal的最大工夫限度,终止处于非活动状态的复制连贯。设置为0会禁用超时机制,默认值是 60 秒。8、vacuum相干参数含意vacuum_cost_delay超出老本计数后强制休眠工夫,该参数不倡议设置过大vacuum_cost_page_hitvacuum操作命中 shared buffer 的代价耗费vacuum_cost_page_missvacuum操作未命中 shared buffer 的代价耗费vacuum_cost_page_dirtyvacuum操作未命中 shared buffer 后,须要将对应的dirty页刷盘的代价耗费vacuum_cost_limit须要强制休眠的代价限度9、异步相干参数含意effective_io_concurrency数据库容许会话级别进行并发磁盘I/O操作的数量maintenance_io_concurrency数据库保护操作容许发动的并发磁盘I/O操作数量max_worker_processes数据库反对最大后盾过程数,默认为8,若调整改参数须要对应的调整以下参数:max_parallel_workers、max_parallel_maintenance_workers和max_parallel_workers_per_gathermax_parallel_workers_per_gather并行查问最大工作过程数,过程资源从 max_worker_processes 中获取,并受限于 max_parallel_workersmax_parallel_maintenance_workers数据库进行保护操作的最大并行过程数,过程资源从 max_worker_processes 中获取,并受限于 max_parallel_workersmax_parallel_workers数据库反对最大并行工作过程更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw ...

February 28, 2024 · 1 min · jiezi

关于postgresql:PostgreSQL技术内幕十三探究MPP数据库分布式查询分发Dispatcher

Dispatcher(分布式查问散发器)是MPP数据库的外围组件,所有的查问工作都要通过其进行散发,起着沟通用户到协调者(Coordinator,即QD)和执行调度的关键作用。 在这次的直播中,咱们为大家介绍了Dispatcher基本原理和实现机制,并结合实际用例进行了操作演示。以下内容依据直播文字整顿而成。 Slice与Gang的基本概念与分类传统MPP数据库采纳无共享Shared-Nothing架构来存储数据,节点之间不共享存储和计算资源,须要应用其余节点的数据时通常利用网络重散发。 图1:Greenplum数据库查问示意图(图片来自 Greenplum: A Hybrid Database for Transactional and Analytical Workloads,SIGMOD '21 ,序号和箭头系本文作者所加) 以Greenplum为例,如图1所示,当用户连贯到Coordinator(协调者节点)进行查问操作时,会通过Dispatcher组件将查问任务分配到不同的Segment,各Segment之间通过Interconnect模块来传输数据。当各节点查问执行实现后,由QD节点对查问后果进行收集和整顿,再回传给用户。 须要留神的是,在查问工作执行时,用户不会和QE产生任何的连贯,所有音讯都是通过QD 来直达传递,这也是MPP 数据库的重要特色。整个过程中,波及到两个重要的概念: Slice:为了在查问执行期间实现最大的并行度,Greenplum会将查问打算工作划分为Slices。Slice是查问打算中能够独立进行解决的局部。查问打算会为Motion生成Slice,Motion的每一侧都有一个Slice。正是因为Motion算子将查问打算宰割为一个个Slice,上一层Slice对应的过程会读取下一层各个Slice过程播送或重散布操作生成的数据,而后进行计算。 Gang:属于同一个Slice然而运行在不同的Segment上的过程,称之为Gang。在Greenplum中,共有Unallocated、Reader Gang、Writer Gang、Entry Reader、Singleton Reader五种类型的Gang。其中: Unallocated运行在QD,个别只在Gather Motion将各个QE回传的后果收取并集时才会用到。 Reader Gang和 Writer Gang会常常用到,而且相干的查问打算会很简单。● 只读的查问仅蕴含 Reader Gang,蕴含写操作的查问才会应用Writer Gang。● 一些既读又写的查问(例如 Create table as、Update Returning等)可能同时蕴含这两类 Gang。● 这两类 Gang 都只有 1-Gang 和 N-Gang 的状况(其中N为Segment数量),优化器不会进一步划分出更粗疏的结构。 Entry Reader和Singleton Reader不太常见,通常在解决子查问或者其它须要保证系统中只有一份值的情景下呈现。 MPP数据库分布式的特点,使其存储容量和计算能力冲破了单机的下限,而成为多个Segment的总和。MPP 数据库的存储和计算紧耦合,对某一部分数据的计算应尽量在这一部分数据的存储节点上间接实现,这也使得所有表在创立时都有指定的分布模式,对该表的存储和计算都应依照该模式在集群的参与者节点上散布开来,从而造成“分布式”。 图2:Greenplum查问执行调度示意图(起源同图1)许多MPP数据库的初学者,常常会遇到一个问题,Slice和Gang是什么关系? 从二者的作用来看,Slice是对Plan的天然切割,Gang是对Slice的天然实现,两者之间是互相对应的。事实上,在内核代码中两者常常会交替应用。如果是优化器,会更多应用Slice;而在执行器、Dispatcher局部的代码就更多应用Gang。咱们能够认为,Slice和Gang是齐全对应的,前者偏重布局,后者偏重执行。 须要特别强调的是,Writer Gang ≠ Writer QE。事实上,QE并不关怀本人是不是Writer Gang,它的行为只与QD连贯时下发的 isWriter 参数相干,这个参数通过libpq协定握手时 Startup 音讯中的 gpqeid 参数下发到QE上,QE会据此设置Gp_is_writer 全局变量,从而管制QE的行为。 在Greenplum中,任何查问都只有一个Writer QE,而只有写查问才会有Writer Gang。因而,咱们时常听到的“任何查问都有一个 Writer Gang”的论断是不谨严的。 ...

February 20, 2024 · 2 min · jiezi

关于postgresql:PostgreSQLK8s-性能优化记

本文作者蔡松露,是云猿生数据 CTO & 联结创始人,前阿里云数据库资深技术专家。目前负责云猿生数据产品研发工作,率领团队实现云原生数据库管理系统 KubeBlocks 的设计。在此文中,他对 PG on ECS(下文中以 ECS PG 代指)和 PG on K8s 两种计划做了性能比照,并提出了 PG on K8s 上的性能优化计划,以确保数据库在 K8s 上能满足用户对性能和稳定性的要求。背景近年来,很多企业的基础架构都有打算 all-in-K8s 的打算,心愿采纳基于 K8s 的数据库管控平台(如 KubeBlocks)作为自建 PostgreSQL 托管计划(下文以 KubeBlocks-PG 为例)。此外,数据库的容器化和 K8s 化是比拟新的话题,很多人对有状态利用上 K8s 抱有比拟大的狐疑态度,咱们心愿验证数据库在 K8s 上性能是否能满足生产要求。本文提供在私有云 ECS 上自建 PostgreSQL(下文中以 ECS PG 代指)和基于 K8s 的数据库管控平台作为自建 PostgreSQL 托管计划进行比照,并提出如何在 K8s 上优化 PG 性能的计划。 环境筹备 版本CPU内存磁盘网络规格族复制协定ESC PG12.1416C64GESSD PL1 500GSLB独占主备异步ApeCloud PG12.1416C64GESSD PL1 300GSLB独占主备异步在云厂商托管的ACK服务上购买k8s集群并部署KubeBlocks,网络模式采纳Terway,Terway生产进去的Pod IP为VPC IP,保障一个VPC内的网络可达,简化了网络管理和利用开发的老本,node的规格为16C64G。生产实例,一开始在独占的node上无奈生产出16C64G的规格,因为kubelet等agent还耗费局部资源,所以调低request和limit到14C56G后生产胜利。应用kubectl edit编辑pg cluster的resource spec,去掉对request和limit的限度,保障压测过程中能够应用到16C CPU,buffers设置为16GB,创立 PG 实例。 kbcli cluster create --cluster-definition = postgresql测试计划Sysbench Read-intensive 测试:80% read + 20% write。 ...

September 12, 2023 · 6 min · jiezi

关于postgresql:精确快速地完成PostgreSQL数据对比的秘诀

作为一款弱小而广受欢迎的开源关系型数据库管理系统,PostgreSQL 在数据库畛域领有显著的市场份额。其杰出的可扩展性、稳定性使其成为泛滥企业和我的项目的首选数据库。而在很多场景下(开发|生产环境同步、备份复原验证、数据迁徙、数据合并等),不同环境中的数据库数据可能导致数据的不统一,因而,进行数据库之间的数据比照变得至关重要。 PostgreSQL 数据库的传统比照办法通常是采纳手动比拟查问、编写自定义脚本等办法来进行差别比照。这些办法存在以下问题: 耗时且易出错:手动操作容易因忽略导致谬误,而且在大型数据库中进行比拟十分耗时。不可扩大:随着数据量的增长,手动操作变得更加繁琐,很难适应简单的数据比照需要。无奈自动化:每次比照都须要手动干涉,无奈实现自动化的差别监测。01 NineData 数据比照的技术劣势NineData 数据库比照性能是一种比拟数据库之间差别的工具,它用于比拟两个数据库之间的数据、构造的不同之处,帮忙您追踪数据库的变动、发现问题并疾速修复。相比其余数据比照工具,NineData 数据库比照具备如下长处: 欠缺的性能:反对 PostgreSQL 库表构造、数据的一致性比照,同时提供了一次性比照、周期性比照、疾速比照等适宜多种应用场景的比照性能,笼罩残缺的对象、数据类型。全面的数据源反对:除了 PostgreSQL 以外,还反对 MySQL、SQL Server、ClickHouse、Doris、SelectDB、Redis 等多种数据源。简略易用:SaaS 平台提供全自动化构造和数据比照服务,即开即用齐全免装置,不依赖于特定的操作系统,不须要在本地装置软件,大大减少对本地存储资源的占用。可视化界面:领有简洁直观的用户界面,无需简单的设置即可进行数据比照,并且以直观的图表和报告出现比照后果,使您轻松了解数据差别。强劲性能:基于大型服务器集群,联合智能数据分片、批量混检、抽样检查等泛滥核心技术,实现强劲比照性能。运行稳固:动静监测比照数据库负载压力,并依据压力阈值动静调整比照工作的负载,保障业务的稳固。一键差别修复:主动生成不统一内容的修复 SQL,通过简略的复制粘贴即可实现不统一数据的修复,节俭大量工夫精力。收费应用:与售价昂扬的商业化工具相比,NineData 的构造比照、数据比照性能可收费应用,实用于所有须要该性能的用户。安全可靠:NineData 平台通过国家公安部三级网络安全等级爱护认证,为企业的信息安全提供高等级的防护。02 操作应用2.1 一分钟疾速配置比照工作▶︎ 数据比照 ▶︎ 构造比照 2.2 查看比照后果▶︎ 数据比照 ▶︎ 构造比照 2.3 疾速修复不统一内容 2.4 验证修复后果 2.5 查看工作日志和监控指标 03 NineData 数据比照简介NineData 数据比照是一款云原生数据比照产品,具备每秒解决 100 万笔记录的高效能力。它提供了一站式反对,实用于 IDC 自建、云主机自建以及云数据库。NineData 反对多种数据库,包含 MySQL、SQL Server、PostgreSQL、Redis、MongoDB、ClickHouse、Doris 等,可进行数据库间的构造比照和数据比照。 此外,NineData 还反对同构和异构数据源之间的数据一致性校验。用户能够抉择构造比照、全量比照、抽样比照、周期性比照等多种比照形式。NineData 可能动静监测数据库负载,自适应调整比照速度,确保数据库的稳定性。丰盛的数据源反对使得 NineData 可能满足不同客户的需要。此外,NineData 在构造比照方面领有业界当先的覆盖度,对象类型及属性覆盖度业界 NO.1。

September 7, 2023 · 1 min · jiezi

关于postgresql:杭州同城数据分析师交友群线上互侃线下相约面基

原文链接:http://tecdat.cn/32858-2作为数据人,咱们渴望结识气味相投的搭档!但繁忙的生存让咱们错过了交换的机会。让工夫慢下来,深刻理解彼此,播种更多美妙的设想。用激情和智慧点燃城市的火花,打造属于咱们的数据圈子。期待与你相遇,开启难忘的数据之旅! 为什么要退出数据人同城交友群同城流动咱们在流动中付出真挚与智慧,播种友情与乐趣,彼此怀恋,一起度过难忘的时光!或者咱们会在户外徒步;或者咱们会在公园野餐;或者咱们会在花丛中散步;或者咱们会室内探讨交换。 价值社交让社交更加精确,在这里,咱们彼此的“数据价值元素”碰撞交错,热情洋溢地连贯起彼此,遇见气味相投的搭档,遇见三观符合的灵魂。 如何退出「数据人同城交友群」退出链接http://tecdat.cn/32858-2(  或点击“浏览原文”进入) 地点上海/杭州等周边地市 参加对象所有对数据分析感兴趣或从事数据分析相干工作的人员均可退出。 退出须知:请提供个人信息包含:姓名、年龄、性别、学历、工作 理解更多信息,欢送拜访:http://tecdat.cn/32858-2 如有疑难,请发邮件至:contact@tecdat.cn

August 27, 2023 · 1 min · jiezi

关于postgresql:基于-PolarDB-PostgreSQL-版和-LLM-构建企业专属-Chatbot

随着ChatGPT的问世,人们开始意识到大语言模型(LLM,Large language model)和生成式人工智能在多个畛域的后劲,如文稿撰写、图像生成、代码优化和信息搜寻等。LLM已成为集体和企业的得力助手,并朝着超级利用的方向倒退,引领着新的生态系统。本文介绍如何基于PolarDB PostgreSQL版向量数据库和LLM构建企业专属Chatbot。 背景信息越来越多的企业和集体心愿可能利用LLM和生成式人工智能来构建专一于其特定畛域的具备AI能力的产品。目前,大语言模型在解决通用问题方面体现较好,但因为训练语料和大模型的生成限度,对于垂直业余畛域,则会存在常识深度和时效性有余的问题。在信息时代,因为企业的知识库更新频率越来越高,并且企业所领有的垂直畛域知识库(例如文档、图像、音视频等)往往是未公开或不可公开的。因而,对于企业而言,如果想在大语言模型的根底上构建属于特定垂直畛域的AI产品,就须要一直将本身的知识库输出到大语言模型中进行训练。 目前有两种常见的办法实现: 微调(Fine-tuning):通过提供新的数据集对已有模型的权重进行微调,不断更新输出以调整输入,以达到所需的后果。这实用于数据集规模不大或针对特定类型工作或格调进行训练,但训练老本和价格较高。提醒调整(Prompt-tuning):通过调整输出提醒而非批改模型权重,从而实现调整输入的目标。相较于微调,提醒调整具备较低的计算成本,须要的资源和训练工夫也较少,同时更加灵便。综上所述,微调的计划投入老本较高,更新频率较低,并不适宜所有企业。提醒调整的计划是在向量库中构建企业的常识资产,通过LLM+向量库构建垂直畛域的深度服务。实质是利用数据库进行提醒工程(Prompt Engineering)将企业知识库文档和实时信息通过向量特征提取而后存储到向量数据库,联合LLM能够让Chatbot的答复更具专业性和时效性,也更适宜中小型企业构建企业专属Chatbot。 在机器学习畛域,为了可能解决大量的非结构化的数据,通常会应用人工智能技术提取这些非结构化数据的特色,并将其转化为特征向量,再对这些特征向量进行剖析和检索以实现对非结构化数据的解决。将这种能存储、剖析和检索特征向量的数据库称之为向量数据库。 基于PolarDB PostgreSQL版构建的ChatBot的劣势如下: 借助PolarDB PostgreSQL版的PGVector插件,能够将实时内容或垂直畛域的专业知识和内容转化为向量化的embedding示意,并存储在PolarDB PostgreSQL版中,以实现高效的向量化检索,从而进步私域内容的问答准确性。作为新一代关系型云原生数据库,PolarDB PostgreSQL版既领有分布式设计的低成本劣势,又具备集中式的易用性。实现了计算节点及存· 储节点的拆散,提供即时失效的可扩大能力和运维能力。在云原生分布式数据库畛域整体处于国内领先水平。PGVector插件目前曾经在开发者社区以及基于PostgreSQL的开源数据库中失去广泛应用,同时ChatGPT Retrieval Plugin等工具也及时适配了PostgreSQL。这表明PolarDB PostgreSQL版在向量化检索畛域具备良好的生态反对和宽泛的利用根底,为用户提供了丰盛的工具和资源。重要本文提到的“大型语言模型(LLM)”来自第三方(统称为“第三方模型”)。阿里云无奈保障第三方模型的合规性和准确性,也不对第三方模型以及您应用第三方模型的行为和后果承当任何责任。因而,在拜访或应用第三方模型之前请进行评估。另外,咱们提醒您,第三方模型附带有“开源许可”、“许可证”等协定,您应仔细阅读并严格遵守这些协定的规定。疾速体验阿里云提供云速搭CADT平台模板,该计划模板已预部署了ECS以及PolarDB PostgreSQL版数据库,并且预装置了前置安装包,可能帮忙您疾速体验专属ChatBot,您能够返回云速搭CADT控制台,参考大模型联合POLARDB PG数据库构建企业级专属Chatbot进行体验。 前提条件已创立PolarDB PostgreSQL版集群且满足以下条件:PostgreSQL 14(内核小版本14.7.9.0及以上)阐明如需降级内核小版本,请参见版本治理。本文展现的专属的ChatBot基于PolarDB PostgreSQL版提供的开源插件PGVector,请确保已齐全理解其相干用法及基本概念,更多信息,请参见PGVector。本文展现的专属的ChatBot应用了OpenAI的相干能力,请确保您具备Secret API Key,并且您的网络环境能够应用OpenAI,本文展现的代码示例均部署在新加坡地区的ECS中。本文示例代码应用了Python语言,请确保已具备Python开发环境,本示例应用的Python版本为3.11.4,应用的开发工具为PyCharm 2023.1.2。相干概念嵌入嵌入(embedding)是指将高维数据映射为低维示意的过程。在机器学习和自然语言解决中,嵌入通常用于将离散的符号或对象示意为间断的向量空间中的点。 在自然语言解决中,词嵌入(word embedding)是一种常见的技术,它将单词映射到实数向量,以便计算机能够更好地了解和解决文本。通过词嵌入,单词之间的语义和语法关系能够在向量空间中失去反映。 OpenAI提供Embeddings能力。 实现原理本文展现的专属ChatBot的实现流程分为两个阶段: 第一阶段:数据筹备 知识库信息提取和分块:从畛域知识库中提取相干的文本信息,并将其分块解决。这能够包含将长文本拆分为段落或句子,提取关键词或实体等。这样能够将知识库的内容更好地组织和治理。调用LLM接口生成embedding:利用LLM(如OpenAI)提供的接口,将分块的文本信息输出到模型中,并生成相应的文本embedding。这些embedding将捕获文本的语义和语境信息,为后续的搜寻和匹配提供根底。存储embedding信息:将生成的文本embedding信息、文本分块以及文本关联的metadata信息存入PolarDB PostgreSQL版数据库中。第二阶段:问答 用户发问。通过OpenAI提供的embedding接口创立该问题的embedding。通过PGVector过滤出PolarDB PostgreSQL版数据库中类似度大于肯定阈值的文档块,将后果返回。流程图如下: 操作步骤第一阶段:数据筹备 本文以2023年PolarDB PostgreSQL版的产品性能动静文档的文本内容为例,将其拆分并存储到PolarDB PostgreSQL版数据库中,您须要筹备本人的专属畛域知识库。 数据筹备阶段的关键在于将专属畛域常识转化为文本embedding,并无效地存储和匹配这些信息。通过利用LLM的弱小语义理解能力,您能够取得与特定畛域相干的高质量答复和倡议。以后的一些开源框架,能够不便您上传和解析知识库文件,包含URL、Markdown、PDF、Word等格局。例如LangChain和OpenAI开源的ChatGPT Retrieval Plugin。LangChain和ChatGPT Retrieval Plugin均曾经反对了基于PGVector扩大的PostgreSQL作为其后端向量数据库,这使得与PolarDB PostgreSQL版集群的集成变得更加便捷。通过这样的集成,您能够不便地实现第一阶段畛域知识库的数据筹备,并充分利用PGVector提供的向量索引和类似度搜寻性能,实现高效的文本匹配和查问操作。 连贯PolarDB PostgreSQL版集群。创立测试数据库,以testdb为例。CREATE DATABASE testdb;进入测试数据库,并创立PGvector插件。CREATE EXTENSION IF NOT EXISTS vector;创立测试表(本文以polardb_pg_help_docs为例),用于存储知识库内容。CREATE TABLE polardb_pg_help_docs ( id bigserial PRIMARY KEY, title text, -- 文档题目 description text, -- 形容 doc_chunk text, -- 文档分块 token_size int, -- 文档分块字数 embedding vector(1536)); -- 文本嵌入信息为embedding列创立索引,用于查问优化和减速。CREATE INDEX ON polardb_pg_help_docs USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);阐明向量列创立索引的更多阐明,请参见PGVector。在PyCharm中,创立我的项目,而后关上Terminal,输出如下语句,装置如下依赖库。pip install openai psycopg2 tiktoken requests beautifulsoup4 numpy阐明如果psycopg2有装置问题,请思考采纳源码编译形式。创立.py文件(本文以knowledge_chunk_storage.py为例),拆分知识库文档内容并存储到数据库中,示例代码如下:阐明如下示例代码中,自定义的拆分办法仅仅是将知识库文档内容按固定字数进行了拆分,您能够应用LangChain和OpenAI开源的ChatGPT Retrieval Plugin等开源框架中提供的办法进行拆分。知识库中的文档品质和分块后果对最终的输入的后果有较大的影响。import openaiimport psycopg2import tiktokenimport requestsfrom bs4 import BeautifulSoupEMBEDDING_MODEL = "text-embedding-ada-002"tokenizer = tiktoken.get_encoding("cl100k_base")# 连贯PolarDB-PG数据库conn = psycopg2.connect(database="<数据库名>", host="<PolarDB PostgreSQL版集群连贯地址>", user="<用户名>", password="<明码>", port="<数据库端口>")conn.autocommit = True# OpenAI的API Keyopenai.api_key = '<Secret API Key>'# 自定义拆分办法(仅为示例)def get_text_chunks(text, max_chunk_size): chunks_ = [] soup_ = BeautifulSoup(text, 'html.parser') content = ''.join(soup_.strings).strip() length = len(content) start = 0 while start < length: end = start + max_chunk_size if end >= length: end = length chunk_ = content[start:end] chunks_.append(chunk_) start = end return chunks_# 指定须要拆分的网页url = 'https://help.aliyun.com/document_detail/602217.html?spm=a2c4g.468881.0.0.5a2c72c2cnmjaL'response = requests.get(url)if response.status_code == 200: # 获取网页内容 web_html_data = response.text soup = BeautifulSoup(web_html_data, 'html.parser') # 获取题目(H1标签) title = soup.find('h1').text.strip() # 获取形容(class为shortdesc的p标签内容) description = soup.find('p', class_='shortdesc').text.strip() # 拆分并存储 chunks = get_text_chunks(web_html_data, 500) for chunk in chunks: doc_item = { 'title': title, 'description': description, 'doc_chunk': chunk, 'token_size': len(tokenizer.encode(chunk)) } query_embedding_response = openai.Embedding.create( model=EMBEDDING_MODEL, input=chunk, ) doc_item['embedding'] = query_embedding_response['data'][0]['embedding'] cur = conn.cursor() insert_query = ''' INSERT INTO polardb_pg_help_docs (title, description, doc_chunk, token_size, embedding) VALUES (%s, %s, %s, %s, %s); ''' cur.execute(insert_query, ( doc_item['title'], doc_item['description'], doc_item['doc_chunk'], doc_item['token_size'], doc_item['embedding'])) conn.commit()else: print('Failed to fetch web page')运行python程序。登录数据库应用如下命令查看是否已将知识库文档内容拆分并存储为向量数据。SELECT * FROM polardb_pg_help_docs; ...

August 21, 2023 · 2 min · jiezi

关于postgresql:星辰天合公司产品完成阿里云PolarDB数据库产品生态集成认证

近日,XSKY星辰天合旗下产品与阿里云PolarDB 开源数据库社区开展产品集成认证。 测试结果表明,星辰天合旗下的交融计算治理平台XHERE(V2)、对立数据平台XEDP(V6)、天合翔宇分布式存储系统(V6)与阿里云的开源云原生数据库 PloarDB分布式版(V2.2)以及开源云原生数据库PolarDB PostgreSQL(V11),齐全满足产品兼容认证要求,兼容性良好,零碎运行稳固。 云原生数据库 PolarDB 是阿里云自研产品,在存储计算拆散架构下,利用了软硬件联合的劣势,100%兼容 MySQL 和 PostgreSQL 生态,为用户提供秒级弹性、高性能、海量存储、安全可靠的数据库服务。PolarDB 分布式版历经十余年淬炼,始终保持对阿里团体“双十一购物狂欢节”所有相干业务的全面撑持。PolarDB 动摇遵循自主可控、凋谢生态的倒退思路,继续围绕 MySQL、PostgreSQL 开源生态构建企业级、分布式能力,以求最大水平升高用户的学习应用老本。 作为PolarDB开源数据库社区的长期生态搭档,星辰天合凭借在软件定义存储畛域的深厚积攒,旗下交融计算治理平台XHERE(V2)、对立数据平台XEDP(V6)、天合翔宇分布式存储系统与PolarDB的集成认证实现之后,能够帮忙单方独特的客户更好的实现数字化转型,铸就更欠缺的数据基础设施。将来,星辰天合将进一步携手阿里云PolarDB开源社区,在存储等诸多方向独特摸索,独特打造更优质的产品,提供更好的产品体验。

July 6, 2023 · 1 min · jiezi

关于postgresql:PostgresqlCenterOs-79-Postgresql14-数据库-安装和配置

引言集体已经在不同机器配置以及不同的Windows零碎当中集体尝试屡次装置Postgresql,发现每一次状况都不一样,强烈建议读者应用虚拟机的Linux零碎装置Postgresql最为稳当,缩小不必要的踩坑懊恼。 装置形式一共有两种装置形式: 第一种是应用官网提供的 yum 装置。第二种是应用源码编译二进制的形式装置。第二种形式集体并不是很举荐,在依赖上可能要折腾不少工夫,并且不同的Linux发行零碎须要解决的依赖问题也不同。 集体环境阐明环境阐明: 操作系统:Win11 2023 22H2CPU:13代 i5 13500HX内存:32G虚拟机:VM Tool 17CenterOs版本:7.9镜像:CentOS-7-x86_64-Minimal-2009_2.iso实际上还要关注一下CPU的兼容性: CPU architectures: x86, x86_64, IA64, PowerPC, PowerPC 64, S/390, S/390x, Sparc, Sparc 64, ARM, MIPS, MIPSEL, and PA-RISC. Code support exists for M68K, M32R, and VAX  这里提这一点是因为之前用M1的Mac尝试的时候,发现M1 须要 通过 Rosetta 转译,并且执行略微简单的SQL 的时候就会很卡,十分蛋疼,这一点只能看官网是否有兼容M1版本的志愿了。RPM装置RPM装置形式间接简略,适宜集体疾速搭建和应用Postgresql。 装置RPM存储库存储库用于做数据存储以及Postgresql的自动更新操作。首先拜访官网链接:https://www.postgresql.org/download/linux/redhat/填写本人的配置状况,利用官网的配置脚本操作即可。 以Postgresql-14和集体的环境配置为例,截图局部对应的代码如下,留神集体应用的是虚拟机的CenterOs7.9 的版本。 rpm下载 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 装置postgresql sudo yum install -y postgresql14-server 配置Postgresql开机启动 sudo /usr/pgsql-14/bin/postgresql-14-setup initdb sudo systemctl enable postgresql-14 sudo systemctl start postgresql-14集体的运行后果如下: ...

June 27, 2023 · 15 min · jiezi

关于postgresql:Postgresql-内幕探索读书笔记-第一章集簇表空间元组

《Postgresql 底细摸索》读书笔记 - 第一章:集簇、表空间、元组引言集体倡议本章节本人搭建一个Postgresql数据库边实战边浏览更容易了解。 思维导图 一、数据库集群的逻辑构造1.1 人造集群 PostgreSQL人造集群,多个集群能够组成集簇,有点相似军队的连、团、旅这样的组织规定。对于咱们日常学习应用的单节点则是单个集簇单个集群,本人就是集群。 PostgreSQL如何治理这种集群规定?答案是通过一个无符号4个字节的标识进行治理,一个对象就是集群里的一个数据库。 1.2 数据库对象和对象符号标识数据库对象和对象符号标识能够通过 pg database和 pg classs 查问,代表数据库和对象之间映射。 另外集群在物理磁盘中通过文件目录模式展现,一个目录对应一个数据库,也就是一个base下子目录中有一个目录就是有一个数据库。 base 目录一个文件对应一个数据库,集体试验的映射如下:1:template114485:template014486:postgres数据库和堆表的OIDs别离存储在pg_database和pg_class中,能够利用上面的SQL语句查问OIDs。 数据库的OIDs select * from pg_database;postgres=# select * from pg_database; oid | datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | datminmxid | dattablespace | datacl -------+-----------+--------+----------+-------------+-------------+---------------+--------------+--------------+---------------+--------------+------------+---------------+------------------------------------- 14486 | postgres | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 14485 | 727 | 1 | 1663 | 1 | template1 | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | t | t | -1 | 14485 | 727 | 1 | 1663 | {=c/postgres,postgres=CTc/postgres} 14485 | template0 | 10 | 6 | en_US.UTF-8 | en_US.UTF-8 | t | f | -1 | 14485 | 727 | 1 | 1663 | {=c/postgres,postgres=CTc/postgres}(3 rows) ...

June 25, 2023 · 16 min · jiezi

关于postgresql:跃居榜首取代-MySQL-成为最受欢迎的数据库

2023年5月,超过9万名开发人员参加了Stackoverflow年度考察,考察内容次要波及开发者如何学习和降级,他们正在应用哪些工具,以及他们想要哪些工具。 「PS:咱们节选了相干数据库的信息,分享给大家。」 往年,PostgreSQL取代了 MySQL位居第一,成为最受欢迎的数据库。业余开发人员比那些学习编码的人更有可能应用 PostgreSQL (50%),而那些学习编码的人更有可能应用 MySQL (54%)。业余开发人员和学习编码的人应用 MongoDB 的比例类似,对于学习编码的人来说,它是第二受欢迎的数据库(仅次于 MySQL)。 最青睐的数据库在所有的无效问卷中(76,634位受访者),有45.55%的开发者正在应用PostgreSQL,首次超过MySQL,这使得PostgreSQL登上数据库风行度的榜首。MySQL退居第二,有41.09%的开发者正在应用MySQL。其次是SQLite(占比30.9%)。Oracle位列第九,占比9.8%。 考察对象:所有受访者 问题:在过来的一年中,您在哪些数据库环境中进行了大量的开发工作,明年您心愿在哪些数据库环境中工作? 考察对象:所有受访者 在业余开发人员中(60,360位受访者),有49.09%的开发者正在应用PostgreSQL,比去年上涨2.61%,MySQL占比40.59%位居第二,SQLite占比30.17%位居第三,DynamoDB(占比10.31%)超过Oracle排名第九位,Oracle(占比10.06%)位列第十名。 考察对象:业余开发人员 在学习编码人员中(3,940位受访者),MySQL是用的最多的数据库(45.71%),MongoDB数据库位居第二(占比28.15%),其次是SQLite(占比26.93%)。 考察对象:学习编码 在其余程序员(4,009位受访者)中,MySQL仍是用的最多的数据库,其次别离是SQLite和PostgreSQL。 考察对象:其余程序员 最受欢迎的开发语言2023 年连续了 JavaScript 间断第 11 年成为最罕用编程语言的势头。Python 曾经取代 SQL 成为第三大最罕用语言,但对于那些不是业余开发人员或学习编码的人(其余编码员)来说,Python 排名第一。一些技术往年回升了一位(Bash/Shell、C、Ruby、Perl 和 Erlang),其中有两项回升了两位(Elixir 和 Lisp)。Lua 是一种嵌入式脚本语言,自 2022 年以来排名回升了 7 位。业余开发人员前三名的技术与去年雷同——JavaScript、HTML/CSS 和 SQL。 想要学习的数据库在所有受访者中(69,380位受访者),正在应用MySQL数据库的受访者,其中有12,824人想要学习PG。其次,1万余人正在应用 PostgreSQL 用户明年想应用 Redis;9000多 Redis 用户明年想应用 PostgreSQL,这表明前十名数据库中有互补的状况。 对于IvorySQL多年来,瀚高深度参加国内PostgreSQL奉献,踊跃组织加入PostgreSQL国内外围外部会议,社区官网Blog零碎寰球贡献度的第 1 名。 作为国内PG开源生态的建设者和引领者,重磅推出基于PostgreSQL开发并兼容Oracle个性的开源数据库——「IvorySQL,旨在为企业和开发者提供一个高性能、可扩大和平安的数据库解决方案」,并广邀同行、独特倒退。IvorySQL开源根社区在底层代码层面把握开源技术的走向,以平安、兼容、易用为特色,以“链接开发者” 为外围,社区成员可利用IvorySQL Operator、IvorySQL Cloud、IvorySQL HA、IvorySQL DevTool等资源及工具,进行创意产出及深度开发。 官网网址: https://www.ivorysql.org/zh-cn/ 社区仓库: https://github.com/IvorySQL/IvorySQL IvorySQL社区欢送并赞叹所有类型的奉献,期待您的退出! 还有,别忘了在GitHub给咱们一个 ⭐奥~

June 14, 2023 · 1 min · jiezi

关于postgresql:PostgreSQL技术内幕八源码分析-投影算子和表达式计算

在上期Postgres技术底细系列直播中,咱们为大家介绍了Postgres投影算子和表达式计算实现原理和底层细节。本文依据直播内容整顿,作者现任HashData内核研发工程师。 投影 (projection) 关系代数中的一种,用于从关系R中选出属性蕴含在A中的列。在PG中也用于引入额定的列(比方计算表达式) PG对投影的实现整体实现能够分为三个次要局部: 1、判断是否须要投影 当且仅当被扫描的关系的描述符和打算节点的targetlist不匹配的时候,才须要进行投影,tlist_matches_tupdesc 函数用于实现相干的判断逻辑。 static booltlist_matches_tupdesc(PlanState *ps, List *tlist, Index varno, TupleDesc tupdesc){ int numattrs = tupdesc->natts; int attrno; ListCell *tlist_item = list_head(tlist); /* Check the tlist attributes */ for (attrno = 1; attrno <= numattrs; attrno++) { Form_pg_attribute att_tup = TupleDescAttr(tupdesc, attrno - 1); Var *var; if (tlist_item == NULL) return false; /* tlist too short */ var = (Var *) ((TargetEntry *) lfirst(tlist_item))->expr; if (!var || !IsA(var, Var)) return false; /* tlist item not a Var */ /* if these Asserts fail, planner messed up */ Assert(var->varno == varno); Assert(var->varlevelsup == 0); if (var->varattno != attrno) return false; /* out of order */ if (att_tup->attisdropped) return false; /* table contains dropped columns */ if (att_tup->atthasmissing) return false; /* table contains cols with missing values */ /* * Note: usually the Var's type should match the tupdesc exactly, but * in situations involving unions of columns that have different * typmods, the Var may have come from above the union and hence have * typmod -1. This is a legitimate situation since the Var still * describes the column, just not as exactly as the tupdesc does. We * could change the planner to prevent it, but it'd then insert * projection steps just to convert from specific typmod to typmod -1, * which is pretty silly. */ if (var->vartype != att_tup->atttypid || (var->vartypmod != att_tup->atttypmod && var->vartypmod != -1)) return false; /* type mismatch */ tlist_item = lnext(tlist, tlist_item); } if (tlist_item) return false; /* tlist too long */ return true;}其外围逻辑就是遍历targetlist并判断与扫描表的描述符是否匹配,比较简单,这里不再展开讨论。2、构建投影所须要的信息 ...

May 23, 2023 · 5 min · jiezi

关于postgresql:PostgreSQL-分区

PostgreSQL 分区概念 PostgreSQL 分区是将单个大表分成小的、可治理的局部的过程。通过将表合成为更小的局部,能够进步查问性能和数据加载速度,同时也能够简化数据保护和治理。应用分区技术,能够将大型表分成多个小表,每个小表只蕴含特定的数据子集。 在 PostgreSQL 中,分区表由一个主表和多个子表组成。主表蕴含所有子表的元数据,而子表蕴含理论数据。分区表的查问和 DML 操作与一般表雷同,然而在执行操作时,PostgreSQL 会主动将操作路由到正确的子表。 PostgreSQL 反对三种分区形式: 范畴分区(Range Partitioning):将表中的数据依照某个范畴进行分区,例如依照工夫范畴或数值范畴。例如: CREATE TABLE measurement ( logdate date not null, peaktemp int, unitsales int) PARTITION BY RANGE (logdate);列分区(List Partitioning):将表中的数据依照某个列的值进行分区,例如依照地区或类型进行分区。例如: CREATE TABLE cities ( city_id bigserial not null, name text not null, population bigint) PARTITION BY LIST (left(lower(name), 1));哈希分区(Hash Partitioning):将表中的数据依照哈希值进行分区,这种形式适宜于数据分布比拟平均的状况。例如: CREATE TABLE orders ( order_id bigint not null, cust_id bigint not null, status text) PARTITION BY HASH (order_id);PostgreSQL 分区的具体步骤: ...

May 22, 2023 · 2 min · jiezi

关于postgresql:PostgreSQL技术内幕七索引扫描

索引概述数据库索引,是将一个表的某些字段的数据进行从新组织的数据库对象。通过应用索引,能够大大减速数据库的一些操作,其背地的思维也很简略奢侈:空间换工夫。 数据库中的索引,能够类比为一本书的目录,当咱们在书中查问某信息的时候,借助目录,能够疾速定位到对应的章节,从而防止了从整本书中去翻阅,减速了查找的过程。 索引分类Postgres 中常见的索引大抵有上面的这几种,其中 BTree 索引是应用最宽泛的,也是创立索引时默认的选项。 索引扫描的例子上面通过一个例子来领会索引对表扫描的性能的影响。咱们首先创立一个测试表,例如叫 articles,并向其中插入一些测试的数据。 CREATE TABLE articles (  id SERIAL8 NOT NULL PRIMARY KEY,  a text,  b text,  c text);INSERT INTO articles(a, b, c)SELECTmd5(random()::text),md5(random()::text),md5(random()::text)from (  SELECT * FROM generate_series(1,1000000) AS id) AS x;咱们从这个表中查问一条数据,例如查找 a = '65c966eb2be73daf418c126df8dc33b5' 的数据,其查问打算如下:能够看到这里应用了程序扫描(Seq Scan),并且代价(Cost)是 22450。如果咱们给字段 a 加上一个索引(默认是 BTree),create index on articles (a),而后再执行这个 sql 语句,其查问打算如下:能够看到这里应用到了索引扫描(Index Scan),并且代价是 8,相较于程序扫描的 22450,查问的代价大大降低了,查问的性能由此失去了大幅的晋升。 扫描办法程序扫描当对无索引的字段进行查问,或者判断到查问将返回大多数数据时,查问优化器将会应用程序扫描办法。还是以之前的 articles 表为例,这里咱们查问了 id > 100 的数据,蕴含了大部分该表中的数据,所以只管 id 列上有索引,但还是会应用程序扫描。索引扫描如果判断到查问将会命中十分大量的数据时,查问优化器将会抉择索引扫描办法,下面的例子曾经有对应的展现了。上面是一个扫描索引范畴的例子,能够看到命中数据占表数据的大量,抉择索引扫描是最高效的。位图索引扫描只管索引扫描的数据量个别较少,然而这个扫描须要随机 IO 操作,因而比照程序扫描应用的程序 IO 操作,它的代价并不总是更小。所以在命中适中数据(大量与少数之间),程序扫描和索引扫描各自都有缺点。针对这种状况,个别能够采纳位图索引扫描,其原理是将须要拜访的页面有序化,将随机 IO 转为程序 IO。大抵操作步骤如下: 应用索引扫描到满足条件的所有 TID用 TID 列表依照页面的拜访程序构建一个位图读取数据记录时,同一个页面只须要读取一次下图形容了 Postgres 中几种表数据扫描的形式,查问优化器会依据计算的代价抉择最优的扫描办法。索引物理存储postgres 中的索引是一种二级索引,即在物理存储上,索引数据和对应的表数据是分来到的。每个特定的索引对象都存储为了一张独立的关系表,并且都可能在 pg_class 零碎表中查问到。以 BTree 为例,其大抵的构造如下:B+ 树的大抵特点:树层级更少:每个外部节点不再存储数据,因而能存储的键值会更多,于是导致树的层级更少且查问数据也更快(缩小了随机IO)。查问速度更稳固:因为所有数据都存在叶子节点上,因而每次查找的次数(树的高度次随机IO操作)都雷同,查问速度也要更稳固。遍历查问更不便:B+Tree的叶子节点数据形成了一个有序链表,在遍历查问时,首先定位第一个键值的地位,而后沿着链表即可拜访到全副数据。BTree 中的每一个节点在物理构造上存储为一个 page,page 的构造和 heap 表的相似,如下:以 BTree 为例,索引中的内容能够了解为一个由键值到数据元组 TID 的映射,其中 TID 由一个块号和偏移组成。索引创立当用户应用 create index on table (col) 语句后,将会通过语法解析、权限查看等阶段,而后建设索引关系,更新零碎元数据,最初应用表中的数据构建一个残缺的B-Tree 索引。次要的函数调用门路如下:ProcessUtility() Utility语句的解决入口DefineIndex() 定义一个索引(异样判断,筹备index_create()的输出参数)index_create() 创立一个索引(建设关系文件并更新零碎表数据)index_build() 构建索引的外层接口bt_build() B-Tree的索引构建逻辑 ...

April 17, 2023 · 1 min · jiezi

关于postgresql:IvorySQL全新官方文档正式上线

We hear you! 为了优化「用户体验」, 小编曾经把团队惟一一个 八块腹肌的内核开发奉献进去了, 如果这次更新您还不称心, 下一个就是产品经理! IvorySQL是一款开源的兼容Oracle的PostgreSQL!旨在「为企业和开发者提供一个高性能、可扩大和平安的数据库解决方案」 在此基础上,「IvorySQL通过兼容Oracle的个性,使得企业可能更便捷地迁徙现有的Oracle数据库至IvorySQL,升高了迁徙老本和危险」此外,IvorySQL还致力于提供更加优化的性能和更高的可扩展性,以满足一直变动的业务需要。 2023年3月31号IvorySQL官网文档正式上线。在过来的一年中,社区陆陆续续的听到大家对IvorySQL文档建设的呼声,心愿能够尽快发展IvorySQL文档建设工作。截止到今日,是时候该给社区敌人们一个交代啦! 目前,IvorySQL中英文文档已部署上线: https://www.ivorysql.org/zh-CN/ IvorySQL全新文档已上线Antora文档零碎: https://docs.ivorysql.org/index.html 01/文档构架/IvorySQL社区提供双语文档。为了「满足不同用户需要」,IvorySQL社区针对文档建设做了改良,全新的文档帮忙用户能「疾速理解IvorySQL」,并从中找到本人所需的内容。具体的文档构造如下: 发行阐明: 蕴含IvorySQL各个版本的发行说对于IvorySQL: 蕴含IvorySQL概述、产品指标和范畴、外围个性、竞争劣势、技术生态、外围利用场景、次要基本功能、与Oracle的兼容性入门IvorySQL: 蕴含IvorySQL入门指南、疾速体验、运维人员指南、管理员指南装置部署: 蕴含IvorySQL装置概述、装置、卸载IvorySQL数据库开发者指南: 蕴含IvorySQL数据库建模、写入数据、事务、SQL参考、Oracle兼容性能、全局惟一索引运维治理指南: 蕴含降级IvorySQL版本、治理IvorySQL版本、治理IvorySQL数据库拜访、定义数据对象、查问数据、应用内部数据、备份与复原、装卸数据、性能治理迁徙指南: 蕴含IvorySQL迁徙概述、迁徙工具Ora2Pg、迁徙Oracle数据库至IvorySQL、迁徙门户、数据验证、生成迁徙模板社区奉献指南: 蕴含IvorySQL社区概述、贡献者指南、提Issue、奉献代码、提交PR、编写文档、提交blog工具参考: 蕴含IvorySQL工具一览表、客户端工具、服务器利用FAQ02/如何参加IvorySQL文档建设/倒退未有穷期,任重而道远。目前文档仍旧在欠缺当中,「冀望有更多用户能参加到文档建设中为IvorySQL生态建设添砖加瓦」IvorySQL社区提供双语文档,您能够为任何一方文档做出奉献,当然您也能够为两方同时做出奉献。 筹备工作 (1)下载安装Markdown或者antora (2)查看源仓库是否有更新,如果有更新请先更新并同步到本人的仓库。如有更新请参阅以下步骤,更新至最新版本: git remotegit fetch upstreamgit merge upstream/maingit push(3)相熟款式格调(标准阐明) ✍奉献中央 您能够从以下任何一项开始,以帮忙改良IvorySQL网站上的 IvorySQL文档: (1)编写欠缺文档 (2)修复拼写错误或格局(标点符号、空格、缩进、代码块等) (3)修改或更新不当或过期的阐明 (4)增加短少的内容(句子、段落或新文档) (5)将文档更改从英文翻译成中文,或从中文翻译成英文。 (6)提交、回复和解决文档问题 (7)(高级)查看其他人创立的拉取申请 注:标准阐明及示例具体阐明请见官网文档 https://www.ivorysql.org/zh-CN/ 03/参加奉献人员/以下集体作为IvorySQL文档建设者为本版本文档做出了奉献。 Cary HuangDavid ZhangGrant ZhouM.Imran Zaheer谭洋王杰穆帅楠白京茹王丽肖哲凯王守波任娇宋金周金华建

April 12, 2023 · 1 min · jiezi

关于postgresql:版本发布-IvorySQL-Release-22

[Release Date: Mar 29, 2023] 版本介绍IvorySQL 2.2基于PostgreSQL 15.2,包含从IvorySQL 2.1开始的各种修复和新性能。此版本与 IvorySQL 2.1 兼容,并且不须要对运行 IvorySQL 1.X 的用户进行转储/还原。 IvorySQL 2.2 包含 PostgreSQL 15.2 中的各种修复 改良的排序性能和压缩日志记录和配置加强更精密的逻辑复制选项等。无关PostgreSQL 15.2中更具体的更新和谬误修复,请参阅官网 [PostgreSQL 15.2 发行阐明 ] https://www.postgresql.org/docs/release/15.2/ 已知问题暂未发现问题。 加强性能兼容Oracle-多范畴查问。 问题修复就修复了档次查问段谬误问题公元前工夫日期输入谬误源代码IvorySQL次要蕴含2个代码仓库,数据库IvorySQL代码仓、IvorySQL网站仓。IvorySQL代码仓: https://github.com/IvorySQL/IvorySQL IvorySQL网站仓: https://github.com/IvorySQL/Ivory-www 奉献以下集体作为补丁作者、提交者、审阅者、测试者或问题报告者为本版本做出了奉献。 Cary HuangDavid ZhangGrant ZhouM.Imran Zaheer谭洋王杰穆帅楠白京茹王丽肖哲凯王守波任娇宋金周金华建

April 4, 2023 · 1 min · jiezi

关于postgresql:Postgres-15-上的-TLS-设置-–-常见做法

01 /简介/TLS 是大多数应用程序中最罕用的平安协定之一,但也鲜为人知。在这篇博客中,我将简要解释TLS的概念,以及如何将其配置为应用兼容的OpenSSL库编译的Postgres 15版本。 02 /PostgreSQL 服务器端设置/这些是postgresql.conf中与TLS相干的TLS设置。 请留神,这些参数以前缀 SSL 结尾,这是一个可与 TLS(较新术语)调换应用的术语。两者都指同一件事。 #ssl = off#ssl_ca_file = ''#ssl_cert_file = 'server.crt'#ssl_crl_file = ''#ssl_crl_dir = ''#ssl_key_file = 'server.key'#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers#ssl_prefer_server_ciphers = on#ssl_ecdh_curve = 'prime256v1'#ssl_min_protocol_version = 'TLSv1.2'#ssl_max_protocol_version = ''#ssl_dh_params_file = ''#ssl_passphrase_command = ''#ssl_passphrase_command_supports_reload = off大多数时候,您只须要填写SSL,ssl_ca_file,ssl_cert_file,ssl_key_file,可能还有ssl_passphrase_command。例如: ssl = onssl_ca_file = '/home/user/cert/cacert.pem'ssl_cert_file = '/home/user/cert/server.pem'ssl_key_file = '/home/user/cert/server.key'ssl_passphrase_command = 'echo passphrase'这些根本 TLS 参数通知 Postgres 您心愿在服务器上启用 TLS,并提供证书颁发机构 (CA) 证书文件、实体证书文件和私钥文件的门路。这3个文件通常被称为X509证书,次要用于保障客户端和服务器之间的信赖。 CA 证书文件 (ssl_ca_file) 是信赖根,您能够应用 openSSL 为您的组织生成一个证书,并应用它来创立和签订其余实体证书以供应用程序应用。 ...

March 21, 2023 · 2 min · jiezi

关于postgresql:喜讯阿里云数据库PolarDB荣获第12届PostgreSQL中国技术大会开源数据库杰出贡献奖

2023年3月3日,由PostgreSQL中文社区主办的“第十二届PostgreSQL中国技术大会”在杭州隆重开幕。本次大会以“冲破·进化·共赢 —— 安全可靠,共建与时机”为主题,邀请了来自国内外的行业专家、企业家代表等,共见翻新成绩、共论国产数据库倒退时机。 会上,PolarDB for PostgreSQL(简称PolarDB-PG )凭借在数据库开源畛域的深耕布局和产品技术实力,荣获“开源数据库卓越贡献奖”。 PolarDB for PostgreSQL是阿里云自主研发的云原生数据库产品,100%兼容 PostgreSQL,采纳基于共享存储的存储计算拆散架构,具备极致弹性、毫秒级提早,反对 HTAP 的能力,还反对时空、GIS、图像、向量、搜寻、图谱等多模翻新个性,可应答企业对数据处理突飞猛进的需要。  2021年,阿里云将数据库开源作为重要策略方向,正式开源自研外围数据库产品PolarDB。 2021年5月,阿里云率先开源PolarDB for PostgreSQL高可用版,在10月的云栖大会上,阿里云进一步开源了云原生分布式数据库PolarDB-X和PolarDB for PostgreSQL共享存储版;2022年3月,开源PolarDB for PostgreSQL推出分布式版,包含数据库内核、相干插件、工具脚本、测试用例以及设计文档,实用于大中型企业外围业务场景。同时重磅降级了PolarDB for PostgreSQL基于共享存储架构的性能。2022年11月云栖大会上,PolarDB for PostgreSQL开源降级公布,次要集中在数据通明加密、增量备份等企业级个性和数据分片治理、性能线性扩大等分布式个性方面。 作为 PostgreSQL 技术畛域的年度盛事,阿里云积极参与,与PostgreSQL行业大咖、学术精英、技术专家、技术爱好者独特探讨数据库行业数字化倒退方向和将来新机遇,一起携手推动数据库生态的凋敝与倒退。

March 8, 2023 · 1 min · jiezi

关于postgresql:PostgreSQL-技术内幕五GreenplumInterconnect模块

Greenplum是在开源PostgreSQL的根底上,采纳MPP架构的关系型分布式数据库。Greenplum被业界认为是最快最具性价比的数据库,具备弱小的大规模数据分析工作解决能力。Greenplum采纳Shared-Nothing架构,整个集群由多个数据节点(Segment sever)和管制节点(Master Server)组成,其中的每个数据节点上能够运行多个数据库。简略来说,Shared-Nothing是一个分布式的架构,每个节点绝对独立。在典型的Shared-Nothing中,每一个节点上所有的资源(CPU、内存、磁盘)都是独立的,每个节点都只有全副数据的一部分,也只能应用本节点的资源。因为采纳分布式架构,Greenplum 可能将查问并行化,以充分发挥集群的劣势。Segment外部依照规定将数据组织在一起,有助于进步数据查问性能,利于数据仓库的保护工作。如下图所示,Greenplum数据库是由Master Server、Segment Server和Interconnect三局部组成,Master Server和Segment Server的互联通过Interconnect实现。图1:Greenplum数据库架构示意同时,为了最大限度地实现并行化解决,当节点间须要挪动数据时,查问打算将被宰割,而不同Segment间的数据挪动就由Interconnect模块来执行。在上次的直播中,咱们为大家介绍了Greenplum-Interconnect模块技术个性和实现流程剖析,以下内容依据直播文字整顿而成。Interconnect概要介绍Interconnect是Greenplum数据库中负责不同节点进行外部数据传输的组件。Greenplum数据库有一种特有的执行算子Motion,负责查询处理在执行器节点之间替换数据,底层网络通信协定通过Interconnect实现。Greenplum数据库架构中有一些重要的概念,包含查问调度器(Query Dispatcher,简称QD)、查问执行器(Query Executor,简称QE)、执行算子Motion等。图2:Master-Segment查问执行调度架构示意 QD:是指Master节点上负责解决用户查问申请的过程。 QE:是指Segment上负责执行 QD 散发来的查问工作的过程。 通常,QD和QE之间有两种类型的网络连接: libpq是基于TCP的控制流协定。QD通过libpq与各个QE间传输管制信息,包含发送查问打算、收集错误信息、解决勾销操作等。libpq是PostgreSQL的标准协议,Greenplum对该协定进行了加强,譬如新增了‘M’音讯类型 (QD 应用该音讯发送查问打算给QE)等。 Interconnect数据流协定:QD和QE、QE和QE之间的表元组数据传输通过Interconnect实现,Greenplum有三种Interconnect实现形式,一种基于TCP协定,一种基于UDP协定,还有一种是Proxy协定。缺省形式为 UDP Interconnect连贯形式。 Motion:PostgreSQL生成的查问打算只能在单节点上执行,Greenplum须要将查问打算并行化,以充分发挥集群的劣势。为此,Greenplum引入Motion算子实现查问打算的并行化。Motion算子实现数据在不同节点间的传输,在Gang之间通过Interconnect进行数据重散布。 同时,Motion为其余算子暗藏了MPP架构和单机的不同,使得其余大多数算子都能够在集群或者单机上执行。每个Motion 算子都有发送方和接管方。 此外,Greenplum还对某些算子进行了分布式优化,譬如汇集。Motion算子对数据的重散布有gather、broadcast和redistribute三种操作,底层传输协定通过Interconnect实现。Interconnect是一个network abstraction layer,负责各节点之间的数据传输。 Greenplum是采纳Shared-Nothing架构来存储数据的,依照某个字段哈希计算后打散到不同Segment节点上。当用到连贯字段之类的操作时,因为这一字段的某一个值可能在不同Segment下面,所以须要在不同节点上对这一字段所有的值从新哈希,而后Segment间通过UDP的形式把这些数据相互发送到对应地位,汇集到各自哈希出的Segment下来造成一个长期的数据块以便后续的聚合操作。 Slice:为了在查问执行期间实现最大的并行度,Greenplum将查问打算的工作划分为slices。Slice是打算中能够独立进行解决的局部。查问打算会为motion生成slice,motion的每一侧都有一个slice。正是因为motion算子将查问打算宰割为一个个slice,上一层slice对应的过程会读取下一层各个slice过程播送或重散布操作,而后进行计算。 Gang:属于同一个slice然而运行在不同的segment上的过程,称为Gang。如上图2所示,图中有两个QE节点,一个QD节点,QD节点被划分为三个slice。依照雷同的slice在不同QE下面运行称一个组件的Gang,所以上图共有三个Gang。 Interconnect初始化流程在做好根底筹备工作之后,会有一系列处理函数,将某个节点或所有节点的数据收集上来。在数据传输的过程中,会有buffer治理的机制,在肯定的机会,将buffer内的数据刷出,这种机制能够无效地升高存储和网络的开销。以下是初始化一些重要的数据结构阐明。 Interconnect初始化外围构造Gotypedef enum GpVars_Interconnect_Type{Interconnect_TYPE_TCP = 0,Interconnect_TYPE_UDPIFC,Interconnect_TYPE_PROXY,} GpVars_Interconnect_Type;typedef struct ChunkTransportState { /* array of per-motion-node chunk transport state */ int size;//来自宏定义CTS_INITIAL_SIZE ChunkTransportStateEntry *states;//上一个成员变量定义的size个数 ChunkTransportStateEntry /* keeps track of if we've "activated" connections via SetupInterconnect(). */ bool activated; bool aggressiveRetry; /* whether we've logged when network timeout happens */ bool networkTimeoutIsLogged;//缺省false,在ic_udp中才用到 bool teardownActive; List *incompleteConns; /* slice table stuff. */ struct SliceTable *sliceTable; int sliceId;//以后执行slice的索引号 /* Estate pointer for this statement */ struct EState *estate; /* Function pointers to our send/receive functions */ bool (*SendChunk)(struct ChunkTransportState *transportStates, ChunkTransportStateEntry *pEntry, MotionConn *conn, TupleChunkListItem tcItem, int16 motionId); TupleChunkListItem (*RecvTupleChunkFrom)(struct ChunkTransportState *transportStates, int16 motNodeID, int16 srcRoute); TupleChunkListItem (*RecvTupleChunkFromAny)(struct ChunkTransportState *transportStates, int16 motNodeID, int16 *srcRoute); void (*doSendStopMessage)(struct ChunkTransportState *transportStates, int16 motNodeID); void (*SendEos)(struct ChunkTransportState *transportStates, int motNodeID, TupleChunkListItem tcItem); /* ic_proxy backend context */ struct ICProxyBackendContext *proxyContext; } ChunkTransportState;Interconnect初始化逻辑接口初始化的流程会调用setup in Interconnect,而后依据数据类型抉择连贯协定。默认会抉择UDP,用户也能够配置成TCP。在TCP的流程外面,会通过GUC宏来判断走纯TCP协定还是走proxy协定。GovoidSetupInterconnect(EState *estate){ Interconnect_handle_t *h; h = allocate_Interconnect_handle(); Assert(InterconnectContext != NULL); oldContext = MemoryContextSwitchTo(InterconnectContext); if (Gp_Interconnect_type == Interconnect_TYPE_UDPIFC) SetupUDPIFCInterconnect(estate); #here udp初始化流程 else if (Gp_Interconnect_type == Interconnect_TYPE_TCP || Gp_Interconnect_type == Interconnect_TYPE_PROXY) SetupTCPInterconnect(estate);#here tcp & proxy else elog(ERROR, "unsupported expected Interconnect type"); MemoryContextSwitchTo(oldContext); h->Interconnect_context = estate->Interconnect_context;}SetupUDPIFCInterconnect_Internal初始化一些列相干构造,包含Interconnect_context初始化、以及transportStates->states成员createChunkTransportState的初始化,以及rx_buffer_queue相干成员的初始化。/* rx_buffer_queue *///缓冲区相干初始化重要参数conn->pkt_q_capacity = Gp_Interconnect_queue_depth;conn->pkt_q_size = 0;conn->pkt_q_head = 0;conn->pkt_q_tail = 0;conn->pkt_q = (uint8 **) palloc0(conn->pkt_q_capacity * sizeof(uint8 *));/* update the max buffer count of our rx buffer pool. */rx_buffer_pool.maxCount += conn->pkt_q_capacity;3.  Interconnect 初始化回调接口当初始化的时候,接口回调函数都是对立的。当真正初始化执行时,会给上对应的函数撑持。 ...

January 19, 2023 · 3 min · jiezi

关于postgresql:数据库内核从入门到精通-系列课开讲

基于 2022 年教育部-阿里云产学单干协同育人教学内容和课程改革我的项目单干,云原生分布式开源数据库 PolarDB 系列示范课程建设项目陆续和高校开展。阿里云开发者社区、阿里云PolarDB开源社区、武汉大学联结出品「数据库内核从入门到精通」系列课程正式上线,阿里云数据库专家携手高校教师系统化解读数据库实践,发展数据库实际,带学员全面把握数据库内核开发技能。 面向人群● 高校学生: 领有丰盛的数据库理论知识积攒,锤炼编码能力,晋升入手能力和实战经验;● 数据库开发者: 坚固数据库系统常识,并心愿对云原生数据库PolarDB有一个全局的意识,从源码层面理解 PolarDB 的架构设计;● 数据库爱好者: 入门数据库,但不晓得从何学起,想理解数据库畛域都有哪些新机遇和新方向等。 你将学到零碎的数据库内核理论知识❖ SQL引擎、事务和执行引擎、存储引擎等模块内容。晋升数据库内核实战技能❖ PolarDB基础架构详解,理解新一代云原生数据库PolarDB的实现。❖ PolarDB的内核开发实战,让你疾速了解知识点并深刻数据库内核。❖ 通过PolarDB案例解说,参加探讨数据库问题优化和解决,晋升研发效率。 第一讲《数据库系统概述》已上线,点此学习演讲人:于巍花名漠雪,阿里云数据库开源首席架构师,2022年信通院OSCAR尖峰开源人物,13年数据库内核开发和架构设计教训,从无到有参加阿里云等多款国产支流数据库系列产品的内核架构和研发。4年美国、以色列等海内研发教训。目前次要负责阿里云数据库内核架构及演进,开源技术,标准化等工作。参加多项社区组织的如《黑客松》、《开源认证》、《开源学堂》流动及布局,在阿里云等平台停办收费《PostgreSQL 数据库内核解读系列》课程15讲,深受好评。 演讲内容:次要从数据库的历史演进开始讲起,分享了数据库的零碎架构、零碎表、存储引擎的概述和数据组织、SOL引擎的根底和优化器、执行引擎、事物引擎和实战优化等概要内容。

January 6, 2023 · 1 min · jiezi

关于postgresql:直播预告PostgreSQL-技术内幕五Interconnect模块

本次直播将持续咱们的PostgreSQL技术底细系列,由Oracle跟敌人们探讨交换 Interconnect模块的话题。 interconnect模块视频号 Interconnect是在不同Segment间数据挪动的传输组件。gpdb有一种特有的执行算子motion,motion算子波及查询处理期间在 Segment之间挪动数据,通过Interconnect进行数据重散布。 gpdb架构中有一些重要的概念,包含查问调度器和查问执行器等。 -QD(Query Dispatcher、查问调度器):是指Master 节点上负责解决用户查问申请的过程(PostgreSQL 中称之为 Backend 过程) -QE(Query Executor、查问执行器):是指Segment 上负责执行 QD 散发来的查问工作的过程。 QD 和 QE 之间有两种类型的网络连接:-Libpq:QD 通过 libpq 与各个QE间传输管制信息,包含发送查问打算、收集错误信息、解决勾销操作等。libpq 是 PostgreSQL 的标准协议,gpdb对该协定进行了加强,譬如新增了 ‘M’ 音讯类型 (QD 应用该音讯发送查问打算给 QE)。libpq 是基于 TCP 的 -Interconnect:QD 和 QE、QE 和 QE 之间的表元组数据传输通过 Interconnect 实现。Greenplum 有两种 Interconnect 实现形式,一种基于 TCP,一种基于UDP。缺省形式为 UDP interconnect 连贯形式。 Interconnect是Greenplum 实现数据洗牌(Data Shuffling)的实现办法,它为 QEs 提供高速并行的数据传输服务,不须要磁盘IO操作,是高性能查问执行的重要技术之一。 本周四直播间,咱们将邀请HashData内核工程师Oracle为大家解读Interconnect组件,欢送感兴趣的敌人们与咱们相约直播间,一起学习成长!主题:PostgreSQL 技术底细(五)Interconnect模块工夫:1月5号(本周四) 公司简介:HashData是中国当先具备自主可控研发能力的数据仓库软件厂商,外围团队次要由来自Pivotal、Teradata、IBM、Yahoo!、Oracle和华为等公司资深的云计算、分布式数据库和大数据专家组成。凭借深厚的技术积攒以及极具前瞻性的产品理念,HashData数据仓库已广泛应用于金融、电信运营商、交通物流和互联网等多个行业头部客户。

January 3, 2023 · 1 min · jiezi

关于postgresql:给PSQL表row中字段建立索引并证明建立成功

背景形容:组内我的项目有一张表叫做Session,记录的是每一条测试的详细信息,包含id,创建者,创立工夫,测试时长,测试状态(FINISH,TESTING,NO_FRAME等),还有Properties(是一个大json,也就是什么字段都能够往里面塞,例如我的项目包名,软件版本号,测试各项配置)等。当初须要加一个性能,这个性能是在admin页面上,也就是后盾治理页面上做的。当你在页面上hover某条测试的包名(例如:com.hhh.goodgame)的时候,须要显示该测试包,在咱们我的项目内实现了多少次测试。 最开始的做法就是失常的调用ListSession函数,并传入参数进去,取得api返回的count数。 http.listSessions({equalPackageName:searchedSession.Properties.packageName,testStatus:'FINISHED', withDelete: true})然而,因为Session列表的数目过于大,有15w条数据,所以每次查问速度都很慢。于是,咱们决定在Properties.packageName字段下面,建设一个索引。最开始的时候,我还在纠结能不能给字段的字段建设索引,起初查了一下,PSQL真的很弱小,它能够反对:表达式索引。 create index idx_session_properties_packagename on upa.profilingsession ((properties ->> 'packageName'));建设好索引之后,就是验证它是否失效了。在将我的liquibase批改推向master分支之前,我在本地的数据库里进行了模仿。 点开表的详情曾经能够看失去了。而后,决定再用explain试一下,看看index是否有被好好应用,然而后果如下图所示。 而后,我就很奇怪,为什么明明表详情内曾经能够看到index idx_session_properties_packagename,然而搜寻的时候却没有用上。于是猜测,是不是因为我本地表内数据只有7行,数据量太小了?于是我怒插20行,最终失去了如下图所示的后果。 总结学习:1)新增的 index 並沒有在 query plain 裡面。為什麼postgres不選擇index scan卻選擇seq scan?在數據量很小的時候, seq scan 會比 index scan 更加无效。pgsql 的 query plan 有一個評估值的形式來 “預測” 哪一種形式比較快。index scan 至多要發生兩次 I/O,一次是讀取索引塊,一次是讀取數據塊,代價遠高於 seq can。當 index 很大的時候,情況可能會更加複雜。 2)postgresql中的各种scan的比拟 Seq Scan(就是依照表的记录的排列程序从头到尾顺次检索扫描,每次扫描要取到所有的记录。这也是最简略最根底的扫表形式,扫描的代价比拟大)Index Scan(对于给定的查问,咱们先扫描一遍索引,从索引中找到符合要求的记录的地位(指针),再定位到表中具体的Page去取。等于是两次I/O,先走索引,再走取表记录,不同于全表扫描的是只取所需数据对应的Page,I/O量较小)Bitmap Heap Scan(当 PostgreSQL 须要合并索引拜访的后果子集时 会用到这种形式 ,通常状况是在用到 "or",“and”时会呈现"Bitmap heap scan")index only scan(建设 index时,所蕴含的字段汇合,囊括了咱们查问语句中的字段,这样,提取出相应的index ,就不用再次提取数据块了)当获取的数据分布很大(比方70%以上)时,用index scan 曾经没有意义了,因为数据太多了,走索引再走表的代价曾经超过了单纯走表的代价了。就不如用全表扫描了。而数据分布较小(比方 1.7%),则索引的劣势就体现进去了。可能bitmap index scan的性能就更好(相比于index scan,因为它缩小了index的反复扫描)。当数据更少的时候,用index scan可能就更好(索引反复的可能性较小且回避了在内存中排序的代价)。

December 26, 2022 · 1 min · jiezi

关于postgresql:pgaudit安装未完

git clone https://github.com/pgaudit/pgaudit.gitcd pgaudit/git branch -agit checkout REL9_5_STABLE# pg/gp的装置门路make install USE_PGXS=1 PG_CONFIG=/usr/local/gpdb/bin/pg_confighttps://github.com/pgaudit/pg...https://github.com/pgaudit/pg...https://github.com/2ndQuadran...https://blog.csdn.net/pg_hgdb...

December 21, 2022 · 1 min · jiezi

关于postgresql:Postgresql索引类型btreehashGISTGIN

引言Postgresql 存在许多特定的索引查问类型,和大部分的Btree为基础架构的关系型数据库一样,在创立索引缺省的时候会把btree作为默认值。 本节简略介绍Postgresql的索引类型,尽管大部分业务常见常见能够用btree搞定,然而某些状况下其余非凡的索引能够有事倍功半的成果。 官网文档PostgreSQL: Documentation: 14: 11.2. Index Types pgsql索引类型B-treeHashGiSTGINBRINB-tree 索引B-tree 适宜解决那些可能按顺序存储的数据之上的等于(或范畴)查问。范畴查问蕴含上面的内容: <<==>=>在进行下面这些操作符的运算时候,Postgresql 优化器会优先选择 Btree 索引,除了下面操作符以外还有BETWEEN 和 IN 也能够应用索引, 另外索引列上的IS NULL或IS NOT NULL条件也能够用于B树索引。 然而理论尝试发现IS NULL或IS NOT NULL条件的查问很多时候是走不了索引了。依据官网的定义,仅当模式是一个常量,并且锚定在字符串结尾的时候,优化器才会把 B-tree 索引用于模式匹配操作符 LIKE 和 ~。这个说法比拟云里雾里,实际上是暗示开发者尽量避开正则或者含糊查问操作。 模式匹配 比方:col LIKE 'foo%' 或 col ~ '^foo',这些操作能够认为是能够动用索引的,然而留神col LIKE '%bar'这样的操作就不能够应用正则,因为简直所有数据库都不反对后缀索引,这和Btree自身的数据结构无关。 这种时候如果要存储可能须要思考逆序存储+索引的形式来触发扫描索引操作。B-tree 索引能够用于 ILIKE 和 ~* ,然而和前文说的一样,仅当模式以非字母字符(不受大小写影响的字符)结尾才能够应用索引。 B树索引能够用来检索排序后的数据,这并不总是比简略的扫描和排序快,这一点须要留神。 留神:$:示意匹配字串的结尾。^:示意匹配输出字符串的开始地位。 等效于 LIKE, 而 \~\~ 对应 ILIKE,! 和 !\~\~ 操作符 别离代表 NOT LIKE 和 NOT ILIKE操作符形容例子~匹配正则表达式,大小写相干'thomas' ~ '.*thomas.*'~*匹配正则表达式,大小写无关'thomas' ~* '.*Thomas.*'!~不匹配正则表达式,大小写相干'thomas' !~ '.*Thomas.*'!~*不匹配正则表达式,大小写无关'thomas' !~* '.*vadim.*'Hash索引Hash 索引只能解决简略的等于比拟查问操作,并且留神退出哈希索引必然是在惟一值的列,否则索引容易生效。 留神官网并不举荐应用哈希索引。测试表明,PostgreSQL 的 Hash 索引的性能不比 B-tree 索引强,而 Hash 索引的尺寸和制作工夫更差。hash索引因为不记录WAL日志,所以咱们可能须要用 REINDEX 重建 Hash 索引,这会消耗大量零碎开销。哈希索引的创立SQL如下: CREATE INDEX index_name ON table_name USING HASH (indexed_column);GiST 索引(Generalized Search Tree - 通用的搜寻树)GiST 的意思是通用的搜寻树(Generalized Search Tree)。外部是均衡树的拜访形式,GiST索引通常能够用来代替其余索引,比方Btree。 ...

December 20, 2022 · 2 min · jiezi

关于postgresql:PostgreSQL-导入-SLS从业务到监控数据

日志服务SLS数据导入简介日志服务SLS是云原生观测和剖析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务。日志服务是提供一站式数据采集、加工、查问与剖析、可视化、告警、生产与投递等性能。全面晋升在研发、运维、经营、平安等场景的数字化能力。SLS在数据导入方面提供了丰盛的数据源,如OSS导入、MaxCompute、MySQL、SQL Server等数据源。 PostgreSQL是一款收费的对象-关系数据服务器,在互联网和物联网畛域都有宽泛的利用场景,PostgreSQL也自称是最弱小的开源关系型数据库系统,SLS也在近期上线了PostgreSQL数据源导入性能。本文将介绍如何把PostgreSQL的数据导入SLS,并且从可观测性的角度来介绍下非业务类数据导入的场景。 PostgreSQL业务数据导入这里以电商零碎的订单表为例,如下是订单表orders的构造,存储了用户ID、价格、优惠券之类的字段,接下来能够通过简略的配置将订单数据导入到SLS。 CREATE TABLE IF NOT EXISTS orders ( id serial primary key, user_id BIGINT NOT NULL, sku_id BIGINT, sku_category VARCHAR(100), sku_count INT, sku_price INT, total_price INT, supplier_type VARCHAR(100), pay_id VARCHAR(50), pay_channel VARCHAR(20), pay_amount INT, coupon_id INT DEFAULT 0, buy_channel VARCHAR(50) DEFAULT '', state INT NOT NULL, client_ip VARCHAR(15) DEFAULT '', create_time timestamp(6) DEFAULT current_timestamp, update_time timestamp(6) DEFAULT current_timestamp );数据导入依据曾经创立好的Project、Logstore,开展Logstore的配置,抉择数据导入,抉择 + 按钮 PostgreSQL数据导入在疾速数据导入页面,抉择PostgreSQL - 数据导入; 数据源配置在数据源设置页面,填写配置名称、数据库连贯地址等,如果应用VPC地址,须要勾选VPC地址,输出数据库所在的VPC实例ID。 下述示例中查问语句应用了SELECT * FROM orders WHERE id > $1 ORDER BY id,其中$1示意占位符,用来做CheckPoint应用。 ...

December 20, 2022 · 2 min · jiezi

关于postgresql:AgensGraph-源码安装简介

编译装置 # root下useradd agensmkdir -p /usr/local/agenschown -R agens:agens /usr/local/agens/# agens下git clone https://github.com/bitnine-oss/agensgraph.git# --prefix指定装置目录./configure --prefix=/usr/local/agensmakemake install初始化启动数据库 initdb -D /home/agens/work/data/agens# 批改端口号echo 'port = 5462' >> /home/agens/work/data/agens/postgresql.confag_ctl start -D /home/agens/work/data/agens# 官网文档说默认创立的库同以后用户,即agens,# 然而我试验创立的是postgres库# 登陆默认库agens -d postgres -p 5462# 创立新库createdb agens -p 5462# 登陆新库agens -d agens -p 5462简略应用 # graph_path,相似于schema# 默认为空,session级别,创立后,主动赋值给graph_pathCREATE GRAPH network;SET graph_path = network;# 创立顶点(vertice),边(edge)CREATE VLABEL person;CREATE ELABEL knows;# 创立点及边CREATE (:person {name: 'Tom'})-[:knows {fromdate:'2011-11-24'}]->(:person {name: 'Summer'});CREATE (:person {name: 'Pat'})-[:knows {fromdate:'2013-12-25'}]->(:person {name: 'Nikki'});CREATE (:person {name: 'Olive'})-[:knows {fromdate:'2015-01-26'}]->(:person {name: 'Todd'});MATCH (p:Person {name: 'Tom'}),(k:Person{name: 'Pat'}) CREATE (p)-[:KNOWS {fromdate:'2017-02-27'} ]->(k);生成图如下: ...

December 19, 2022 · 1 min · jiezi

关于postgresql:PostgreSQL-技术内幕二-GreenplumAO表

序言Greenplum(以下简称 GP)是一种基于开源PostgreSQL根底上采纳MPP架构的关系型分布式数据库,具备弱小的大规模数据分析解决能力。GP有两种存储格局:Heap表和AO表。其中,AO表是Greenplum所特有的,次要面向OLAP场景,反对行存和列存,批量的数据写入,有利于高吞吐数据量的加载,同时反对对数据进行压缩,AOCO不仅反对表级别的压缩,同时也反对列级别的压缩。GP-AO表的剖析速度快,对于OLAP场景,每次剖析波及的字段较少,能够保障行级严格事务。这种设计对大批量数据的拜访和统计需要而言,可能无效晋升剖析速度。在近期的直播中,HashData内核研发工程师介绍了GP-AO表的设计和特点。以下内容依据直播文字整顿。存储引擎概要Heap表是从PostgreSQL继承而来的,目前是 GP 默认的表存储格局,只反对行存储,不反对列存和压缩。Heap页面存储的数据称为元组(Tuple),在物理文件上不依照某种程序进行排序。当读取Heap文件页面时,也不会对元组的排序做任何假如。Heap的存储格局对于OLTP和OLAP两个拜访模式都是比拟无效的,但更适宜OLTP的场景,比方插入新的元组不须要思考元组间的互相程序,而且删除和更新元组也非常简单。在OLAP的场景下,查问更多的是全表扫描。通常状况下,查问语句并不会读取所有列的数据,而会筛选出感兴趣的列。因为元组是将所有列都寄存在一块,这样会减少额定的IO开销。此外,Heap因为采纳跨页存储,检索非常复杂,对数据的压缩也不如AO和AOCS,对存储的开销较大。总体来讲,Heap表的设计理念重视平衡性,对于元组增删查改的利用场景反对比拟平衡。存储 引擎的AO表设计在OLAP的场景下,数据大多是一些历史数据或日志数据,个别不会批改或者仅大量批改,元组更多以追加而非批改的形式寄存。另外,从数据拜访形式来看,OLAP须要读取大量记录,记录多以扫描的形式进行读取。同时,因为每个页面存在空洞或者曾经被删除的有效数据,扫描拜访形式对于Heap来说并不高效。基于此,Greenplum引入了AO表,用来专门存储以追加形式插入的元组。最开始设计时,AO表被称为Append Only表,只反对追加新元组。在起初的演进中,也反对了删除和更新元组操作,因而当初AO表指的是Append Optimized。与Heap表相比,AO表存储更紧凑,记录之间没有空余空间,在AO表上进行剖析通常效率更高。此外,AO表能够反对列式存储,在解决大批量数据时具备显著劣势,非常适合向量计算和JIT架构。对于AO表的每个文件,元组总是增加到文件开端,所以文件的结尾地址(EOF)就能够作为数据可见性判断的根据。只有当事务胜利提交后,从原来EOF之后新追加的元组才对外可见,否则对外只能看到文件原来的EOF。对此,Greenplum中提供了两个零碎表记录相应的信息:pg_appendonly和pg_aoseg.pg_aoseg_。其中,pg_appendonly表中segrelid记录了AO表所对应pg_aoseg.pg_aoseg_表的OID。pg_aoseg.pg_aoseg_为Heap表,记录了AO表每个数据文件的EOF。这样能够通过MVCC来治理pg_aoseg.pg_aoseg_表中的EOF信息。pg_aoseg.pg_aoseg_中的OID指的是AO表的OID。另外,Heap的元组存储了太多可见性相干的信息,因为EOF曾经能够作为可见性判断的根据,所以AO表中存储的元组不须要存储这些额定的信息。二者比照而言,AO表存储的元组构造是MemTuple,Heap假如的拜访场景是随机和程序拜访,AO表假如的拜访场景多是程序扫描;Heap表的块必须要大小统一,便于随机寻址,AO表的块并不需要定长存储,能够进行变长压缩,以节俭空间。Heap表的块多个过程间须要共享,通过共享缓冲区进行治理。AO表因为是变长块,而且多是程序扫描,所以不通过共享缓冲区。为了反对删除操作,AO表引入了VisibilityMap。如果元组被删除,将会在VisibilityMap中标记。该VisibilityMap信息由零碎表pg_aovisimap_保留。AO表的更新操作的实现也就转换为删除操作+插入操作。因为AO表采纳的是变长块,无奈通过文件内的逻辑块号或行号间接定位到物理地位,然而为了反对在AO表上建设索引,须要通过行号疾速定位到物理地位以便进行元组读取。当AO表上建有索引时,Greenplum中会创立零碎表pg_aoblkdir_来存储行号到物理地位的映射信息,来缩小额定的存储开销。AO表设计框架结构总体概况数据设计AO表的数据设计实现面对的次要问题是数据的增删改查,这就须要解决四个问题:数据寄存、数据可见性、数据表结构设计以及数据如何定位的实现。其中,对于变长记录在数据库系统中的呈现有几个起因。最常见的起因是变长域的呈现,比方字符串。实现变长记录能够采纳不同的技术,但都必须解决两个问题:1、如何示意单条记录,使得此记录的单个属性可能被轻松地提取,即便这些属性是变长的;2、如何在一个块中存储变长的记录,使得一个块中的记录可能被轻松地提取。具备变长属性的记录示意通常蕴含两个局部:首先是带有定长信息的初始局部,其构造对于雷同关系的所有记录都是一样的。紧接着是变长属性的内容,诸如数字值、日期或定长字符串等固定长度的属性,被调配存储它们的值所需的字节数。对于可变长字符串类型这类的变长属性,在记录的初始局部中被示意为一个(偏移量,长度)。对于块中变长记录的存储问题,比方分槽的页构造,个别用于在块中组织记录,每个块开始有块头,蕴含如下信息:块头的记录项的数量、块中的自由空间的开端处、一个蕴含每条记录的地位和大小的项组成的数组。 数据寄存设计AO表通过EOF来管制可见性,相比于HeapTuple,元组中不再须要存储可见性相干信息。MemTuple除了可用在AO表存储格局之外,还会用在执行器中,因为当元组从磁盘读取出到执行器后,不再须要保留可见性相干信息。 数据检索设计对于AO表,每个事务会写不同的分片文件,所以AO表中元组的地位不再像Heap表中的线性构造,而是由分片文件编号(7位,范畴0~127)和文件外行号(40位)确定。AO表通过AOTupleId数据结构来示意AO表中元组的地址,因为元组地址会用到多个中央,比方索引、索引扫描等,所以AOTupleId采纳了和ItemPointerData同样的大小和对齐形式。AOTupleId一共48位6字节,以16位对齐。AO表采纳的是变长块,和ItemPointerData不同的是,并不能简略的从AOTupleId对应到元组的物理地位。在Greenplum中,引入了块目录(BlockDirectory)的表和数据结构,来不便查找从分片文件号以及块外行号来取得在文件中的物理地位。只有当AO表上创立有索引时,块目录才会创立。块目录表保护了从分片文件号、列组编号(columngroup_no,AO表始终为0,AOCS会用到)、起始行号三者到minipage的映射。minipage是由MinipageEntry组成的数组,每个MinipageEntry记录了一个或多个块的起始地位,蕴含如下信息:表MinipageEntry重要成员、firstRowNum 起始行号、fileOffset文件内偏移地位、rowCount 行数。索引扫描或者位图扫描时,会通过AOTupleId读取单个元组,其扫描过程如下:1、通过AOTupleId计算失去指标分片文件号segmentFileNum和行号rowNum。2、如果以后关上分片文件不是segmentFileNum,则敞开以后文件,从新关上第 segmentFileNum号文件。3、判断AOTupleId在块目录表中是否存在,如果不存在,阐明AOTupleId是旧的被回收的元组,或者之前异样终止事务插入的元组,这种状况下,返回读取失败。4、通过VisibilityMap进行可见性查看,如果不可见,返回失败。5、将文件的读取起止范畴设置为块目录表项中的起止范畴。因为块目录表项可能对应一个或者多个块,所以表项中记录的起始地位可能比理论的文件块大。6、调用函数scanToFetchTuple在起止范畴内一一读取文件块,直到找到某个块满足:currentBlock.firstRowNum <= rowNum <= currentBlock.lastRowNum。如果没找到,则返回失败。7、在块内查找查找行号为rowNum的元组并返回。8、保留以后分片文件号,以后块起止行号,以后块目录信息,下次再次读取单个元组时,如果:a、AOTupleId在以后起止行号之前,间接在以后块内查找元组,否则间接跳转到b。     b、在以后块目录范畴内,跳转到第4步开始执行。 数据可见性设计AO表引入了另外一个辅助的Heap表pg_aoseg.pg_aovisimap_,称为VisibilityMap。该表记录了删除元组的信息,并且通过MVCC管制可奏效。如果删除胜利,通过该表就能查问到删除元组,从而判断元组不可见。如果每个删除的元组占用一行,显然不经济并且低效。大部分状况下,AO表中元组的拜访都是程序扫描,VisibilityMap借鉴了块目录表的思路,将多个相邻元组可见性信息放在一起存储。Greenplumn中用位图来示意每个分片文件中元组的可见性,如果元组被删除,对应位图的比特地位1。每32768(APPENDONLY_VISIMAP_MAX_RANGE)个元组的可见性比特位作为一个位图存储在表pg_aoseg.pg_aovisimap_的visimap属性中。Greenplum中在位图表上建设了索引,不便疾速查找。每个位图4096个字节,蕴含32768位,能够示意32768个元组的可见性。VisibilityMap通过函数AppendOnlyVisimapDelete_Init开始位图的批改,通过函数AppendOnlyVisimapDelete_Finish结束位图的批改。当某个行被删除时,须要判断该行对应的位图是否以及曾经在VisibilityMap表中已记录,如果是则读入内存中,否则初始化一个全零的位图。AOCS列存的设计AO表整个行一起存储,当须要读取属性内容时,首先须要读取变长块,解压缩,而后再获取其中一个属性的值。这样做有时代价十分高,即便查问只波及其中一个属性,也须要将所有内容读出来。在OLAP剖析畛域,列式存储是应答这种查问场景、进步性能的常见优化形式。Greenplum中也提供列式存储:AOCSAOCS将不同的属性分成不同的文件存储。查问时,只须要读取须要的属性所对应的文件,其它属性不须要读入,节俭了磁盘IO开销。同AO表一样,AOCS的拜访也不须要通过共享缓冲区管理器,间接从磁盘进行读写。另外,AOCS对数据的压缩做了非凡的解决,可能取得更好的体现。AOCS表的存储相似AO表的存储,然而将每个列存储在独自的分片文件中,其中,第0到127号分片文件存储第一个属性,第128到255号分片文件存储第二个属性,顺次类推。其中,第0,128,256等文件逻辑上属于第0个分片文件,调配给Utility模式应用,第1,129,257等文件逻辑上属于第1个分片文件,顺次类推。对于MPP模式,一个能够反对127个调配文件并发写。通过这种物理文件映射到逻辑分片文件的办法,AOCS表能够复用与AO表雷同的逻辑,比方AOTupleId、索引、VisibilityMap。结语HashData内核基于开源的PostgreSQL和Greenplum Database构建,元数据采纳开源的KV数据库FoundationDB提供长久化,通过ORC、Parquet等凋谢文件格式与其它大数据系统实现互通互联。传统的Greenplum、Teradata等MPP 架构的数据库,存储、计算是紧耦合的,数据存储在本地零碎,存储能力的扩大通过减少集群节点实现,这样会导致计算资源重大节约,无奈满足业务的倒退。作为一款企业级数据仓库产品,HashData在PostgreSQL和Greenplum Database等平台丰盛的剖析性能的根底上,针对云平台个性进行了大量改良和优化,实现了存算拆散、湖仓一体化,满足企业对海量数据的剖析与解决需要,减速企业数字化转型。 HashData研发、行业销售、工程服务等岗位正在炽热招聘中,欢送扫描下图二维码获取职位详细信息,和咱们随时分割!

November 29, 2022 · 1 min · jiezi

关于postgresql:oracle转型数据迁移到openGauss

转型路线 对于Oracle数据库转型个别是有两种抉择: ①.去Oracle个性依赖:取出所有对Oracle专有个性的依赖,采纳规范的SQL,最大水平实现利用与特定数据库产品的解耦,灵便并且能够从集中式架构向分布式架构转化。 ②.平滑迁徙GaussDB:采纳零碎级平滑迁徙计划,通过GaussDB(Oracle兼容模式)及UGO自动化迁徙工具,大幅缩小Oracle迁徙工作量。这次的指标数据库为GaussDB精简模式,扩大能力受限。实用于业务逻辑和业务规模都曾经稳固,或者时效性优先的我的项目。 环境部署性能容量产品机制周边配置迁徙施行部署架构及高可用数据库拜访 urlJDBCgsqlDS/TPDSS第三方连接池数据库对象迁徙 数据类型序列表空间字符集其余问题代码改写 语句语法零碎函数/包函数零碎表/零碎视图逻辑构造事务处理批量解决编译调试数据复制研发运维平台对接

November 29, 2022 · 1 min · jiezi

关于postgresql:oracle转型迁移数据到opengauss

转型路线 对于Oracle数据库转型个别是有两种抉择:①.去Oracle个性依赖:取出所有对Oracle专有个性的依赖,采纳规范的SQL,最大水平实现利用与特定数据库产品的解耦,灵便并且能够从集中式架构向分布式架构转化。②.平滑迁徙GaussDB:采纳零碎级平滑迁徙计划,通过GaussDB(Oracle兼容模式)及UGO自动化迁徙工具,大幅缩小Oracle迁徙工作量。这次的指标数据库为GaussDB精简模式,扩大能力受限。实用于业务逻辑和业务规模都曾经稳固,或者时效性优先的我的项目。环境部署性能容量产品机制周边配置迁徙施行部署架构及高可用数据库拜访 urlJDBCgsqlDS/TPDSS第三方连接池数据库对象迁徙 数据类型序列表空间字符集其余问题代码改写 语句语法零碎函数/包函数零碎表/零碎视图逻辑构造事务处理批量解决编译调试数据复制研发运维平台对接

November 29, 2022 · 1 min · jiezi

关于postgresql:postgresql的增量备份与时间点恢复

postgresql的备份复原形式次要分为三种sql转储,文件系统级别备份,间断归档和工夫点复原,每种备份复原形式都有其优缺点,实现形式都不太一样。 测试数据库搭建新建compose.yaml文件 采纳postgres15版本 services: postgres: image: postgres:15-bullseye container_name: demo-postgres restart: always volumes: - demo-postgres-data:/var/lib/postgresql/data ports: - 127.0.0.1:5432:5432 environment: - POSTGRES_DB=demo - POSTGRES_USER=demo - POSTGRES_PASSWORD=demo-pass - TZ=Asia/Shanghaivolumes: demo-postgres-data: {}启动数据库 $ docker compose up -d创立数据库表 CREATE TABLE public.users ( id serial NOT NULL, "name" varchar(45) NOT NULL, age int4 NULL, "locked" bool NOT NULL DEFAULT false, created_at timestamp NOT NULL, CONSTRAINT users_pkey PRIMARY KEY (id));测试插入单条数据 INSERT INTO users (name, age, created_at) VALUES ('Jim', 18, NOW());测试批量写入数据 ...

November 24, 2022 · 7 min · jiezi

关于postgresql:分布式数据库Greenplum基本原理和使用

OLTP 联机事务处理 OLTP 联机事务处理, on-line transaction processing 强调数据库内存效率 ,强调内存各种指标的命令率 ,强调绑定变量, 强调并发操作 数据在零碎中产生 ,对响应工夫要求十分高, 用户数量十分宏大,次要是操作人员,数据库的各种操作次要基于索引进行。 OLAP 联机剖析解决OLAP 联机剖析解决 ,On-Line Analytical Processing 强调数据分析 强调SQL执行, 强调磁盘I/O 强调分等。基于数据仓库的信息剖析处理过程,是数据仓库的用户接口局部 响应工夫与具体查问有很大关系, 用户数量绝对较小,其用户次要是业务人员与管理人员, 因为业务问题不固定,数据库的各种操作不能齐全基于索引进行。 Postgresql特点1、纯收费无风险开源产品(BSD协定) 2、诞生于大学 3、关系型数据库,满足ACID4、亲热ORACLE,在LINUX下是过程模型 简略的阐明1、MySQL 的 slogon 是最风行的关系型数据库;Postgresql 的 slogon 是最先进的关系型数据库 2、ACID 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) Greenplum的入库动作须要存储的数据在进入数据库时的动作:1、 将先进行数据分布的解决工作,将一个表中的数据均匀散布到每个节点上2、为每个表指定一个散发列(distribute Column),之后便依据Hash来散布数据。Greenplum这样解决能够充分发挥每个节点处I/O的解决能力。3、为了实现多个独立的 PostgreSQL实例的分工和单干,出现给用户一个逻辑的数据库,Greenplum在不同层面对数据存储、计算、通信和治理进行了分布式集群化解决 后果:Greenplum尽管是一个集群,然而对用户而言,它封装了所有分布式的细节,为用户提供了单个逻辑数据库。 Greenplum的组成部分Greenplum次要由Master节点、Segment节点、interconnect三大部分组成。Master 零碎的入口,承受客户端连贯及提交的SQL语句,将工作负载分发给其它数据库实例(segment实例),不寄存任何用户数据,只是对客户端进行访问控制和存储表散布逻辑的元数据Segment节点负责数据的存储,能够对散布键进行优化以充分利用Segment节点的io性能来扩大整集群的io性能 Segment:/greenplum/primary/gpseg0(gpseg1)) 是独立的PostgreSQL数据库,每个segment存储一部分数据。大部分查询处理都由segment实现,每个pg都有端口和过程,但为了保障平安,没有提供连贯形式Interconnect 负责不同PostgreSQL实例之间的通信。 散布键distributed的特点1、散布键是决定数据存储在哪个 segment 2、散布键必须是主键的一部分 3、散布键比拟正当的话,就在 segment 上均匀分布把IO压力均摊到各个 segment,防止数据歪斜。4、哈希散布是最罕用的数据分布形式。依据预约义的散布键计算用户数据的哈希值,而后把哈希值映射到某个segment 上。5、散布键能够蕴含多个字段 6、如果没有显式指定散布键,的据库服务器配置参数 gp_create_table_random_default_distribution管制表的散布策略,应用PRIMARY KEY(如果表有主键)或者表的第一个列作为散布键的哈希散布策略。 MySQL和Greenplum的语法比拟 1、MySQL个别会将数据合法性验证交给客户,PostgreSQL在合法性难方面做得比拟严格。比方MySQL里插入 “2012-02-30” 这个工夫时,会胜利,但后果会是 “0000-00-00”;PostgreSQL不容许插入此值2、MySQL 里须要 utf8mb4 能力显示 emoji 的坑, PostgreSQL 没这个坑。3、新老数据一起寄存,须要定时触发VACUUM,会带来多余的IO和数据库对象加锁开销, 引起数据库整体的并发能力降落。而且VACUUM清理不及时,还可能会引发数据收缩。 ...

November 24, 2022 · 1 min · jiezi

关于postgresql:PostgresqlVACUUM-垃圾回收

#Postgersql 介绍原始英文文档:PostgreSQL: Documentation: 15: VACUUM 对应的中文文档:VACUUM (postgres.cn),根本都是机翻倡议对照学习不会迷茫。 官网只用了一句话介绍VACUUM: garbage-collect and optionally analyze a databaseVACUUM能够认为手动触发Postgresql 垃圾回收的原始命令,须要留神查阅的文档版本为:PostgreSql 14。 比VACUUM更为重要的是AUTO_VACUUM,放到本文最初探讨,当然VACUUM是底层实现。为什么叫VACUUM?介绍干燥的文档内容之前,集体先猜想一波起名垃圾回收为VACUUM的起因: 因为VACUUM机制失常参数下只会把死元组的空间重用,不会把申请的空间归还给操作系统,所以相似抽真空的感觉。如果是VACUUM FULL,此时会把空间重用并且把空间还给操作系统,这时候的抽真空又像是把一块空间整个“剥离”进来。当然以上纯属集体瞎扯,也有可能是这个名字对于开发者来说会感觉很COOL。 相干语法VACUUM [ ( _`option`_ [, ...] ) ] [ _`table_and_columns`_ [, ...] ]VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ _`table_and_columns`_ [, ...] ]where _`option`_ can be one of: FULL [ _`boolean`_ ] FREEZE [ _`boolean`_ ] VERBOSE [ _`boolean`_ ] ANALYZE [ _`boolean`_ ] DISABLE_PAGE_SKIPPING [ _`boolean`_ ] SKIP_LOCKED [ _`boolean`_ ] INDEX_CLEANUP { AUTO | ON | OFF } PROCESS_TOAST [ _`boolean`_ ] TRUNCATE [ _`boolean`_ ] PARALLEL _`integer`_and _`table_and_columns`_ is: _`table_name`_ [ ( _`column_name`_ [, ...] ) ]留神这种圆括号的用法是官网举荐的,如果要批改参数,就须要用圆括号否则会报错无奈通过。 ...

November 18, 2022 · 10 min · jiezi

关于postgresql:pgbackrest-实践

装置postgres,理论环境已装置可跳过,参考官网装置sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -sudo apt-get update# 抉择装置版本,这里默认14.5sudo apt-get -y install postgresql-14 装置pgbackRestmkdir -p /buildwget -q -O - https://ghproxy.com/https://github.com/pgbackrest/pgbackrest/archive/release/2.41.tar.gz | tar zx -C /buildsudo apt-get -y install make gcc libpq-dev libssl-dev libxml2-dev pkg-config liblz4-dev libzstd-dev libbz2-dev libz-dev libyaml-devcd /build/pgbackrest-release-2.41/src && ./configure && makesudo cp pgbackrest /usr/binsudo chmod 755 /usr/bin/pgbackrest创立配置文件sudo mkdir -p -m 770 /var/log/pgbackrestsudo chown postgres:postgres /var/log/pgbackrestsudo mkdir -p /etc/pgbackrestsudo mkdir -p /etc/pgbackrest/conf.dsudo touch /etc/pgbackrest/pgbackrest.confsudo chmod 640 /etc/pgbackrest/pgbackrest.confsudo chown postgres:postgres /etc/pgbackrest/pgbackrest.confsudo mkdir -p /var/lib/pgbackrestsudo chmod 750 /var/lib/pgbackrestsudo chown postgres:postgres /var/lib/pgbackrest# 写入配置文件cat << EOF > /etc/pgbackrest/pgbackrest.conf[postgres]pg1-path=/var/lib/postgresql/14/main[global]repo1-path=/var/lib/pgbackrestrepo1-retention-full=2repo1-cipher-pass=Dpy3iBVyfoAsDH+OQyApvpNT5ijs3jPI3fuVgTRKKbckN9HZe74ObGtsdkrhaa7Trepo1-cipher-type=aes-256-cbcprocess-max=3[global:archive-push]compress-level=3EOF批改postgres 配置文件sed -i "s/#archive_mode = off/archive_mode = on/g" /etc/postgresql/14/main/postgresql.confsed -i "s/#archive_command = ''/archive_command = 'pgbackrest --stanza=postgres archive-push %p'/g" /etc/postgresql/14/main/postgresql.confsed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/14/main/postgresql.confsed -i "s/#max_wal_senders = 10/max_wal_senders = 3/g" /etc/postgresql/14/main/postgresql.conf容许近程登录(可选)echo "host all all 0.0.0.0/0 scram-sha-256" >> /etc/postgresql/14/main/pg_hba.conf 批改明码(可选)sudo -u postgres psql << EOF ALTER USER postgres WITH PASSWORD 'postgres';EOF创立stanzasudo -u postgres pgbackrest --stanza=postgres --log-level-console=info stanza-create查看stanzasudo -u postgres pgbackrest --stanza=postgres --log-level-console=info check重启postgressudo -u postgres /usr/lib/postgresql/14/bin/pg_ctl -D /var/lib/postgresql/14/main/ restart以上步骤就实现pgbackrest 的根本设置了全量备份sudo -u postgres pgbackrest --stanza=postgres --log-level-console=info backup增量备份sudo -u postgres pgbackrest --stanza=postgres type=incr --log-level-console=info backup差别备份sudo -u postgres pgbackrest --stanza=postgres type=diff --log-level-console=info backup执行还原执行还原前须要先停掉postgressudo -u postgres /usr/lib/postgresql/14/bin/pg_ctl -D /var/lib/postgresql/14/main/ stoppgbackrest --stanza=postgres --log-level-console=info --delta restore

October 27, 2022 · 1 min · jiezi

关于postgresql:应云而生的云数据库让数据从江河到大海

随着信息技术的倒退,互联网利用的减速遍及,人类进入了数字经济时代。进入二十一世纪当前,随着挪动互联网技术、物联网技术、5G等技术的倒退,寰球数据(Global Datasphere )呈指数级递增,IDC预测寰球数据将于2025年增长至175ZB,而中国的数据圈无望于2025年爆炸式增长为世界第一。数据被称为数字经济时代的“石油”,如同石油驱动了工业化时代的提高,大数据将推动智能化与数字化时代的倒退。为了开掘数据的价值,企业面临着海量数据的存储与剖析需要,业务也面临着更多热点及突发流量所带来的挑战。面对数据计算(Data Computing)的微小诉求、数据组织的运行老本的急剧减少、数据格式的丰盛多样,企业的数字化转型面临微小挑战,急需一款数据库产品,帮忙其最大化利用数据资产,降本增效,进行更智能高效的数据计算。 早在2019年,Gartner便做出预测:数据库市场的将来在云上。在2022年首次公布的《数据库中国市场指南》(Market Guide for DBMS,China)中,Gartner再次指出,中国数据库行业将减速增长并逐渐向云端迁徙,将来四年,中国数据库行业向私有云迁徙的速度将超过寰球平均水平。2020 年数据显示,云数据库已占据整体数据库市场份额的40%,2022年云数据库营收数据将占据数据库整体市场的半数以上。OpenPie认为计算技术目前经验了三代平台: ①大型机时代;②PC机时代; ③云计算时代。每一代计算平台的变更,都带来了数据计算技术的突破性翻新的可能性。随着计算技术从大型机时代改革为PC机时代,PC机逐步取代大型机,极大地升高计算门槛,计算资源日渐丰盛,数据计算技术突破性翻新。随着云计算时代的到来,不仅使得计算成本极大地升高,也提供了有限丰盛的计算资源,开释出数据计算产生智能的更多机会。 自20世纪50年代中期以来,数据管理技术经验了人工治理阶段、文件系统治理阶段,最终随着硬件技术的晋升、价格的降落,数据管理技术进入了数据库系统阶段。数据库系统解决了数据管理的复杂性,很好的撑持了业务零碎(如CRM、ERP、BI、报表和可视化零碎)和专用的业务零碎(如电商的举荐零碎、银行的客户画像)等;解放了开发人员,使他们可能更好地专一于业务逻辑上。 很多受欢迎的数据库系统均为分布式数据库,而典型的传统分布式数据库系统大多是MPP(大规模并行计算)架构。MPP架构的数据库以PC服务器为单位,通过如下图所示的组群形式来扩大存储和计算。假如一个宽表有3亿条记录,MPP数据库会尝试在每台PC服务器的硬盘上散布1亿条记录。数据计算时,所有机器同时并行计算,实践上最高能够把计算工夫升高到单机部署的1/n(n为机器数量),节俭了海量数据的解决工夫。 然而,随着数据量的一直攀升,企业对数据库的要求也越来越高,在应用过程中,传统数据库解决方案迎来了一系列的瓶颈:  随着数据量和计算能力的爆发式增长,云计算技术的迅猛发展,云原生时代应运而生。云原生时代,越来越多的企业将利用向云上迁徙,而越来越多的数据也流向云上。私有云带来了泛滥劣势:  这些劣势使云原生数据库得以升高计算成本,提供有限丰盛的计算资源,实现分钟级的伸缩性和真正的高可用,开释出数据计算产生更多智能的机会。 以下是云原生时代数字企业的典型应用场景: 面对这些一直变动的业务需要和计算工作,企业产生了更高的需要:  充沛联合云计算、大规模并行处理技术的云原生数据库应运而生,云原生数据库帮忙企业解脱了PC架构的限度,满足云原生数字时代需要,成为更好的抉择。绝对于传统数据仓库,云原生数据库的劣势也是不言而喻的: 传统数据仓库的计算和存储是严密耦合的,计算资源和存储资源按某一比例强绑定,为了确保查问后果的正确性,每个计算节点都需参加每条查问的执行中,在扩容、运维、迁徙上都存在肯定的挑战。企业业务倒退的不确定性,导致大数据系统无奈及时剖析业务数据,错失了充沛开掘数据价值所带来的商业机会。 云原生数据库计算和存储拆散,防止了资源的节约。企业可依据对资源的需要,灵便地以低成本和高效的形式,独自地进行存储或计算资源的弹性扩大,进步了资源的利用率,节俭空间老本和能耗开销。  传统数据仓库往往须要微小的人力投入进行数据库的装置和调试,云原生数据库的“即开即用”个性为企业节俭了大量运维开销。因为计算节点部署于云端,解脱了物理限度和潜在的提早,可随时随地通过互联网轻松治理,无需任何硬件。数据随时随地可用,无需解决任何后端技术问题,为企业进行跨部门、跨区域的数据共享和合作开拓了捷径,保障了企业的全球化过程。  传统数据仓库将文件和资源存储在同一主机中,以主备节点数据形式弥补节点宕机工夫,重大影响数据时效性,减少了运维的老本和难度。云原生数据库具备用户无感知的”真正”的高可用性能,具备故障主动单点切换,自动化容灾与高可用能力,防止了单点失败对业务的影响,保障了数据的平安。当业务有降级或更换服务需要时,可对节点进行不中断服务的逐步降级。  传统数据库的黑箱状态,导致企业无奈及时处理扩容、节点故障等问题。而云原生数据库部署在云上,具备了云计算所带来的麻利、高效个性,兼具高弹性和高性能,能够轻松应答PB级海量数据,服务之间相互独立,从而对利用或服务提供了更多层的平安爱护,也实现了更多的容错服务。其高度自动化的运维工具反对业务利用更加频繁地更新,赋予企业更弱小的麻利迭代能力。得益于云原生数据库的存算拆散,企业可灵便进行扩缩容,从而也具备了弱小的可迁移性。  传统数据库价格昂扬的软硬件导致微小的后期投入。云计算为云原生数据库提供了近乎有限的低成本存储空间,升高了传统数据库机房布局、服务器洽购等投入老本,打消了企业的管理负担。得益于云原生数据库按需付费的订阅模式和动静扩大能力,企业可依据本人对资源的需要进行扩大,防止了资源的节约,相比于传统数据库,具备更高的性价比。 OpenPie 以“Data Computing for New Discoveries”「数据计算,只为新发现」为使命,秉承 "Big Data Promises finally Come True"「最终实现大数据愿景」的产品理念,推出的云原生数据库PieCoudDB。PieCloudDB在从新打造PostgreSQL 12.X实现存算拆散的同时,也发明了全新eMPP ( elastic Massive Parallel Processing,弹性大规模并行计算 ) 分布式技术,构建以云原生、剖析型分布式数据库为内核的全新数据计算平台,旨在为企业提供蕴含实时处理、弹性扩容、弹性计算、集成数据分析等弱小性能的云上数据存储和计算引擎,助力企业实现数据价值最大化,打造高质量倒退新劣势,并在新基建中承当牢靠和可控的云数据库底座。 基于云计算架构的PieCloudDB的eMPP(Elastic MPP)弹性并行计算,完满解决了基于PC的传统数据库的缺点,且具备了云原生数据库的上述所有劣势。PieCloudDB云原生数据库计算和存储拆散,存储和计算作为两个独立变量,能够在云端进行独立的弹性伸缩,防止了资源的节约。企业可依据业务对资源的需要,灵便地以低成本和高效的形式,独自地进行存储或计算资源的弹性扩大,进步了资源的利用率,节俭空间老本和能耗开销。 更让人兴奋的是,PieCloudDB容许用户使用云中数据同时开启多个集群进行数据计算。假如航空公司的订票零碎曾经开启一个3节点的集群对数据进行剖析,他们的会员零碎能够再开启4个节点的集群对数据进行计算,依此类推,用户能够随时随地地开启任何数量节点的集群进行新利用的数据计算。在PieCloudDB中,用户能够继续将所有数据在云中存储,真正为已有的利用和将来的利用实现数据共享,从而帮忙用户真正实现大数据幻想 Big Data Promises finally Come True。云原生数据库PieCloudDB将于10月24日正式公布,更多产品性能将届时揭晓。欢送继续关注咱们的流动。

October 17, 2022 · 1 min · jiezi

关于postgresql:Navicat连接PostgreSQL失败解决方案

Navicat连贯PostgreSQL失败解决方案首先我的环境如下windows11Navicat16PostgreSQL15装置pgsql一切顺利,通过navicat16创立连贯并测试连贯胜利通过成果如下:个别不出意外的话就该出意外了,当我点击关上连贯出错了成果如下:通过这个sql咱们发现短少一个字段,那么咱们开始通过pgAdmin4客户端查问此表,看看此表都有哪些字段显著没有navicat提醒的查问sql中的这个字段,看网上有的说是版本问题。我的数据库,数据库连贯工具都是最新的,另外我通过DataGrip, pgAdmin4都能胜利连贯应用。我忽然就狐疑是不是navicat有bug,抱着试一试的心态下载了另一个客户端Navicat16 for PostgreSQL,果然术业有专攻,换了个业余的立马ok。我第一次接触pgsql,刚开始查看pgadmin默认的数据库postgres 看不到pg_databse,认为这个表不存在呢,白白浪费了几个小时不能因为业余就不去质疑他,心愿能帮忙到须要的人,节省时间。

October 14, 2022 · 1 min · jiezi

关于postgresql:国际推送-PostgreSQL-15-发布

2022年10月13日 - PostgreSQL寰球开发组明天发表PostgreSQL 15 正式公布, 这是世界上最先进的开源数据库的最新版本。 PostgreSQL 15 版本的公布次要侧重于性能晋升上,在治理本地和分布式部署中的工作负载方面成效显著,包含改良的排序功能。此版本通过增加风行的 MERGE 命令改善了开发人员的体验,并增加了更多用于监测数据库状态的能力。 PostgreSQL外围组成员Jonathan Katz示意:“PostgreSQL开发者社区继续构建那些改善开发人员体验,并简化那些反对高性能数据工作负载的性能, PostgreSQL 15 展现了如何通过开放式软件开发,为咱们的用户提供一个非常适合利用程序开发并保障其要害数据安全的数据库。” PostgreSQL 是一个翻新的数据管理系统,以其可靠性和健壮性著称,得益于寰球开发者社区 超过25年的开源开发,它已成为各种规模组织首选的开源关系型数据库。 排序及压缩性能晋升在这个最新版本中,PostgreSQL 改良了其内存和磁盘排序算法,基准测试显示,在对不同数据类型的排序时,速度可进步25%到400%不等 。应用 row_number()、rank()、dense_rank() 和 count() 作为窗口函数 在 PostgreSQL 15 中也有性能上的优化。应用 SELECT DISTINCT 的查问当初能够并行执行 。 基于之前PostgreSQL版本的异步近程查问性能,PostgreSQL内部数据包装器 ,postgres_fdw ,当初可反对异步提交。 PostgreSQL 15 的性能改良也扩大到了归档和备份工具。PostgreSQL 15 减少了对预写日志(WAL) 文件 LZ4和Zstandard (zstd)的压缩反对,这能够在肯定的工作负载下取得空间和性能上的改良。在一些操作系统上,PostgreSQL 15 减少了对WAL页面的预载反对以帮忙放慢复原工夫。PostgreSQL内置备份命令pg_basebackup ,当初反对服务器端的备份文件压缩,能够抉择gzip、LZ4和zstd格局。PostgreSQL 15 蕴含了应用自定义模块进行归档 的能力,从而缩小了应用 shell 命令的开销。 开发人员特色性能PostgreSQL 15 蕴含 SQL 规范的 MERGE 命令。MERGE容许用户编写蕴含 INSERT、UPDATE和DELETE操作的SQL语句。 最新版本减少了应用正则表达式的新函数 来查看字符串: regexp_count(), regexp_instr(), regexp_like(),和 regexp_substr()。PostgreSQL 15还扩大了 range_agg 函数来聚合上一个版本 引入的 multirange 数据类型 。 ...

October 14, 2022 · 1 min · jiezi

关于postgresql:postgresql配置参数优化

在应用postgresql过程当中如果并发比拟高,并且数据量也比拟大的时候须要对配置项做一些优化 理论的postgresql默认配置比拟激进,所以如果机器硬件配置还能够的话能够大幅度改变 优化配置项不同版本下的配置默认值是不一样的,具体以官网文档为准以下配置是pg14版本 max_connections默认值100容许的最大客户端连接数,通常能够配置上百上千个连贯,并发不是太高的话100够用了shared_buffers增大数据库内存应用效率设置数据库服务器将应用的共享内存缓冲区量,默认128MB决定有多少内存能够被PostgreSQL用于缓存数据举荐内存的1/4在磁盘IO压力很大的状况下,进步该值能够缩小磁盘IOwork_mem放慢查问排序默认4M设置在写入长期磁盘文件之前查问操作(例如排序或哈希表)可应用的根底最大内存容量ORDER BY、DISTINCT和归并连贯都要用到排序操作,哈希连贯、基于哈希的汇集以及基于哈希的IN子查询处理中都要用到哈希表, 使外部排序和一些简单的查问都在这个buffer中实现,有助进步排序等操作的速度,并且升高IO 这个参数和max_connections无关,如果100个查问并发,最坏状况下就很快就达到400M的内存应用, work_mem * max_connections须要小于内存,举荐乘积能够放弃在内存的1/2和3/4之间 effective_cache_size放慢查问默认4G,该配置不理论占用内存,优化器假如一个查问能够用的最大内存,激进举荐配置为物理内存的1/2,更加举荐配置为内存的3/4设置变大,优化器更偏向应用索引扫描而不是程序扫描max_wal_size防止频繁的进行检查点,缩小磁盘IO默认1Gwal全称是write ahead log,是postgresql中的online redo log,保证数据的一致性和事务的完整性在主动 WAL 检查点之间容许 WAL 增长到的最大尺寸中心思想是先写日志后写数据,即要保障对数据库文件的批改应放生在这些批改曾经写入到日志之后应用wal能够显著缩小磁盘写操作的数量,因为只须要将日志文件刷新到磁盘以确保提交事务,而不是事务更改的每个数据文件,日志文件是按程序写入的,因而同步日志的老本要比刷新数据页的成本低得多如果在数据库的日志当中看到告警如consider increasing the configuration parameter "max_wal_size",则的确须要增大该参数,在高负载状况下,日志很快就会达到1G,举荐把该参数配置为32G或者以上wal_buffers放慢数据更新操作默认4M配置wal应用的共享内存大小,能够改成1G配置形式批改数据库配置能够通过批改postgresql.conf文件或者批改启动命令等形式 批改文件形式在postgresql的docker容器当中 postgresql.conf的文件地位是/var/lib/postgresql/data/postgresql.conf,如果找不到能够执行如下命令搜寻一下 $ find / -name "postgresql.conf" 2>/dev/null在批改实现该配置文件之后间接挂载进去启动容器就行 批改启动命令形式该形式简略间接 比方批改最大连贯数量,配置启动命令为postgres -c max_connections=500即可 查看配置是否失效最终通过优化,批改pg的启动命令改为 $ postgres -c max_connections=500 -c shared_buffers=1GB -c work_mem=128MB -c max_wal_size=64GB -c wal_buffers=1GB进入到psql环境上面执行show命令验证 # show max_connections ; max_connections ----------------- 500(1 row)或者应用show all 查看所有配置 参考浏览postgres中文文档 postgresql服务器配置 PostgreSQL配置优化参数详解 PostgreSQL参数优化

October 10, 2022 · 1 min · jiezi

关于postgresql:tmp-dbg-parse-tree

psql -p 5691 -- STUDENT(学生编号,姓名,性别)create table STUDENT (sno INT primary key, sname VARCHAR(10), ssex INT);-- COURSE (课程编号,课程名,老师编号)create table COURSE (cno INT primary key, cname VARCHAR(10), tno INT);-- SCORE (学号, 课程编号,分数)create table SCORE (sno INT, cno INT, degree INT);-- TEACHER(老师编号,姓名,性别)create table TEACHER (tno INT primary key, tname VARCHAR(10), tsex INT);select sname from student;2022-09-27 13:45:43.027 UTC [24012] LOG: parse tree:2022-09-27 13:45:43.027 UTC [24012] DETAIL: {QUERY :commandType 1 :querySource 0 :canSetTag true :utilityStmt <> :resultRelation 0 :hasAggs false :hasWindowFuncs false :hasTargetSRFs false :hasSubLinks false :hasDistinctOn false :hasRecursive false :hasModifyingCTE false :hasForUpdate false :hasRowSecurity false :isReturn false :cteList <> :rtable ( {RTE :alias <> :eref {ALIAS :aliasname student :colnames ("sno" "sname" "ssex") } :rtekind 0 :relid 16568 :relkind r :rellockmode 1 :tablesample <> :lateral false :inh true :inFromCl true :requiredPerms 2 :checkAsUser 0 :selectedCols (b 9) :insertedCols (b) :updatedCols (b) :extraUpdatedCols (b) :securityQuals <> } ) :jointree {FROMEXPR :fromlist ( {RANGETBLREF :rtindex 1 } ) :quals <> } :targetList ( {TARGETENTRY :expr {VAR :varno 1 :varattno 2 :vartype 1043 :vartypmod 14 :varcollid 100 :varlevelsup 0 :varnosyn 1 :varattnosyn 2 :location 7 } :resno 1 :resname sname :ressortgroupref 0 :resorigtbl 16568 :resorigcol 2 :resjunk false } ) :override 0 :onConflict <> :returningList <> :groupClause <> :groupDistinct false :groupingSets <> :havingQual <> :windowClause <> :distinctClause <> :sortClause <> :limitOffset <> :limitCount <> :limitOption 0 :rowMarks <> :setOperations <> :constraintDeps <> :withCheckOptions <> :stmt_location 0 :stmt_len 25 }select * from student left join score on TRUE, (select * from teacher) as t, course, (values(1,1)) as NUM(x, y), generate_series(1,10) as GS(z);select sname, sno from student;2022-09-28 15:28:50.268 UTC [1214] LOG: statement: select sname, sno from student;2022-09-28 15:28:50.268 UTC [1214] LOG: rawtree haha tree:2022-09-28 15:28:50.268 UTC [1214] DETAIL: {RAWSTMT :stmt {SELECT :distinctClause <> :intoClause <> :targetList ( {RESTARGET :name <> :indirection <> :val {COLUMNREF :fields ("sname") :location 7 } :location 7 } {RESTARGET :name <> :indirection <> :val {COLUMNREF :fields ("sno") :location 14 } :location 14 } ) :fromClause ( {RANGEVAR :schemaname <> :relname student :inh true :relpersistence p :alias <> :location 23 } ) :whereClause <> :groupClause <> :groupDistinct false :havingClause <> :windowClause <> :valuesLists <> :sortClause <> :limitOffset <> :limitCount <> :limitOption 0 :lockingClause <> :withClause <> :op 0 :all false :larg <> :rarg <> } :stmt_location 0 :stmt_len 30 }2022-09-28 15:28:50.268 UTC [1214] STATEMENT: select sname, sno from student;2022-09-28 15:28:50.268 UTC [1214] LOG: parse tree:2022-09-28 15:28:50.268 UTC [1214] DETAIL: {QUERY :commandType 1 :querySource 0 :canSetTag true :utilityStmt <> :resultRelation 0 :hasAggs false :hasWindowFuncs false :hasTargetSRFs false :hasSubLinks false :hasDistinctOn false :hasRecursive false :hasModifyingCTE false :hasForUpdate false :hasRowSecurity false :isReturn false :cteList <> :rtable ( {RTE :alias <> :eref {ALIAS :aliasname student :colnames ("sno" "sname" "ssex") } :rtekind 0 :relid 16568 :relkind r :rellockmode 1 :tablesample <> :lateral false :inh true :inFromCl true :requiredPerms 2 :checkAsUser 0 :selectedCols (b 8 9) :insertedCols (b) :updatedCols (b) :extraUpdatedCols (b) :securityQuals <> } ) :jointree {FROMEXPR :fromlist ( {RANGETBLREF :rtindex 1 } ) :quals <> } :targetList ( {TARGETENTRY :expr {VAR :varno 1 :varattno 2 :vartype 1043 :vartypmod 14 :varcollid 100 :varlevelsup 0 :varnosyn 1 :varattnosyn 2 :location 7 } :resno 1 :resname sname :ressortgroupref 0 :resorigtbl 16568 :resorigcol 2 :resjunk false } {TARGETENTRY :expr {VAR :varno 1 :varattno 1 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnosyn 1 :varattnosyn 1 :location 14 } :resno 2 :resname sno :ressortgroupref 0 :resorigtbl 16568 :resorigcol 1 :resjunk false } ) :override 0 :onConflict <> :returningList <> :groupClause <> :groupDistinct false :groupingSets <> :havingQual <> :windowClause <> :distinctClause <> :sortClause <> :limitOffset <> :limitCount <> :limitOption 0 :rowMarks <> :setOperations <> :constraintDeps <> :withCheckOptions <> :stmt_location 0 :stmt_len 30 }2022-09-28 15:28:50.268 UTC [1214] STATEMENT: select sname, sno from student;2022-09-28 15:28:50.268 UTC [1214] LOG: rewritten parse tree:2022-09-28 15:28:50.268 UTC [1214] DETAIL: ( {QUERY :commandType 1 :querySource 0 :canSetTag true :utilityStmt <> :resultRelation 0 :hasAggs false :hasWindowFuncs false :hasTargetSRFs false :hasSubLinks false :hasDistinctOn false :hasRecursive false :hasModifyingCTE false :hasForUpdate false :hasRowSecurity false :isReturn false :cteList <> :rtable ( {RTE :alias <> :eref {ALIAS :aliasname student :colnames ("sno" "sname" "ssex") } :rtekind 0 :relid 16568 :relkind r :rellockmode 1 :tablesample <> :lateral false :inh true :inFromCl true :requiredPerms 2 :checkAsUser 0 :selectedCols (b 8 9) :insertedCols (b) :updatedCols (b) :extraUpdatedCols (b) :securityQuals <> } ) :jointree {FROMEXPR :fromlist ( {RANGETBLREF :rtindex 1 } ) :quals <> } :targetList ( {TARGETENTRY :expr {VAR :varno 1 :varattno 2 :vartype 1043 :vartypmod 14 :varcollid 100 :varlevelsup 0 :varnosyn 1 :varattnosyn 2 :location 7 } :resno 1 :resname sname :ressortgroupref 0 :resorigtbl 16568 :resorigcol 2 :resjunk false } {TARGETENTRY :expr {VAR :varno 1 :varattno 1 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnosyn 1 :varattnosyn 1 :location 14 } :resno 2 :resname sno :ressortgroupref 0 :resorigtbl 16568 :resorigcol 1 :resjunk false } ) :override 0 :onConflict <> :returningList <> :groupClause <> :groupDistinct false :groupingSets <> :havingQual <> :windowClause <> :distinctClause <> :sortClause <> :limitOffset <> :limitCount <> :limitOption 0 :rowMarks <> :setOperations <> :constraintDeps <> :withCheckOptions <> :stmt_location 0 :stmt_len 30 } )2022-09-28 15:28:50.268 UTC [1214] STATEMENT: select sname, sno from student;2022-09-28 15:28:50.268 UTC [1214] LOG: plan:2022-09-28 15:28:50.268 UTC [1214] DETAIL: {PLANNEDSTMT :commandType 1 :queryId 0 :hasReturning false :hasModifyingCTE false :canSetTag true :transientPlan false :dependsOnRole false :parallelModeNeeded false :jitFlags 0 :planTree {SEQSCAN :startup_cost 0.00 :total_cost 21.00 :plan_rows 1100 :plan_width 42 :parallel_aware false :parallel_safe true :async_capable false :plan_node_id 0 :targetlist ( {TARGETENTRY :expr {VAR :varno 1 :varattno 2 :vartype 1043 :vartypmod 14 :varcollid 100 :varlevelsup 0 :varnosyn 1 :varattnosyn 2 :location 7 } :resno 1 :resname sname :ressortgroupref 0 :resorigtbl 16568 :resorigcol 2 :resjunk false } {TARGETENTRY :expr {VAR :varno 1 :varattno 1 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnosyn 1 :varattnosyn 1 :location 14 } :resno 2 :resname sno :ressortgroupref 0 :resorigtbl 16568 :resorigcol 1 :resjunk false } ) :qual <> :lefttree <> :righttree <> :initPlan <> :extParam (b) :allParam (b) :scanrelid 1 } :rtable ( {RTE :alias <> :eref {ALIAS :aliasname student :colnames ("sno" "sname" "ssex") } :rtekind 0 :relid 16568 :relkind r :rellockmode 1 :tablesample <> :lateral false :inh false :inFromCl true :requiredPerms 2 :checkAsUser 0 :selectedCols (b 8 9) :insertedCols (b) :updatedCols (b) :extraUpdatedCols (b) :securityQuals <> } ) :resultRelations <> :appendRelations <> :subplans <> :rewindPlanIDs (b) :rowMarks <> :relationOids (o 16568) :invalItems <> :paramExecTypes <> :utilityStmt <> :stmt_location 0 :stmt_len 30 }

October 9, 2022 · 5 min · jiezi

关于postgresql:数据库向量化入门与实现

随着数据库软硬件技术的倒退,经典的 SQL 计算引擎逐步成为数据库系统的性能瓶颈,尤其是对于波及到大量计算的 OLAP 场景。 如何充分发挥底层硬件的能力,晋升数据库系统的性能,成为近年来数据库畛域的热门钻研方向,而向量化执行就是解决上述问题的一种无效伎俩,本文次要对向量化技术的原理及长处进行简略的介绍。 为什么数据库须要向量化? MPP数据库的API(Application Programming Interface)或者命令行接管到了SQL查问申请之后,零碎先通过查问解析,而后进行查问优化,通过任务调度执行从存储引擎外面把数据读取进去,计算出后果集,返回给客户。一个查问语句通过词法剖析、语法分析、语义查看后生成的后果叫做Query Tree,通过优化器之后的后果叫做Plan Tree。 传统数据库执行查问打算通常采纳火山模型的形式,流程如上图所示。 火山模型具备简略、直观、易用等长处,晚期数据库受限于硬件程度,IO、内存和CPU资源都十分低廉,火山模型可能极大缩减内存使用量,因此被各大厂商广泛采纳。 现在,随着硬件技术的一直倒退,火山模型的弊病也逐步凸显。这种形式存在重复性执行多、反序列化代价高、数据局部性差等缺点,而且一次执行仅解决一行数据,CPU破费大量工夫在遍历查问操作树上,同时也没有针对CPU的SIMD能力等个性做优化,从而造成查问执行效率低下的问题。据咱们在PostgreSQL上理论测试,对于select sum(a) from table这样的查问,火山模型在执行查问打算时,大部分工夫用于读取数据、对数据的反序列化、遍历执行树等操作上,用于理论SUM运算的工夫有余4%。 为了进一步晋升SQL计算引擎的性能,数据库执行器畛域呈现向量化和编译执行的新技术。这两种技术的呈现都是为了晋升性能,更精确地讲是为了晋升 CPU的运行性能。 编译执行是把简单运算编译成一个函数,反复调用失去后果。编译执行的长处是能够缩小分支判断,并使函数调用栈变浅。 向量化执行指的是将一次计算一条元组的模式,转换为一次计算多条元组的向量化计算。通过实现批量读取和解决,大大精简了函数调用开销,缩小了反复运算,减少了数据的局部性,进步了执行效率。 HashData向量化的实际 对于像HashData这样采纳云架构的数据仓库而言,向量化能够通过晋升单节点的执行能力,使整个集群的运算性能失去很大晋升。列存数据的高压缩比不仅节约了存储空间,同时在向量化运算过程中也有着人造的性能劣势。 HashData在实现向量化的过程中,引入了Apache 软件基金会开源我的项目Apache Arrow。Arrow 定义了规范的形式来示意可无效解决的内存数据,同时反对多种风行的编程语言中,包含 Java、C、C++ 和 Python等。 Apache Arrow的子项目Gandiva提供了编译执行向量化运算的可能,在利用于数据库表达式计算时,绝对于解释执行的向量化运算也有显著的性能劣势,然而因为百毫秒量级的编译工夫,不利于小数据量查问,因而须要在优化阶段依据数据情景决定是否应用。 为确保分布式数据库的底层数据的稳固传输,Arrow提供了基于gRPC的过程间通信Flight,其容许数据以Batch的模式同时进出服务器集群,让开发人员能够更轻松地创立可扩大的数据服务。 依据咱们在PostgreSQL单机测试的后果,在应用Arrow做向量化执行后,ORC数据格式+向量化,绝对于heap表加+行引擎,在最好的情景下能够取得30倍以上的数据性能晋升。 数据库的向量化不仅仅是数据存储和运算的向量化,还是一个微小的性能优化工程。将来,HashData会继续优化、欠缺向量化执行,晋升零碎性能,更好地满足客户业务需要。

September 30, 2022 · 1 min · jiezi

关于postgresql:培训动态-第3期PGCA浪潮K1-Power培训认证圆满结束

浪潮K1 Power 服务器全栈反对 PG 数据库,自 2008 年起,Power 服务器就是 EDB 的策略投资单干平台,POWER8/POWER9服务器可能施展出 EDB 的最佳性能。作为PostgreSQL数据库在服务器畛域生态交融的杰出代表,浪潮 K1 Power作为生态模块,被正式纳入PostgreSQL培训认证-PGCA高级课程体系当中。在9月份,组织进行了往年第3期“PGCA-浪潮K1 Power”培训认证训练营,总共有近百位学员线上参训。在培训环节,浪潮商用机器资深工程师冯健为大家讲述了课程常识要点,笼罩K1 Power倒退历史、特点与劣势、运行PostgreSQL实际、客户案例等常识模块。在认证考试环节,于9月24日组织进行了往年第3期PGCA-浪潮K1 Power培训认证考试,共有76位考生通过考核,他们将会取得生态模块技术能力证书(见下图)。 01理解更多技术资源福利分享1.PostgreSQL数据库优化参考二:硬件、操作系统优化。文章链接:https://pgfans.cn/a/19402.PG培训认证生态模块:浪潮K1 Power服务器(云计算)概念参考手册。材料链接:https://pgfans.cn/database/manua 02对于课程(一)课程名称:《PostgreSQL在K1 Power服务器上的利用实际》(二)培训时长:1课时(60分钟)(三)培训模式:直播/视频课程(四)培训费用:蕴含在PGCA内,不额外收费(五)面向人员:PGCA新报考学员或PGCA历史学员 03对于考试(一)考试模式:线上考核,对立在PG认证考试平台进行(二)考题数量:在PGCA考卷中纳入5道考题(4道单项选择题,1道多项选择题)(三)证书模式:提供纸质证书与电子证书(四)认证费用:蕴含在PGCA内,不额外收费(五)面向人员:限PGCA高级学员或PGCA历史学员 对于浪潮K1 Power浪潮K1 Power作为浪潮服务器家族的高端高价值系列,依靠于寰球顶尖的研发程度,充沛开释了国产高端服务器的高价值计算力,是面向要害外围利用,具备高可靠性、高性能、高平安和数据强一致性的算力保障。浪潮K1Power高端服务器全栈反对PG数据库,自2008年,Power服务器就是EDB的策略投资单干平台,以其高平安、高性能、高可靠性,数据强一致性的劣势,施展出EDB的最佳性能,晋升PostgreSQL的业务价值。浪潮K1 Power高端服务器是PostgreSQL最佳撑持平台。 对于中国PostgreSQL培训认证 中国PostgreSQL培训认证由中国PG分会联结中国电子工业标准化技术协会、业内出名培训机构独特打造,旨在为PsotgreSQL从业人员提供高效而间接的培训领导和技术等级认证。中国PostgreSQL培训认证自2019年7月在PostgresConf.CN技术大会上公布以来,已与全国十余家业余的培训机构建设了受权单干,累计培训学员和认证考生近4000人次。

September 27, 2022 · 1 min · jiezi

关于postgresql:PostgreSQL逻辑复制解密

在数字化时代的明天,咱们都认同数据会发明价值。为了最大化数据的价值,咱们不停的建设着数据迁徙的管道,从同构到异构,从关系型到非关系型,从云下到云上,从数仓到数据湖,试图在各种场景开掘数据的价值。而在这犬牙交错的数据网络中,逻辑复制扮演着及其重要的角色。 让咱们将视角从简单的网络拉回其中的一个端点,从PostgreSQL登程,对其逻辑复制的原理进行解密。 1 概念与原理逻辑复制,是基于复制标识复制数据及其变动的一种办法。区别于物理复制对页面操作的形容,逻辑复制是对事务及数据元组的一种形容。图-WAL数据流示例 如图所示,物理复制的数据流是对tablespace/database/filenode文件的块进行操作,而逻辑复制的内容是对元组进行形容。 接下来咱们来看逻辑复制中的几个概念: 复制槽 复制槽是记录复制状态的一组信息。因为WAL(预写式日志)文件在数据真正落盘后会删除,复制槽会避免过早清理逻辑复制解析所需的WAL日志。在逻辑复制中,每个插槽从单个数据库流式传输一系列更改,创立复制槽须要指定其应用的输入插件,同时创立复制槽时会提供一个快照。 输入插件 输入插件负责将WAL日志解码为可读的格局,罕用的插件用test_decoding(多用来测试),pgoutput(默认应用),wal2json(输入为json)。PostgreSQL定义了一系列回调函数,咱们除了应用上述插件,能够通过回调函数编写本人的输入插件。 图-复制槽数据流 复制协定与音讯 通过复制协定,咱们能够从源端获取WAL数据流。例如通过PSQL工具倡议复制连贯 psql "dbname=postgres replication=database" 开启流式传输WAL START_REPLICATION[ SLOT slot_name] [ PHYSICAL] XXX/XXX[ TIMELINE tli] 无论是物理复制,还是逻辑复制,应用PostgreSQL的公布订阅或者pg_basebackup搭建流复制,都是通过复制协定与定义的音讯进行交互(物理复制和逻辑复制数据流内容不同) 图- WAL数据流音讯类型 图-逻辑复制中的XLogData音讯 工作流程 当咱们理解了概念之后,来看一下整个解析的工作流程。因为WAL文件里一个事务的内容并不一定是间断的,所以须要通过Reorder后放在buffer中,依据事务ID组织成一条音讯,COMMIT后发送给输入插件,输入插件解析后将音讯流发送给指标端。 图-逻辑解析工作流程 2 问题与演进当咱们把握了逻辑复制的原理,打算应用其构建咱们的数据迁徙利用之前,咱们还有一些问题并没有解决。让咱们来一起看看是什么亟待解决的问题,以及咱们如何进行解决。 问题一:Failover slot 为了高可用性,数据库至多会存在一主一备的架构,当主库故障进行高可用切换时,备库却没有相应的复制槽信息,也就是短少failover slot。这是因为保留slot信息的物理文件,未同步至备库。那么咱们如何手动创立一个faliover slot呢? 主库创立复制槽,查看备库wal文件是否间断复制蕴含slot信息的物理文件至备库,在pg_repslot目录下备库重启,重启后才能够看到复制槽信息,起因是读取slot物理文件的函数StartupReplicationSlots只会在postmaster过程启动时调用。定期查问主库slot状态,应用pg_replication_slot_advance函数推动备库复制槽自此,咱们在备库上也有了相应的信息,手动实现了failover slot。PostgreSQL生态中驰名的高可用软件Patroni也是以这种形式进行了实现,区别只是在Patroni查问主库slot状态时将信息写入了DCS中,备库拿到DCS中的位点信息进行推动。 问题二:DDL同步 原生的逻辑复制不反对解析DDL语句,咱们能够应用事件触发器来进行解决。 应用事件触发器感知表构造变更,记录到DDL_RECORD表中,并将该表通过逻辑复制进行公布。接收端获取到该表的数据变更,即可解决为相应DDL语句进行执行。图-事件触发器实现DDL同步 问题三: 双向同步 当数据迁徙波及双向同步的管道时,例如想实现双主双写,对数据库同一对象进行操作,就会呈现WAL循环。 图-雷同表双向同步导致数据循环 局部DTS利用为了解决这个问题会创立辅助表,在事务中先对辅助表进行操作,通过解析到对辅助表的操作而得悉该记录是又DTS利用插入,从而过滤该事务,不再循环解析。PostgreSQL对事务提供了Origin记录,毋庸辅助表,通过pg_replication_origin_session_setup函数或者公布订阅中的replorigin_create即可指定Origin ID。 指定Origin ID后,咱们除了能够解析后通过DTS利用进行过滤,还也能够通过解析插件中的FilterByOriginCB回调函数在解析过程中过滤,这种形式缩小了数据传输,效率更高。 图-test_decoding中OriginFilter函数DEMO 其余问题: 除了以上三个问题,还有一些应用的问题或限度。这里列出了一些,不再开展,仅简要阐明。 Toast解决:对于toast值(音讯格局中能够判断),咱们在解决时个别应用占位符进行解决,接收端接管到占位符就不对这一列进行解决,尽管有些麻烦,但这也是在和传输toast值的计划中衡量的后果。 心跳表:因为复制槽记录的XMIN是全局的,当咱们公布的表始终没有更新时,XMIN没有推动导致WAL积压,咱们能够创立一张心跳表,周期性写入数据并公布,使XMIN进行推动。 大事务提早: 依据前文提到的工作流程咱们能够晓得默认事务在COMMIT后才会进行解析,这对于大事务来说势必会导致提早,PG14版本提供了streamin模式进行解析,即事务进行中进行解析并发送至接收端。 3 利用与实际前两节咱们从原理及问题的角度对PostgreSQL进行了解密,接下来咱们看如何通过咱们把握的逻辑复制原理,进行数据迁徙的利用与实际。 全量与增量同步 在实在的数据迁徙场景中,大部分都是全量和增量都要同步的场景,并且咱们买通了数据传输的通道后,也对这条通道的平安,效率,以及性能的扩大,例如荡涤,脱敏等ETL能力提出了新的要求。咱们先来看一下如果实现全量与增量的同步。 图-数据流向示意图 次要流程包含: 创立复制槽并导出快照依据快照进行全量数据迁徙依据复制槽进行增量数据的迁徙咱们应用了PG数据库或者音讯队列MQ作为数据代理,全量与增量解析能够同时进行,当全量数据处理结束后,状态机告诉增量处理程序进行增量公布。而对于代理中的数据,能够在解析后进行预处理。 自建实例迁徙上云实际 最初和大家分享一个自建实例迁徙上云的实际,该案例是将自建的PG10版本实例迁徙至京东云上的RDS PG 11版本,通过对增量数据的回流以及数据校验保障了数据安全与业务安稳切换。 ...

September 21, 2022 · 1 min · jiezi

关于postgresql:阿里云PolarDBX荣获2022-OSCAR-尖峰开源项目及开源社区奖

9月16日,OSCAR 2022 开源产业大会在京召开,会议由中国信息通信研究院、中国通信标准化协会主办,中国通信标准化协会云计算规范和开源推动委员会承办。此次会议以“千行百业 可信开源”为主题,邀请上百位专家大咖和国内支流的开源社区及成员单位共商开源倒退门路,共建开源产业生态,以推动开源技术在千行百业的交融倒退。 作为寰球数据库领导者,阿里云数据库动摇拥抱开源。此次亮相大会,旗下外围开源我的项目云原生分布式数据库PolarDB-X通过了信通院的 “可信开源我的项目评估,并以正式成员身份,退出中国信通院牵头组建的可信开源社区共同体。至此,阿里云数据库两大开源我的项目PolarDB for PostgreSQL(简称PolarDB-PG)和PolarDB-X均已通过评估,并成为可信开源社区共同体河汉打算成员。 为更好地推动开源技术在中国市场的落地,激励企业和厂商应用开源,激励企业或集体进一步摸索我国开源倒退模式,2022 OSCAR开源产业大会设立了“OSCAR开源尖峰案例”评比,旨在表彰优良开源案例,建立开源榜样。在“开源社区及开源我的项目”畛域中, PolarDB-X通过层层评比,凭借突出的技术创新能力和社区生态建设能力怀才不遇,取得“2022 OSCAR 尖峰开源我的项目及开源社区”奖项。 在“开源人物”畛域中,阿里云数据库于巍(花名漠雪) 凭借在云计算开源社区中做出过杰出贡献,取得“2022 OSCAR 尖峰开源人物”奖项。 PolarDB-X作为一款基于原生MySQL的云原生分布式数据库,高度兼容MySQL的协定和开源生态,引入Paxos多数派共识协定,聚焦国产化MySQL代替、分布式线性扩大、以及HTAP混合负载等场景。PolarDB-PG 100%兼容 PostgreSQL,采纳基于共享存储的存储计算拆散架构,具备极致弹性、毫秒级提早,反对 HTAP 的能力,还反对时空、GIS、图像、向量、搜寻、图谱等多模翻新个性,可应答企业对数据处理突飞猛进的需要。 依靠阿里云云原生数据库的技术创新能力, PolarDB深刻行业外围场景,继续围绕产品深耕、产教交融、生态拓展等多维度发展开源产业的摸索,凋敝开源产业生态。 在产品深耕上,PolarDB已作为规范云产品在世界范畴内的13个地区提供服务。PolarDB开源社区主导4个SIG组,参加11个SIG 组的技术共建,一直推动 PolarDB根底能力补齐和技术创新。 在产教交融单干上,通过施展阿里云在数字化产业端的技术劣势与实践经验,促成高校人才培养、师资队伍建设、实际条件建设、待业品质晋升等工作的协同倒退,造就撑持引领社会经济高质量倒退所需的高素质专门人才,通过学校被迫申报、专家评审委员会线下初评、终评等环节,阿里云评审选定教学内容和课程体系改革我的项目(3月批次)云原生分布式开源数据库“PolarDB-X”系列示范课程建设项目具体反对我的项目,并向社会公示。 在生态拓展上,PolarDB 开源社区与网易数帆、韵达、莲子数据、CUUG、DapuStor大普微、乘数科技、EMQ、龙蜥社区等合作伙伴开展深度单干,独特摸索数据库行业数字化、智慧化改革,为行业提供一站式全生命周期的解决方案,助力千行百业转型降级。 将来,PolarDB 仍会保持开源技术的翻新,将云原生分布式数据库的翻新技术与开源时代倒退深度交融,为行业提供更多的解决方案。同时,携手泛滥的合作伙伴,独特构建多元化、规模化的产业生态,充分发挥开源劣势,助力国家数字经济高速倒退,推动开源事业为世界带来更多美妙。

September 20, 2022 · 1 min · jiezi

关于postgresql:拥抱开放|OpenPie引领PostgreSQL中国代码贡献力

OpenPie拥抱凋谢,和PostgreSQL社区互为兄弟社区。PostgreSQL作为世界上最受欢迎的开源数据库之一,起源于加利福尼亚大学伯克利分校,其卓越的性能倍受宽广数据库用户的赞美,OpenPie始终沉闷于PostgreSQL社区,踊跃以各种模式参加社区的奉献中,引领PostgreSQL中国代码次要贡献力量,包含代码奉献、内容奉献、讲师演讲、参加PostgreSQL社区的线上线下流动等。 家喻户晓,PostgreSQL曾经成长为一款以其成熟稳固和功能强大著称的优良的单机开源数据库产品。依据 StackOverFlow 2022年的调研数据,PostgreSQL已超过MySQL,在三座“顶峰”同时登顶夺冠,成为了业余开发者最常应用的数据库、开发者最为青睐的数据库和开发者最想要用的数据库。 PostgreSQL寰球的Committer人数长期维持较少的数目(约20+人),寰球次要Contributor名单中,也很难见到国人的身影。 2021年PostgreSQL现状考察数据显示,85%的受访者从未为PostgreSQL代码库、文档或提交做过奉献,只有4%的受访者曾奉献过几次。而OpenPie的研发团队中,有泛滥工程师均参加过PostgreSQL的代码奉献,且奉献代码数量可观。 OpenPie “凋谢翻新”的企业文化吸引了泛滥酷爱技术、和开源文化的工程师的退出。 其中,多名共事在PostgreSQL 11、12、13、14以及行将公布的15版本中均有代码奉献。值得一提的是:2022年,OpenPie研发团队郭峰(Richard Guo) 参加奉献PostgreSQL代码已达23次,其中包含7个Review Commits,2个Report Commits,14个Author Commits。 除了PostgreSQL社区,OpenPie的多位研发工程师还在Clickhouse、Kubernetes、Spark等开源社区均很沉闷并屡次奉献过代码。这群拥抱凋谢、天才异禀的小伙伴集结在一起,为 OpenPie 的产品研发注入了强有力的力量。 OpenPie欢送大家一起交流经验!

September 8, 2022 · 1 min · jiezi

关于postgresql:培训动态-第2期PGCA浪潮K1-Power培训认证圆满结束

K1 Power 服务器全栈反对 PG 数据库,自 2008 年起,Power 服务器就是 EDB的策略投资单干平台,POWER8/POWER9服务器可能施展出 EDB 的最佳性能。作为PostgreSQL数据库在服务器畛域生态交融的杰出代表,浪潮 K1 Power作为生态模块,被正式纳入PostgreSQL培训认证-PGCA高级课程体系当中。 在8月份,组织进行了往年第2期“PGCA-浪潮K1 Power”培训认证训练营,总共有近百位学员线上参训。在培训环节,浪潮商用机器资深工程师冯健为大家讲述了课程常识要点,笼罩K1 Power倒退历史、特点与劣势、运行PostgreSQL实际、客户案例等常识模块。 在认证考试环节,于8月27日组织进行了往年第2期PGCA-浪潮K1 Power培训认证考试,共有79位考生通过考核,他们将会取得生态模块技术能力证书(见下图)。 理解更多技术资源福利分享1、PostgreSQL数据库优化参考二:硬件、操作系统优化。文章链接:https://pgfans.cn/a/19402.2、PG培训认证生态模块:浪潮K1 Power服务器(云计算)概念参考手册。材料链接:https://pgfans.cn/database/ma... 对于课程(一)课程名称:《PostgreSQL在K1 Power服务器上的利用实际》(二)培训时长:1课时(60分钟)(三)培训模式:直播/视频课程(四)培训费用:蕴含在PGCA内,不额外收费(五)面向人员:PGCA新报考学员或PGCA历史学员 对于考试(一)考试模式:线上考核,对立在PG认证考试平台进行(二)考题数量:在PGCA考卷中纳入5道考题(4道单项选择题,1道多项选择题)(三)证书模式:提供纸质证书与电子证书(四)认证费用:蕴含在PGCA内,不额外收费(五)面向人员:限PGCA高级学员或PGCA历史学员 对于浪潮K1 Power浪潮K1 Power作为浪潮服务器家族的高端高价值系列,依靠于寰球顶尖的研发程度,充沛开释了国产高端服务器的高价值计算力,是面向要害外围利用,具备高可靠性、高性能、高平安和数据强一致性的算力保障。浪潮K1 Power高端服务器全栈反对PG数据库,自2008年,Power服务器就是EDB的策略投资单干平台,以其高平安、高性能、高可靠性,数据强一致性的劣势,施展出EDB的最佳性能,晋升PostgreSQL的业务价值。浪潮K1Power高端服务器是PostgreSQL最佳撑持平台。 对于中国PostgreSQL培训认证中国 PostgreSQL培训认证由中国PG分会联结中国电子工业标准化技术协会、业内出名培训机构独特打造,旨在为PsotgreSQL从业人员提供高效而间接的培训领导和技术等级认证。中国PostgreSQL培训认证自2019年7月在PostgresConf.CN技术大会上公布以来,已与全国十余家业余的培训机构建设了受权单干,累计培训学员和认证考生近4000人次。

September 5, 2022 · 1 min · jiezi

关于postgresql:宏杉科技加入阿里云PolarDB开源数据库社区

宏杉科技签订阿里巴巴开源CLA(Contribution License Agreement, 奉献许可协定), 正式与阿里云PolarDB 开源数据库社区牵手。作为寰球数据库领导者,阿里云数据库动摇拥抱开源,多年来积极参与开源社区建设,为MySQL、PostgreSQL等社区做过多项奉献。2021年,阿里云把数据库开源作为重要策略方向,正式开源自研外围数据库产品PolarDB,助力开发者和客户通过开源版本疾速应用阿里云数据库产品技术,并参加到技术产品的迭代过程中来。 ▼2021年5月,阿里云率先开源PolarDB for PostgreSQL高可用版。▼2021年10月,在云栖大会上,阿里云进一步开源了云原生分布式数据库PolarDB-X和PolarDB for PostgreSQL共享存储版。▼2022年3月,开源 PolarDB for PostgreSQL 分布式版,包含数据库内核、相干插件、工具脚本、测试用例以及设计文档,实用于中大型企业外围业务场景。同时重磅降级了PolarDB for PostgreSQL基于共享存储架构的性能。▼2022年4月, PolarDB-X 开源版本升级到2.1版本,该版本也是第一次将 PolarDB-X 分布式数据库的产品作为企业级的分布式数据库真正部署到客户的生产环境应用。 通过将PolarDB的全面开源,阿里云心愿为用户、开发者和合作伙伴提供具备企业级个性的云原生数据库。也心愿吸引更多的贡献者,携手构建一个交融多元化技术的云原生数据库开源社区。此次,宏杉科技退出PolarDB开源社区,将施展在存储畛域的劣势,深度参加社区探讨,进一步深入与阿里云数据库开源单干,风雨同舟,携手更多行业搭档凋敝PolarDB生态。 对于宏杉科技 宏杉科技成立于2010年,总部位于杭州,在杭州和深圳设有双研发核心,在全国30个省、自治区、直辖市设有销售与服务机构。宏杉科技的旗下的存储平台曾经对接了数百种操作系统与主机环境, 包含各种 UNIX、Linux、Windows、服务器虚拟化环境,同时有大量数据库、应用软件的对接利用案例。凭借云原生部署、反对端到端NVMe over Fabrics,提供极致IOPS与超低时延,Mach系列存储特地适宜数据库场景的利用,提供稳固、高效的数据存储底座。

September 1, 2022 · 1 min · jiezi

关于postgresql:KunlunBase-10-发布了

所有中国人都晓得明天是一个非凡的日子,在这个非凡的日子,KunlunBase 第一个商用版本公布了! 通过KunlunBase团队2年多的辛勤的研发工作,咱们实现了KunlunBase(昆仑分布式数据库) 1.0版本全副布局的性能的研发和测试验证工作。当初KunlunBase 1.0 具备了咱们布局的全副性能,并达到了咱们业余的数据库系统研发团队所预期的商用级别的稳定性、可靠性和性能。 咱们自信的发表:KunlunBase 1.0 能够正式用于企业用户的生产零碎! KunlunBase 1.0具备了分布式数据库系统的所有根底性能,包含数据主动分片,程度弹性扩容,分布式事务处理,分布式查询处理,强一致性和高可用性,集群数据备份和一致性复原,以及图形化的集群治理和监控告警等等齐备的性能。 KunlunBase独具一格地反对MySQL和PostgreSQL两种连贯协定,这是目前任何其余竞品不具备的能力。KunlunBase原生反对PostgreSQL的SQL语法和PL/SQL,也反对MySQL公有的DML语法,因而应用PostgreSQL和MySQL的应用软件能够无需批改间接连贯到KunlunBase并失常工作。 明天首发的是 KunlunBase 1.0 企业版,社区版随后几天也会公布。对于KunlunBase的产品和技术文档、产品下载、客户案例等请拜访www.kunlunbase.com KunlunBase对客户的价值KunlunBase让用户应用软件齐全不必思考数据量快速增长,零碎拜访负载微小(十万QPS),数据量微小(比方若干TB乃至PB级别)时候利用零碎该如何存储、治理和利用这些海量数据及其拜访负载 ---- 架构师和利用开发者只有把海量数据存储管理和海量客户端连贯和拜访负载齐全交给KunlunBase,而后他们的利用零碎能够像应用单机部署的MySQL或者PostgreSQL那样应用KunlunBase即可。 DBA在零碎存储和数据拜访负载增大道肯定水平后,减少更多的计算机服务器给KunlunBase应用,KunlunBase就能够主动弹性扩容把这些新增的计算机服务器利用起来,从而增大KunlunBase集群的数据存储和拜访负载解决能力。这就大大降低了利用零碎的开发难度,让架构师和利用开发者聚焦利用零碎的设计和实现,把海量数据存储、治理、利用齐全交给KunlunBase来实现。 社会分工是古代社会之所以发达、高效和文化的底层逻辑。让业余的人做业余的事,能力一直晋升效率、可靠性,以及产品和服务的品质。这也是软件系统的设计和研发之道。置信KunlunBase 可能切切实实帮忙用户提质增效,升高人力和硬件老本,为用户继续发明价值! 在这个激动人心的时刻,我也想多谈一谈我对于IT零碎在社会社会生产生存中的作用、价值和将来倒退的浅显意识,或者能给一些读者带来点滴的启发,或者激发出一些读者的灵感和思维火花,达到抛砖引玉的作用。 软件定义世界当今的世界是一个信息技术逐渐深刻人类生存方方面面和各行各业的时代。 对于集体来说,感触曾经十分间接,当初的大多数中国人如果来到了手机,生存将举步维艰。手机外面装置的客户端只是各类商家的软件系统的冰山一角,而服务端才是微小的水下局部,这些软件让商家为用户提供越来越好的服务; 对于企业来说,软件是企业对其行业常识与运行规定的封装、表白和使用。企业运行越来越多的会由软件来驱动,实现信息化、数字化、智能化(三化),推动企业继续晋升效率降低成本。不仅是面对客户的局部简直齐全信息化了,即便是企业外部治理和运行,也大多由软件驱动了,并且当前还会更加的标准化;对于任何行业的古代企业,“三化”做的越好,其倒退情况也通常越好,并且发展潜力也越大,当初这应该是一个共识了,只是不同企业施行“三化”的能力、品质、水平不同,导致了成果不同。 对于政府来说,软件是对政府的治理规定和行政流程的实现和使用,也是晋升政府的行政效率和能力的要害动作。当初越来越多的行政服务能够由手机实现,不必去办事大厅了,这不便了所有人,晋升了政府行政的效率和所有人的满意度,其价值真的太大了。 对于企业和政府,充沛应用软件实现组织治理和业务运作,能够让治理更加扁平化,组织运行更加高效和精准,并且能够留存大量运行数据用于剖析商业决策或者政策的成果,取得及时精准全面的反馈,从而帮忙决策者和执行者疾速调整和应答,从而让企业取得竞争劣势,让各级政府更好的制订政策,执行政策。 将来人类各行各业运行都会更大程度地由软件来驱动、辅助:软件负责疏导、记录、展示、存储、剖析和推动各类人类流动,以便达到预约的指标。而人类则负责操作、应用这些软件,实现本人的岗位职责或者生存、满足本身的各种需要。 人类和计算机系统的关系正在变成这样:每个行业的从业者把本公司的生产、制作、洽购、研发、设计、治理、服务流程封装和实现到计算机软件中,而后公司各职能部门的员工通过应用其外部软件系统,提供产品和服务给用户、客户,而后继续经营、保护、调整这些软件系统,剖析运行、经营、售后服务的数据,调整经营、服务和倒退策略和资源分配。这个继续迭代的过程也是企业继续迭代和改良其信息系统和组件的过程。 在客户端每个人应用各行各业的软件的客户端取得本人须要的服务。这样国家和社会就运行在计算机系统之上了,全社会运行会更加高效,资源利用效率也会更加高效,而更高的效率为所有人带来更大的好处。 KunlunBase反对国产IT基础设施这几年国家给予IT基础设施各细分产业大量的资源和反对,让国产芯片、操作系统等取得了微小的倒退时机。KunlunBase目前曾经反对麒麟、UOS(统信)操作系统以及鲲鹏、龙芯、飞腾等国产芯片,并且会与更多的国产基础设施友商通力合作,构建中国版的齐备而且弱小的IT基础设施矩阵,助力国家经济倒退。 咱们深信在这个波澜壮阔的信息技术倒退潮流中,咱们KunlunBase团队可能继续发明更好的产品和服务,为咱们的客户继续发明价值! 点击浏览原文  举荐浏览 KunlunBase架构介绍KunlunBase技术劣势介绍KunlunBase技术特点介绍PostgreSQL vs MySQL TPC-H 测试Kunlun-Storage vs PostgreSQL OLTP 测试 END昆仑数据库是一个HTAP NewSQL分布式数据库管理系统,能够满足用户对海量关系数据的存储管理和利用的全方位需要。利用开发者和DBA的应用昆仑数据库的体验与单机MySQL和单机PostgreSQL简直完全相同,因为首先昆仑数据库反对PostgreSQL和MySQL双协定,反对规范SQL:2011的 DML 语法和性能以及PostgreSQL和MySQL对规范 SQL的扩大。同时,昆仑数据库集群反对程度弹性扩容,数据主动拆分,分布式事务处理和分布式查询处理,强壮的容错容灾能力,欠缺直观的监测剖析告警能力,集群数据备份和复原等 罕用的DBA 数据管理和操作。所有这些性能无需任何利用零碎侧的编码工作,也无需DBA人工染指,不停服不影响业务失常运行。昆仑数据库具备全面的OLAP 数据分析能力,通过了TPC-H和TPC-DS规范测试集,能够实时剖析最新的业务数据,帮忙用户发掘出数据的价值。昆仑数据库反对私有云和公有云环境的部署,能够与docker,k8s等云基础设施无缝合作,能够轻松搭建云数据库服务。请拜访 http://www.kunlunbase.com/ 获取更多信息并且下载昆仑数据库软件、文档和材料。KunlunBase我的项目已开源【GitHub:】https://github.com/zettadb【Gitee:】https://gitee.com/zettadb

August 2, 2022 · 1 min · jiezi

关于postgresql:苏州大学从-PostgreSQL-到-TDengine

小 T 导读:除了要对几千台摄像头进行数据采集加在线检测,苏州大学还有 1500 多台交换机和 4000 多台服务器,在数据库的抉择上,它须要在扛住如此大量设施 24 * 7 高频长期写入的同时,还要确保相当杰出的查问效率。从 PostgreSQL 到 TDengine,本文分享了江苏纵目在面对业务难点时,在数据库的抉择、利用和功效方面的教训。 企业简介苏州大学(Soochow University),简称“苏大”,坐落于漂亮的江苏省苏州市,是教育部与江苏省人民政府共建高校,国家“双一流”建设高校,国家“211 工程”、“2011 打算”首批入选高校,前身是 1900 年开办的东吴大学,是中国最早以古代大学学科体系举办的大学。 我的项目介绍作为一所重点高校,苏州大学具备规模较大的 IT 基础设施及利用零碎,资源压力大,网络故障波及用户数量多。为保障全校零碎以及网络、服务器硬件、操作系统的可用性、可靠性和安全性,学校必须建设标准且全面的运维管理体系。在此背景下,咱们江苏纵目与苏州大学与发展技术单干,打造了苏州大学智慧运维治理平台。 该业务场景面临着以下难点: 资源设施类型、品牌、版本繁冗,各厂商协定区别大,人员教训无奈全笼罩,原厂难以及时响应。业务利用、服务与资源的关联关系简单,问题定位工夫远超过解决问题的工夫。不足事先运维的无效工具,零碎网络异样会波及各部门/院系师生的教学工作的发展,被动解决负担重,导致业务部门投诉。 海量设施数据的存储和查问问题首当其冲对于这样一个规模较大的 IT 基础设施及利用零碎来说,解决问题自身并不难,难的是如何高效地解决小问题、迷信地预防大问题、迅速地定位问题的根本原因。就从监控数据层面来说,如果想对设施进行 24 * 7 不间断监控的话,那么海量的设施数据存储和查问对于 Database 的压力将会十分大。 苏州大学有几千台摄像头,光摄像头的数据采集加在线检测的数据量就曾经很大了,更别提还有 1500 多台交换机、4000 多台服务器,在数据库的抉择上,它须要在扛住如此大量设施 24 * 7 高频长期写入的同时,还要确保相当杰出的查问效率。 此前,咱们应用的是 PostgreSQL 数据库单机版,因为是关系型数据库(Relational Database),在该时序数据的场景下数达到亿级数据量时,查问剖析提早会达到大几秒,压缩率上也不太现实(后文会有理论比照),无奈撑起一个全域一体化运维监控平台的继续运行。 数据的存储与读写是所有业务的根基,因而数据库选型这个环节尤为重要。早在此前,咱们就针对此类业务对时序数据库(Time Series Database)做了充沛的调研与实测。其中 TDengine 作为一个专为物联网、车联网、工业互联网、运维监测等优化而设计的时序数据库,非常符合该场景。最终咱们抉择将 TDengine 集成到咱们自研且专用于监控时序数据的 Argus 平台中 https://zmops.com。 理论利用与成果剖析其实,从 2020 年开始,咱们就开始关注和接触 TDengine 了,很开心最终修成了正果,在应用 TDengine 对 Argus 平台进行全面降级后,不论是查问效率、剖析性能还是磁盘占用,都失去了质的晋升。 在将 TDengine 作为平台时序数据永恒存储之后,各项性能都合乎甚至超出了咱们的预期:脚到实际上,咱们是在一台 4C 16G 机械硬盘规格的服务器上落地了该我的项目,应用单列模型建表,针对每个数据类型的指标都创立一个子表,并用一个超级表来对立治理。以后,子表数量曾经达到四十多万张,轻松达成了数十万级指标的实时监控。 ...

August 2, 2022 · 1 min · jiezi

关于postgresql:postgresql-profiling

场景剖析postgresql BE的性能数据,适应于应用GCC编译的场景。 办法. 编译关上profiling选项 ./configure --enable-profiling. 执行$ psqlpostgres=# create table t1(id int);postgres=# insert into t1 values(1);postgres=# insert into t1 values(2);postgres=# \qpsql退出后,其对应的BE也随之退出。BE退出后产生相应的gmon.out文件,默认在数据目录的gprof/$PID目录下 data/dn6/gprof/26516/gmon.out. 转换将gmon.out转换成可读的格局 gprof ./install/bin/postgres ./data/dn6/gprof/26516/gmon.out > gp.out格局阐明. 第一局部各个函数的耗时排名。 column意义% time本函数耗时所占的比例self seconds本函数本身的耗时,循环,零碎调用,零碎库函数调用(如memset)等。留神,不蕴含其调用的子函数的耗时。Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls s/call s/call name 32.34 2.61 2.61 75262 0.00 0.00 handle_sync 11.15 3.51 0.90 109412 0.00 0.00 base_yyparse 4.71 3.89 0.38 2083921 0.00 0.00 SearchCatCacheInternal 4.58 4.26 0.37 2940109 0.00 0.00 core_yylex 4.21 4.60 0.34 13442073 0.00 0.00 AllocSetAlloc 2.73 4.82 0.22 1627890 0.00 0.00 hash_search_with_hash_value 2.60 5.03 0.21 4517373 0.00 0.00 MemoryContextAllocZeroAligned 1.24 5.13 0.10 1297178 0.00 0.00 hash_bytes. 第二局部各个函数的堆栈状况,依照函数耗时排名排列。这里的函数耗时,与第一局部不同,是蕴含其子函数的耗时的。 ...

July 27, 2022 · 1 min · jiezi

关于postgresql:盘口环境下搭建使用飞鸟Postgresql-远程源码基准信用网测试

在本文中,咱们将探讨盘口如何近程搭建出对 HAProxy 前面的 postgresql 集群进行基准测试。 SegmentFault用户【TG电报duotebb】版权所有,禁止转载。 在咱们开始之前,谈谈我在写这篇文章时设计的环境元素是很有用的。 1 adet HAProxy2 adet Etcd2 adet Postgresql-14 节点(2GB RAM,32GB 磁盘空间)首先,咱们能够谈谈如果咱们没有冗余构造,咱们如何进行基准测试。咱们对此只有一个要求,那就是postgresql-contrib包装。让咱们在装置了 Postgresql 的基于 debian 的服务器上设置咱们的依赖项,如下所示。 sudo apt install postgresql-contrib 有了这个包,pgbench命令就能够应用了。咱们能够像上面这样运行帮忙参数来查看它是否装置正确。 zeki@kubuntu21:~$ pgbench --helppgbench is a benchmarking tool for PostgreSQL.Usage: pgbench [OPTION]... [DBNAME]Initialization options: -i, --initialize invokes initialization mode -I, --init-steps=[dtgGvpf]+ (default "dtgvp") run selected initialization steps -F, --fillfactor=NUM set fill factor -n, --no-vacuum do not run VACUUM during initialization -q, --quiet quiet logging (one message each 5 seconds) -s, --scale=NUM scaling factor --foreign-keys create foreign key constraints between table.......在确保咱们的命令失常工作后,咱们就能够开始咱们的操作了。 ...

July 25, 2022 · 3 min · jiezi

关于postgresql:乘数科技云管控平台适配阿里云PolarDB共促云原生数据库生态繁荣

近日,乘数科技自主研发的云管控平台CLup(Cloud Union Platform)实现了与阿里云PolarDB的适配,反对PolarDB的部署、创立、切换、备份等性能,用户能够在CLup中以应用PostgreSQL数据库的感触一样无缝应用PolarDB。 PolarDB是阿里云自研的数据库产品家族,采纳存储计算拆散、软硬一体化设计,既领有分布式设计的低成本劣势,又具备集中式的易用性,可满足大规模利用场景需要。2021年,阿里云把数据库开源作为重要策略方向,正式开源自研外围数据库产品PolarDB,助力开发者和客户通过开源版本疾速应用阿里云数据库产品技术,并参加到技术产品的迭代过程中来。2021年5月,阿里云率先开源PolarDB for PostgreSQL分布式版,在10月的云栖大会上,阿里云进一步开源了云原生分布式数据库PolarDB-X和PolarDB for PostgreSQL共享存储版。2022年5月, PolarDB-X 开源版本升级到2.1版本,该版本也是第一次将 PolarDB-X 分布式数据库的产品作为企业级的分布式数据库真正部署到客户的生产环境应用。 中启乘数的CLup(Cloud Union Platform)是一套治理PostgreSQL、PolarDB数据库的云平台管理软件。企业在开始应用PostgreSQL或PolarDB数据库时,总是遇到一下这些问题: 如何不破费过多的精力就能领有一套能够实现有高可用爱护的数据库系统,即便数据库呈现问题,也能主动切换,无需DBA中午长期解决。如何对数据库进行监控告警,应答一些数据库的故障能够做到当时预警或及时告警。如何对数据库进行对立主动备份,且备份失败了能够发送告警,也能够一键复原数据库到指定的工夫点。如何疾速搭建一套数据库系统。如何疾速搭建现有数据库的备库或只读节点。如何疾速批改主备库的级连关系。如何实现容灾,当整个机房的网络中断,如何疾速复原业务。如何搭建一套性能可扩大的数据库系统。CLup基于解决这些问题而诞生。 CLup的亮点性能: 能够对几十套至上百套PostgreSQL或PolarDB数据库进行集中管理。同时也能够对PostgreSQL和PolarDB进行混合治理。能够一键创立PolarDB或PostgreSQL高可用集群,屏蔽繁琐的装置创立过程。跨机房容灾性能:CLup自身能够部署到三个机房中,当某个机房坏了之后,通过其它机房中的CLup依然治理整个数据库系统。PolarDB和PostgreSQL都能够跨机房部署。有web console的性能,能够通过web console登陆主机和数据库,便于执行命令行的工作。当产生故障切换导致原主库高可用降级,在机器复原后,对于各种简单状况下的原主库都能够作为备库一键加回集群,零碎会智能的判断各种简单状况,无需人为解决。能够不便搭建读写拆散性能的PolarDB和PostgreSQL集群。Clup适配 PolarDB后,让用户齐全像应用PostgreSQL数据库一样应用PolarDB,同时又能够享受到PolarDB的主备低提早、高性能等长处。CLup+PolarDB的联合,相当于解除用户应用数据库过程中的高可用、 监控、备份等等的后顾之忧。 数据库云化已成为大势所趋,乘数科技与PolarDB开源社区的单干,不仅是PolarDB开源社区对于中启乘数科技产品及服务的认可,更是中启乘数科技开始步入云数据库服务时代的重要开始。将来CLup将反对PolarDB更多更好的跨机房的容灾计划、通明的读写计划、高性能的大数据计划等等,在产品的易用性、实用性方面进行自主研发与翻新。与PolarDB开源社区合力打造国内的更欠缺的PolarDB云数据库生态,全力推动PolarDB在金融、电信、能源、教育、工业互联网等行业的利用。

July 21, 2022 · 1 min · jiezi

关于postgresql:紧跟PostgreSQL-14-现已发布IvorySQL-14

版本公布 | IvorySQL Release - 1.4IvorySQL寰球开发组始终保持与PostgreSQL最新版本内核同步,紧跟PostgreSQL 14现已公布IvorySQL 1.4。无关发行阐明,请参阅以下内容。最新稳固版本下载链接:https://github.com/IvorySQL/I... 发行日期:2022年6月28日 概述IvorySQL 1.4基于PostgreSQL 14.4并蕴含IvorySQL 1.3的问题修复。 此版本与IvorySQL 1.3兼容,并且不须要为运行 IvorySQL 1.X 的用户进行数据备份/复原。 它蕴含从14.3开始的各种修复,特地是修复了CREATE INDEX CONCURRENT 和REINDEX CONCURRENT,这可能会导致索引的无提醒数据损坏。在修复之前,CREATE INDEX CONCURRENT和REINDEX CONCURRENT能够构建短少条目标索引,导致应用该索引的 SELECT 查问找不到某些行。更多细节能够在14.4版本发行中找到。 如果您有任何应用 14.X 下的 CONCURRENTLY 选项创立的索引,您应该在更新后从新索引它们。请参阅 PostgreSQL 14.4 发行阐明的第一个变更条目。 无关PostgreSQL 14.4的更新和谬误修复,请参阅官网 PostgreSQL14.4 发行阐明。 https://www.postgresql.org/do... Bug修复修复了包权限问题问题具体阐明: https://github.com/IvorySQL/I... 奉献以下人员作为补丁的作者、提交者、审阅者、测试人员或问题报告者对这个版本做出了奉献。 Asif RehmanGrant ZhouShengbin ZhaoMuhammad Usama残缺的变更日志https://github.com/IvorySQL/I...

July 4, 2022 · 1 min · jiezi

关于postgresql:直播预告Greenplum磁盘配额管理工具Diskquota内部实现

Greenplum生态领有泛滥工具来帮忙用户更便捷的应用Greenplum,其中就包含Greenplum磁盘配额管理工具 Diskquota (https://github.com/greenplum-...)。Diskquota 能够帮忙Greenplum数据库管理员限度数据库中模式(schema)或角色(roles)应用的磁盘空间量。 本次分享将围绕 Diskquota 如何应用 launcher 过程和多个 worker 过程实现监控多个数据库, 如何增量收集表占用磁盘空间大小,以及如何拦挡超出限额的 query 来深刻理解 Diskquota 的外部实现,并将在流动分享 Diskquota 下一个版本的改良。 直播预报 ⏰流动工夫: 6月22日 19:30-20:30 流动模式: 线上直播 ♂如何参加: 扫描海报二维码一键预约 你将理解 △ Diskquota 介绍 △ Launcher 和 worker 架构 △ Diskquota 元数据表 △ schema/role 占用磁盘大小计算 △ Query 拦截 △ Diskquota下一个版本 点击文末“浏览原文”,获取Greenplum中文资源。https://cn.greenplum.org/

June 20, 2022 · 1 min · jiezi

关于postgresql:版本发布-IvorySQL-Release-13

最新稳固版本下载链接:https://github.com/IvorySQL/I...发行阐明发行日期: 2022年5月27日 概述IvorySQL 1.3基于PostgreSQL 14.3,蕴含IvorySQL 1.2的各种修复和新性能。无关次要1.0发行版新个性的信息,请参阅IvorySQL 1.0发行阐明。 https://www.ivorysql.org/zh-c... 这个版本与IvorySQL 1.2兼容,并且对于运行IvorySQL 1.X的用户不须要转储/复原。 然而,如果您在ltree类型的列上有任何GiST索引(由contrib/ltree扩大提供),您应该在更新到IovrySQL 1.3之后从新建设索引。 请参阅PostgreSQL 14.3发行阐明的第二个更改日志条目。https://www.postgresql.org/do... 对于PostgreSQL 14.3的更新和谬误修复,请参阅PostgreSQL 14.3官网公布阐明。 加强性能反对匿名块。匿名PL块是PL/iSQL中未命名的PL块。与命名块不同,匿名块不会保留在数据库服务器中,只用于一次性应用。问题具体阐明: https://github.com/IvorySQL/I... 问题修复修复了应用LEVEL伪列导致服务器解体的问题。问题具体阐明: https://github.com/IvorySQL/I... 修复了在Packages中应用扩大数据类型时引发谬误的问题。问题具体阐明: https://github.com/IvorySQL/I... 修复了一个问题,如果包是在pg_catalog命名空间中创立的(search_path的隐式局部),则调用没有构架限定的包对象会引发函数/过程未找到谬误。问题具体阐明: https://github.com/IvorySQL/I... 修复了NCHAR和NVARCHAR不反对nls_length_semantics的问题问题具体阐明: https://github.com/IvorySQL/I... 修复了DROP包注释未清理包体的问题。问题具体阐明: https://github.com/IvorySQL/I... 修复了在PL/iSQL中指定END标签时引发谬误的问题。问题具体阐明: https://github.com/IvorySQL/I... 贡献者以下人员作为补丁的作者、提交者、审阅者、测试人员或问题报告者对这个版本做出了奉献。 Asif RehmanGrant ZhouJack LanShengbin ZhaoMuhammad Usama原文链接:https://www.ivorysql.org/zh-C...

June 2, 2022 · 1 min · jiezi

关于postgresql:PostgreSQL-15-新特性解读-墨天轮优质文章合集

5月19日,PostgreSQL 寰球开发组发表 PostgreSQL 15 的第一个 beta 版本,这一新版本在开发者体验、性能体现等方面都有晋升。为了帮忙大家更疾速理解到PostgreSQL 15的新个性、性能迭代状况,墨天轮社区发动了【PostgreSQL 15 新版本尝鲜】征文活动,在这里为大家展现局部优质文章,让咱们一起通过实际疾速体验PostgreSQL 15吧! PostgreSQL 15新个性预览:版本兼容性PostgreSQL 15源码浅析(1)—— postgres中的1号数据库PostgreSQL 15源码浅析(2)—— psql新性能\dconfigPostgreSQL 15源码浅析(3)—— 信号"1"的使命PG15减速排序性能-译文PostgreSQL 15——SQL/JSON 构造函数-译文PostgreSQL 15来了(一)设置参数的区别-译文PostgreSQL 15来了(二)——系统目录差别-译文在Postgres15中减速sort的性能-译文PostgreSQL 15配置选项(pg8-pg15)-译文PostgreSQL 15:在逻辑复制的公布订阅中反对两阶段提交-译文PostgreSQL 15:实现对单个Schema中所有表的逻辑复制-译文PostgreSQL 15:列出与 GUC 关联的标记的新性能-译文PostgreSQL 15:并行服务器端备份压缩-译文PostgreSQL 15:将反对申请头增加到复制文本格式-译文PostgreSQL 15:引入 log_destination=jsonlog-译文PostgreSQL 15中 pg_basebackup 的新选项-译文如需浏览所有文章能够查看【PostgreSQL 15 版本尝鲜】合辑https://www.modb.pro/topic/406267,本合辑也在继续更新中,欢送大家关注。 在这里,咱们也诚邀热更多酷爱技术、乐于分享的敌人参加进来,公布PostgreSQL 15相干个性解读、性能体验和案例实际的原创或翻译文章,一起学习提高! 点击查看具体参加/处分规定https://www.modb.pro/db/405732。 查看更多精彩内容尽在墨天轮社区,围绕数据人的学习成长提供一站式的全面服务,打造集新闻资讯、在线问答、流动直播、在线课程、文档阅览、资源下载、常识分享及在线运维为一体的对立平台,继续促成数据畛域的常识流传和技术创新。 关注官网公众号: 墨天轮、 墨天轮平台、墨天轮成长营、数据库国产化 、数据库资讯

May 30, 2022 · 1 min · jiezi

关于postgresql:KunlunStorage-vs-PostgreSQL-OLTP-测试

一、Kunlun-Storage简介KunlunStorage是泽拓科技基于Percona-mysql-8.0.26优化的数据库存储服务器,作为KunlunDB分布式数据库的存储节点,咱们对percona-mysql做了大量性能加强,补足了其在XA事务处理的容灾和错误处理方面的空白,并减少了一些昆仑数据库集群整体须要的性能,包含fullsync复制,update/delete...returning语句等。 二、测试环境测试软件:sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3(AWS 云上环境) sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)(本地部署环境) 服务器配置:PostgreSQL和Kunlun-Storage各部署在一台:亚马逊i3.4xlarge(CPU 8cores 16 Threads,内存:122G,存储:2个1900 NVMe SSD)上(AWS 云上环境) PostgreSQL和Kunlun-Storage各部署同一台服务器上(CPU 16 cores 32 Threads, 内存: 64G,存储:1个 NVMe SSD)上(本地部署环境) 软件版本:Postgresql:PostgreSQL 14.2 onx86_64-pc-linux-gnu Kunlun-Storage:8.0.26-16-kunlun-storage 数据库参数配置:PostgreSQL: shared_buffers = 32768MBwal_level = replicafsync = on synchronous_commit = on wal_sync_method = fdatasync full_page_writes = on Kunlun-Storage: innodb_buffer_pool_size 32768MBinndo_flush_at_trx_commit=1sync_binlog=1innodb_use_fdatasync = 1测试背景:PostgreSQL和Kunlun-Storage采纳默认的装置配置,只调整了内存参数及上述几个参数,整个测试过程PostgreSQL和Kunlun-Storage没有任何优化行为。 三、测试数据测试软件: sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3(AWS 云上环境) sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)(本地部署环境) ...

May 10, 2022 · 2 min · jiezi

关于postgresql:GreenPlum数据库网络层Segment空闲后端进程IdleQE

QD(Query Dispatcher、查问调度器):Master 节点上负责解决用户查问申请的过程称为 QD(PostgreSQL 中称之为 Backend 过程)。 QD 收到用户发来的 SQL 申请后,进行解析、重写和优化,将优化后的并行打算分发给每个 segment 上执行,并将最终后果返回给用户。此外还负责整个 SQL 语句波及到的所有的QE过程间的通信管制和协调,譬如某个 QE 执行时呈现谬误时,QD 负责收集谬误详细信息,并勾销所有其余 QEs;如果 LIMIT n 语句曾经满足,则停止所有 QE 的执行等。QD 的入口是 exec_simple_query()。 QE(Query Executor、查问执行器):Segment 上负责执行 QD 散发来的查问工作的过程称为 QE。Segment 实例运行的也是一个 PostgreSQL,所以对于 QE 而言,QD 是一个 PostgreSQL 的客户端,它们之间通过 PostgreSQL 规范的libpq 协定进行通信。对于 QD 而言,QE 是负责执行其查问申请的PostgreSQL Backend过程。通常 QE 执行整个查问的一部分(称为 Slice)。QE 的入口是 exec_mpp_query()。 QD 和 QE 都是 PostgreSQL backend 过程,其执行逻辑十分类似。对于数据操作(DML)语句(数据定义语句的执行逻辑更简略),其外围执行逻辑由 ExecutorStart, ExecutorRun, ExecutorEnd 实现。 ExecutorStart 负责执行器的初始化和启动。Greenplum 通过 CdbDispatchPlan 把残缺的查问打算发送给每个 Gang 中的每个 QE 过程。Greenplum 有两种发送打算给 QE 的形式:1)异步形式,应用 libpq 的异步 API 以非阻塞形式发送查问打算给QE;2)同步多线程形式:应用 libpq 的同步 API,应用多个线程同时发送查问打算给 QE。GUC gp_connections_per_thread 管制应用线程数量,缺省值为0,示意采纳异步形式。Greenplum 从6.0开始去掉了异步形式。ExecutorRun 启动执行器,执行查问树中每个算子的代码,并以火山模型(volcano)格调返回后果元组给客户端。在 QD 上,ExecutorRun 调用 ExecutePlan 解决查问树,该查问树的最下端的节点是一个 Motion 算子。其对应的函数为 ExecMotion,该函数期待来自于各个 QE 的后果。QD 取得来自于 QE 的元组后,执行某些必要操作(譬如排序)而后返回给最终用户。ExecutorEnd 负责执行器的清理工作,包含查看后果,敞开 interconnect 连贯等。E上的ExecutorStart/ExecutorRun/ExecutorEnd函数和单节点的PostgreSQL代码逻辑相似。次要的区别在 QE 执行的是 Greenplum 分布式打算中的一个 slice,因此其查问树的根节点肯定是个 Motion 节点。其对应的执行函数为 ExecMotion,该算子从查问树下部取得元组,并依据 Motion 的类型发送给不同的接管方。低一级的 Gang 的QE把 Motion 节点的后果元组发送给上一级 Gang 的QE,最顶层 Gang 的 QE 的 Motion 会把后果元组发送给 QD。Motion 的 Flow 类型确定了数据传输的形式,有两种:播送和重散布。播送形式将数据发送给上一级 Gang的每一个 QE;重散布形式将数据依据重散布键计算其对应的QE解决节点,并发送给该 QE。 ...

May 6, 2022 · 3 min · jiezi

关于postgresql:直播预告Greenplum在运营商领域的HTAP实践

Greenplum作为领有HTAP能力的大数据平台,在各个领域利用宽泛,领有泛滥商业和开源用户。用户在享受Greenplum带来的性能晋升的同时,也或多或少遇到了一些艰难。 本次直播将对某运营商案例进行详细分析,着重介绍客户选型的思考,测试的过程及生产运维过程中遇到的一些问题及倡议,心愿能给大家带来一些启发。该案例次要业务为运营商的剖析业务,兼有局部TP的需要。 你将理解 · Greenplum HTAP架构特点介绍 · 我的项目整体规划及部署架构 · 客户选型及测试内容分享 · 新老零碎迁徙及数据校验 · 生产运维教训分享 点击文末“链接”,获取Greenplum中文资源。 https://cn.greenplum.org/

April 27, 2022 · 1 min · jiezi

关于postgresql:IvorySQL亮相于PostgresConf-SV-2022-硅谷Postgres大会

硅谷Postgres会议是西海岸最大的PG会议,也是美国乃至寰球Postgres年度重要会议之一,于2022年4月7日至8日(PDT)在美国加利福尼亚州圣何塞希尔顿酒店召开。作为面向寰球PostgreSQL技术专家、从业者、爱好者的年度技术交流活动,硅谷会议致力于会集和探讨对于人、Postgres和数据间的关系!会议与主办地硅谷一样极具容纳和偏心精力,这里会集了最优良的演讲者、听众和赞助商,所有人致力为寰球Postgres生态系统发明倒退机会。会议现场人数大略有200多人,是疫情以来汇集人数最多的一次线下会议。社区外围人员Bruce Momjian缺席,会议由PostgresConf,Joshua D.Drake, Jim Mlodgenski 等组织。来自中国、美国、加拿大、巴西、西班牙、德国、印度、巴基斯坦等多个国家的人员参加。瀚高北美研究院兼中国PostgreSQL分会国内参谋委员会秘书长Grant Zhou作为惟一中国代表,将携IvorySQL我的项目亮相本次会议。以下是由IvorySQL开源数据库社区为您带来的硅谷Postgres两日会议简报。 局部演讲嘉宾GRANT ZHOU–Highgo Software DirectorLee Roland–Heimdall Data Head of Productslan Pytlarz --Purdue University Lead Data ScientistChad Berkley–Timescale VP of Engineering 局部演讲议题IvorySQL–一个基于PostgreSQL的兼容Oracle的开源数据库 --by GRANT ZHOU 有很多用户须要将他们的应用程序从Oracle迁徙到开放源码的Postgres,然而为了反对新的数据库,用户常常须要从新开发应用程序,这很不不便。如果有一个基于Postgres的数据库,并且兼容大多数Oracle语法和函数,对客户来说就太不便了。然而官网的Postgres我的项目不承受这种代码提交。毕竟,Postgres是Postgres, Oracle是Oracle。因而,IvorySQL我的项目团队创立一个Oracle兼容的数据库。本演讲中介绍了如何基于PG实现与Oracle语法兼容的数据库,并介绍IvorySQL我的项目。这个我的项目是一个开源我的项目(Apache 2.0),由Highgo软件领导,目前曾经公布了基于PostgreSQL 14.2版本的IvorySQL 1.2。同时欢送大家为这个开源的偏重Oracle兼容性的数据库——IvorySQL做出奉献。 非关系型Postgres --by Bruce Momjian Postgres始终对关系存储提供弱小的反对。然而,在许多状况下,关系存储要么效率低下,要么限度适度。这个演讲展现了Postgres扩大到反对非关系存储的许多形式,特地是在一个数据库字段中存储和索引多个值(甚至是不相干的值)的能力。这种存储能够提高效率和拜访的简略性,还能够防止实体-属性-值(eav)存储的毛病。演讲涵盖多个字段多值存储的例子,包含数组、范畴类型、几何图形、全文搜寻、xml、json和记录。 数字势力和隐衷:21世纪的关注–by Andres Arrieta 30多年来,电子前沿基金会始终在爱护和争取咱们的公民自由。在这30年里产生了很多事件:咱们与互联网的关系从根本上产生了扭转,然而,在很多方面,咱们对互联网如何运作的了解依然停滞不前。现在,互联网曾经成为咱们生存中不可或缺的外围局部,咱们越来越依赖互联网。尽管咱们比以往任何时候都更容易接触到互联网提供的泛滥礼物,但决策者和执法机构对互联网如何运作的了解依然滞后。在此期间,电子前沿基金会及其使命曾经涵盖了技术带来的好或坏的许多方面,并帮忙爱护那些受其影响的人,同时确保一个光明的将来,通过翻新改善咱们的生存。Andres Arrieta向大家介绍了咱们的一些工作、一些关切的畛域以及Andres Arrieta认为将有助于咱们朝着更美妙的将来致力的一些事件。次要是对于数据隐衷和消费者权力的实践视角。探讨了隐衷的不同方面以及爱护个人隐私的选项。 逻辑复制的过来、当初和将来–by Amit Kapila 在这次演讲中,Amit Kapila讲述了逻辑复制在PostgreSQL中是如何倒退的。这将解释最近的一些最近的次要加强,比方促成两阶段和正在进行的大型事务的逻辑复制。并分享了Amit Kapila对如何利用该技术为大型企业构建高度可伸缩和可用的数据库解决方案的认识。在那之后,还探讨了在PostgreSQL将来版本中在这个技术畛域中探讨的一些重要加强。并且介绍如何加强这项技术,以便将数据从PostgreSQL迁徙到其余数据库。 古代原生云利用的传记–by Karthik Ranganathan 古代云原生应用程序过着令人兴奋的生存 - 从它们在云中诞生,到解决微小的计划外胜利,再到在云中断中幸存下来并解决寰球客户。在本次演讲中,Yugabyte 首席技术官 Karthik Ranganathan 从数据层的角度介绍了Yugabyte 如何解决双向表级复制和高可用性。 Aurora的亚马逊Babelfish–by chandra pathivada 当初奥罗拉的Babelfish曾经上市了。这个演示是对于Babelfish如何帮忙客户迁徙SQL Server工作负载到Postgres。在这个演示中,chandra pathivada演示了什么是Babelfish, Aurora的内部结构,应用Babelfish的SQL Server dba的Aurora,以及应用程序迁徙实验室。 ...

April 22, 2022 · 1 min · jiezi

关于postgresql:Greenplum-最新版本6203已正式发布

引言自Greenplum 6.0正式版公布以来,始终放弃每月一个小版本的迭代速率,继续为用户提供新性能和修复补丁,目前的最新版 6.20.3 已于2022年4月8日公布。此外,Greenplum泛滥商业组件也在一直迭代,致力于为用户提供更加欠缺的产品性能和更加舒服的用户体验。当初让咱们通过本文概览一下Greenplum内核及其重要组件的最新资讯。 青梅资讯内核更新 Greenplum 内核基于 PostgreSQL ,并针对大数据场景和用户需要开发了泛滥优良个性并作了极致优化。随着Greenplum 版本更新至 6.20,内核局部次要更新内容如下 Greenplum 6.20.0 引入了新的 contrib 模块gp_array_agg。 该模块为Greenplum数据库实现了一个并行的array_agg( )聚合函数。查问优化器(GPORCA)当初反对对蕴含堆分区和AO分区的分区表进行位图扫描。查问优化器(GPORCA)反对为有序聚合生成查问打算,从而进步查问性能。GPDB 反对平台更加丰盛,增加了对Redhat RHEL8版本的反对。平安方面的改良和晋升 Resource Group 资源组在按百分比调配CPU资源方面,将包含一个新模式。之前反对弹性模式,若零碎有空余资源,可动态分配。当初,除了现有的弹性模式,还反对强制模式,严格依照配置供应资源。无效满足了客户更丰盛的场景需要。 gp_parallel_retrieve_cursor(Beta) 并行检索cursor模块 用户能够应用它在Greenplum数据库主节点上创立一种非凡的cursor,并按须要或并行地间接从Greenplum segement 上检索查问后果。Greenplum将这种cursor称为并行检索cursor。 Greenplum 新增了对pg_trgm和btree_gin两个插件的默认反对 pg_trgm提供了基于三元组搜寻的文本类似度计算函数,以及相应的索引运算符。btree_gin为罕用数据类型实现了 GIN 索引运算符类。 GP2GP 性能 greenplum_fdw(Beta) greenplum_fdw模块是一个内部数据包装器(FDW),用户能够应用它在一个或多个Greenplum Database version 6.20+集群上运行查问。Greenplum Database greenplum_fdw模块是PostgreSQL postgres_fdw模块的MPP扩大。 通过新的greenplum_fdw (Beta)模块和gp_parallel_retrieve_cursor (Beta) 模块,可拜访存储在一个或多个内部Greenplum数据库集群中的数据,能够达到并行按需获取,能够实现跨集群cluster的并行和按需检索数据。 次要组件 Greenplum领有丰盛的生态组件来帮忙用户更好的应用Greenplum,次要组件更新内容如下: 1/GPCC GPCC(Greenplum Command Center)是Greenplum的商业版组件之一。作为Greenplum原生的图形化运维治理平台,GPCC基于全新的界面和用户体验,陆续推出了实时查问监控,历史数据收集,工作负载治理,邮件告警等性能,失去了泛滥商业用户的广泛应用和认可。GPCC将于近期公布最新版本6.7。 可反对的平台包含: Tanzu Greenplum Database 6.x.Red Hat Enterprise Linux 6.x 和 7.xCentOS 6.x 和 7.xUbuntu 18.04GPCC近期更新的次要性能包含: ...

April 18, 2022 · 1 min · jiezi

关于postgresql:DapuStor大普微电子加入PolarDB开源数据库社区

近日,DapuStor大普微电子签订阿里巴巴开源CLA(Contribution License Agreement, 奉献许可协定), 正式与阿里云PolarDB 开源数据库社区牵手。 作为寰球数据库领导者,阿里云数据库动摇拥抱开源,多年来积极参与开源社区建设,为MySQL、PostgreSQL等社区做过多项奉献。2021年,阿里云把数据库开源作为重要策略方向,正式开源自研外围数据库产品PolarDB,助力开发者和客户通过开源版本疾速应用阿里云数据库产品技术,并参加到技术产品的迭代过程中来。2021年5月,阿里云率先开源PolarDB for PostgreSQL分布式版,在10月的云栖大会上,阿里云进一步开源了云原生分布式数据库PolarDB-X和PolarDB for PostgreSQL共享存储版,聚合社区力量,凋敝云原生分布式数据库生态,服务宽广开发者,推动技术改革。 深圳大普微电子科技有限公司(DapuStor),是国内当先的SSD主控芯片设计和智能企业级SSD定制专家。 DapuStor作为国家级高新技术企业,很早就在业内提出存储“DPU”概念,以推动中国“存算一体”与“智能存储”产业倒退为己任。此次,退出PolarDB 开源数据库社区,大普微电子将与PolarDB开源我的项目放弃密切合作,在云原生分布式集群、全球化部署等诸多方向独特摸索,独特打造更优质的产品,提供更好的产品体验。将来,大普微电子心愿为PolarDB 开源数据库社区带来新的翻新能源,在晋升社区技术价值和产业影响力的同时,一起携手推动开源数据库生态建设,减速开源产业的有序成长。 PolarDB开源材料:PolarDB-X源码凋谢地址:计算层:https://github.com/apsaradb/G...存储层:https://github.com/apsaradb/G...PolarDB-for-PostgreSQL源码凋谢地址:https://github.com/alibaba/Po...

April 6, 2022 · 1 min · jiezi

关于postgresql:怎么进入wgcloud导入wgcloudPostgreSQLsql

用Navicat Premium导入

March 29, 2022 · 1 min · jiezi

关于postgresql:中国PostgreSQL培训认证推出浪潮K1-Power认证课程

随着PostgreSQL在国内重点行业利用速度迅猛晋升,对复合型技术人才的需求量将越来越大,这就要求常识遍及和传递能跟得上产品倒退和产业利用的节奏。因而,中国PG分会与浪潮商用机器有限公司围绕“K1 Power在PostgreSQL的承载与利用”,立足于PostgreSQL高级(PGCA)联合推出生态模块认证课程,并在近日实现课程上线以及首批认证考试。共计61人报名加入此次培训,其中59人通过认证。 提到Power处理器,大家首先的反馈可能就是它与AIX操作系统的绑定,其实浪潮K1 Power服务器还能够运行Linux操作系统。而Power服务器与PostgreSQL更堪称是渊远流长。自2008年起,Power服务器就是EDB的策略投资单干平台。 所有PGCA高级培训学员可通过所有受权培训机构报名加入K1 Power专项培训流动。培训课程对应PGCA高级的课程难度,笼罩K1 Power倒退历史、特点与劣势、运行PostgreSQL实际、客户案例等常识模块。 (一)课程名称:《浪潮K1 Power在PostgreSQL的承载与利用》 (二)培训时长:1课时(40分钟) (三)培训模式:视频课程 (四)培训费用:蕴含在PGCA内,不额外收费 (五)面向人员:限PGCA高级学员 通过中国PostgreSQL培训认证考试核心组织的认证考试后,开发者将取得由浪潮商用机器及中国PG分会联结颁发的能力认定证书,晋升集体待业竞争力。 (一)考试模式:线上考核,对立在PG认证考试平台进行 (二)考题数量:在PGCA考卷中纳入5道考题(4道单项选择题,1道多项选择题) (三)考题内容:与培训内容绝对应 (四)证书模式:提供纸质证书与电子证书 (五)认证费用:蕴含在PGCA内,不额外收费 (六)面向人员:限PGCA高级学员 对于浪潮K1 Power 浪潮K1 Power作为浪潮服务器家族的高端高价值系列,依靠于寰球顶尖的研发程度,充沛开释了国产高端服务器的高价值计算力,是面向要害外围利用,具备高可靠性、高性能、高平安和数据强一致性的算力保障。浪潮K1 Power高端服务器全栈反对PG数据库,自2008年,Power服务器就是EDB的策略投资单干平台,以其高平安、高性能、高可靠性,数据强一致性的劣势,施展出EDB的最佳性能,晋升PostgreSQL的业务价值。浪潮K1 Power高端服务器是PostgreSQL最佳撑持平台。 对于中国PostgreSQL培训认证 中国PostgreSQL培训认证由中国PG分会联结中国电子工业标准化技术协会、业内出名培训机构独特打造,旨在为PsotgreSQL从业人员提供高效而间接的培训领导和技术等级认证。中国PostgreSQL培训认证自2019年7月在PostgresConf.CN技术大会上公布以来,已与全国十余家业余的培训机构建设了受权单干,累计培训学员和认证考生近4000人次。

March 17, 2022 · 1 min · jiezi

关于postgresql:网易数帆Curve加入PolarDB开源数据库社区

Curve社区签订阿里巴巴开源CLA(Contribution License Agreement, 奉献许可协定), 正式与阿里云PolarDB 开源数据库社区牵手。 PolarDB for PostgreSQL 是阿里云自主研发的云原生数据库产品,并于2021年5月正式发表开源。在2022年3月2日的开源 PolarDB 企业级架构发布会上,阿里云对 PolarDB for PostgreSQL 的存储计算拆散等架构设计进行了全面解读。 100%兼容 PostgreSQL,采纳基于共享存储的存储计算拆散架构,具备极致弹性、毫秒级提早,反对 HTAP 的能力,还反对时空、GIS、图像、向量、搜寻、图谱等多模翻新个性,可应答企业对数据处理突飞猛进的需要。 1.极致弹性:存储与计算能力均可独立地横向扩大。○ 当计算能力不够时,能够独自扩大计算集群,数据无需复制。○ 当存储容量或 I/O 不够时,能够独自扩大存储集群,而不中断业务。2.毫秒级提早:○ WAL 日志存储在共享存储上,RW 到所有 RO 之间仅复制 WAL 的元数据。○ 独创的 LogIndex 技术,实现了 Lazy 回放和 Parallel 回放,实践上最大水平地放大了 RW 和 RO 节点间的提早。3.HTAP 能力:基于 Shared-Storage 的分布式并行执行框架,减速在 OLTP 场景下的 OLAP 查问。一套 OLTP 型的数据,可反对 2 套计算引擎:○ 单机执行引擎:解决高并发的 TP 型负载。○ 分布式执行引擎:解决大查问的 AP 型负载。 PolarDB for PostgreSQL 采纳基于共享存储(Shared-Storage)的存算拆散架构,以大幅晋升资源利用率与性能,实现疾速弹性应答突发业务负载的场景。作为 PolarDB 技术合作伙伴,Curve为基于Shared-Storage存算拆散架构的PolarDB for PostgreSQL云原生数据库提供高性能、稳固牢靠的分布式共享存储,独特推动开源云原生根底软件生态的凋敝倒退。 ...

March 16, 2022 · 1 min · jiezi

关于postgresql:详细解读阿里云数据库开源PolarDB总体架构和企业级特性

在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家严华带来了主题为《PolarDB HTAP详解》的精彩演讲。在PolarDB存储计算拆散架构的根底上,咱们研发了基于共享存储的MPP分布式执行引擎,解决了单条SQL执行时无奈利用其它节点计算资源、无奈施展共享存储池的IO大带宽的问题,同时提供了弹性计算,弹性扩大的保障,使得PolarDB初步具备了 HTAP 的能力。本议题次要介绍PolarDB HTAP的性能个性和关键技术。 直播回顾视频:https://developer.aliyun.com/...PDF下载: https://developer.aliyun.com/... 以下依据发布会演讲视频内容整顿:一、背景 很多PolarDB 的用户都有 TP 和 AP 共用的需要,他们白天应用 PolarDB解决高并发的 TP 申请,早晨 TP 流量降落、机器闲暇后持续应用 PolarDB 进行 AP 的报表剖析。然而,即便这样,仍然没有最大化利用闲暇机器资源。 因为原生的 PolarDB PG 零碎在解决简单的 AP 查问时会遇到两大挑战:首先,单个 SQL 在原生 PG 执行引擎下只能在单个节点上执行,无论是单机串行还是单机并行,都无奈利用其余节点的 CPU memory 等计算资源,只能纵向 Scale Up,不能横向 Scale Out ;其次,PolarDB 底层是存储池,实践上 IO 吞吐是无限大的。而单个 SQL 在原生 PG 执行引擎下只能在单个节点上执行,受限于单个节点的 CPU 和 memory 的瓶颈,无奈充分发挥存储侧大 IO 带宽的劣势。 为了解决用户理论应用中的痛点,PolarDB 决定做 HTAP。 以后业界HTAP的解决方案次要有以下三种: ① TP 和 AP 在存储计算上都拆散,可能实现TP和AP齐全隔离,互不影响。但理论应用中会存在一些问题。首先,TP的数据须要导入到AP零碎中,会存在肯定的提早,导致时效性不高;其次须要减少冗余的 AP 零碎,总成本也会减少;第三,减少了一套 AP 零碎后,运维难度也会减少。② TP 和 AP 在存储计算上都共享,这样能够做到老本最小化,资源利用最大化,但依然存在两点问题。首先,因为计算共享, AP 查问和 TP 查问同时运行时或多或少会存在相互影响;其次,当 AP 查问比重增大时,零碎须要扩计算节点存储,因而须要重散布,导致无奈疾速弹性Scale Out。③ TP 和 AP 在存储上共享,在计算上拆散。PolarDB 是存储计算拆散架构,因而人造反对此计划。二、原理 ...

March 15, 2022 · 3 min · jiezi

关于postgresql:PostgreSQL基于CentOS系统安装PostgreSQL数据库

一、参考链接阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 postgresql镜像-postgresql下载地址-postgresql装置教程-阿里巴巴开源镜像站 二、PostgreSQL介绍PostgreSQL是一种个性十分齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为根底的对象关系型数据库管理系统。POSTGRES的许多当先概念只是在比拟迟的时候才呈现在商业网站数据库中。PostgreSQL反对大部分的SQL规范并且提供了很多其余古代个性,如简单查问、外键、触发器、视图、事务完整性、多版本并发管制等。同样,PostgreSQL也能够用许多办法扩大,例如通过减少新的数据类型、函数、操作符、汇集函数、索引办法、过程语言等。另外,因为许可证的灵便,任何人都能够以任何目标收费应用、批改和散发PostgreSQL。(——PostgreSQL_百度百科)三、PostgreSQL装置<font color=red>本试验基于CentOS 7.9零碎进行演示操作</font> [root@postgresql ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)装置筹备批改主机名# hostnamectl set-hostname prostgresql敞开防火墙# systemctl stop firewalld# systemctl disable firewalld敞开SELinux平安模式# setenforce 0# getenforce 配置网络信息并测试连通性vim /etc/sysconfig/network-scripts/ifcfg-ens32次要批改如下参数信息即可。BOOTPROTO=staticONBOOT=yesIPADDR=192.168.200.25PREFIX=24GATEWAY=192.168.200.1DNS1=192.168.200.1按:wq保留退出。重启网卡# systemctl restart network# ping bing.com配置阿里云CentOS YUM源,放慢镜像拜访下载参考链接:https://blog.csdn.net/qq_45392321/article/details/121450443# yum clean all# yum makecache# yum repolist降级零碎# yum update查看postgresql是否装置# rpm -qa | grep postgre查看PostgreSQL 装置地位# rpm -qal | grep postgres新增postgres用户组# groupadd postgres新增postgres用户并且设置这个postgres用户属于创立的postgres用户组# useradd -g postgres postgres批改postgres用户明码[root@postgresql ~]# passwd postgresChanging password for user postgres.New password: BAD PASSWORD: The password is a palindromeRetype new password: passwd: all authentication tokens updated successfully.[root@postgresql ~]# 重启零碎reboot1、查问并装置postgresql-serveryum list | grep postgresql-serveryum install -y postgresql-server.x86_64 ...

February 25, 2022 · 3 min · jiezi

关于postgresql:3月2日阿里云开源-PolarDB-企业级架构将迎来重磅发布

2021年,阿里云正式发表开源 PolarDB for PostgreSQL 分布式版,包含数据库内核、相干插件、工具脚本、测试用例以及设计文档,实用于中大型企业外围业务场景。2022年3月2日,开源 PolarDB 企业级架构将迎来重磅公布!本次发布会将首次公开开源 PolarDB 的总体结构设计和企业级个性,对 PolarDB for PostgreSQL 的存储计算拆散架构、HTAP架构、三节点高可用架构进行全面介绍。 >发布会传送门 PolarDB for PostgreSQL 是阿里云自主研发的云原生数据库产品,100%兼容 PostgreSQL,采纳基于共享存储的存储计算拆散架构,具备极致弹性、毫秒级提早,反对 HTAP 的能力,还反对时空、GIS、图像、向量、搜寻、图谱等多模翻新个性,可应答企业对数据处理突飞猛进的需要。 极致弹性:存储与计算能力均可独立地横向扩大。 ○ 当计算能力不够时,能够独自扩大计算集群,数据无需复制。 ○ 当存储容量或 I/O 不够时,能够独自扩大存储集群,而不中断业务。毫秒级提早: ○ WAL 日志存储在共享存储上,RW 到所有 RO 之间仅复制 WAL 的元数据。 ○ 独创的 LogIndex 技术,实现了 Lazy 回放和 Parallel 回放,实践上最大水平地放大了 RW 和 RO 节点间的提早。HTAP 能力:基于 Shared-Storage 的分布式并行执行框架,减速在 OLTP 场景下的 OLAP 查问。一套 OLTP 型的数据,可反对 2 套计算引擎: ○ 单机执行引擎:解决高并发的 TP 型负载。 ○ 分布式执行引擎:解决大查问的 AP 型负载。源码仓库地址:https://github.com/ApsaraDB/P...

February 24, 2022 · 1 min · jiezi

关于postgresql:近期写PostgreSql的笔记

最近在写报表统计,用的是postgresql,联合之前写的票据报表统计,写一下罕用的语句。 存在可重复使用的查问后果,不蕴含参数的,能够创立长期表。数据表如果须要存大量数据,为了进步查问速度能够创立索引。索引的设置可依据理论查问表的条件。create index index_name on tb_example将一列字符串数据拆分为多列数据,例如"合肥市-庐阳区-杏花街道"转为"合肥市","庐阳区","杏花街道"。应用split(字段名,分隔符,index)办法,截取字符串总substr(字符串,长度) select tb_no, split(area_name,'-',1) as city,split(area_name,'-',2) as country,split(area_name,'-',3) as town from tb_example多条件查问的状况下正当使用case when。比方想要统计一张表中status在不同状态下的数量。然而须要联表查问的时候须要留神将须要依据条件统计的独自拎进去。(A表查问tb_example1中不同状态的统计量,表B统计tb_example2中index大于0的no个数<去重>) select A.*, B.uniqueNum from (select no,sum(case status when '01' then 1 else 0 end) as num1,sum(case status when '02' then 1 else 0 end) as num2from tb_example1 group by no) A,(select no, case when index > 0 then count(distinct(no)) else 0 end as uniqueNum from tb_example2) Bwhere A.no = B.no判断字符串是否蕴含采纳position(字符串1,字符串2)>0判断获取某日期的周月年起止日期weekStart timestamp := DATE_TRUNC('week', t_date) 所在周周一monthStart timestamp := DATE_TRUNC('month', t_date) 所在月初yearStart timestamp := DATE_TRUNC('year', t_date) 所在年初firstRace timestamp := DATE_TRUNC('quarter', t_date) - interval '1h' 所在季度初

January 28, 2022 · 1 min · jiezi

关于postgresql:mac-os-安装PostgresSQL-问题总结

装置形式:界面装置安装包下载地址:点击跳转到下载页在装置的过程中提醒: Problem running post-install step. Installation may not complete correctly The database cluster initialisation failed.解决:查阅了大量材料之后发现须要在mac上创立一个名为postgres的管理员用户具体操作步骤: 点击电脑屏幕左上角的苹果图标-----〉零碎便好设置-----〉用户与组群点击左下方的图标,输出明码新建postgres用户,账户类型抉择管理员操作上以上步骤之后就能够装置postgreSQL了装置过程一路next就能够了 这是我在装置的过程中呈现的问题及解决方案,有须要的同学能够参考一下

January 12, 2022 · 1 min · jiezi

关于postgresql:PostgreSQL-查找替换函数

概要: 在本教程中,咱们将向您介绍 PostgreSQL 替换函数,这些函数在字符串中搜寻子字符串并将其替换为新的子字符串。 PostgreSQL REPLACE 函数有时,您想搜寻列中的字符串并将其替换为新字符串,例如替换过期的电话号码、损坏的 URL 和拼写错误。 要搜寻字符串的所有匹配项并将其替换为新字符串,请应用 REPLACE() 函数。 上面阐明了 PostgreSQL REPLACE() 函数的语法: REPLACE(source, old_text, new_text );REPLACE() 函数承受三个参数: source 是一个你想要替换的字符串。old_text 是您要搜寻和替换的文本。 如果 old_text 在字符串中屡次呈现,它的所有呈现都将被替换。new_text 是将替换旧文本 (old_text) 的新文本。PostgreSQL REPLACE() 函数示例请参阅以下应用“REPLACE()”函数的示例: SELECT REPLACE ('ABC AA', 'A', 'Z'); 在此示例中,咱们将字符串中的所有字符“A”替换为字符“Z”。 以下示例将 URL 中的子字符串“tt”替换为“xx”: SELECT REPLACE ( 'https://www.zhaoxinsoft.com', 'tt', 'xx' ); 如果要搜寻和替换表列中的子字符串,请应用以下语法: UPDATE table_nameSET column_name = REPLACE(column,old_text,new_text)WHERE condition让咱们应用示例数据库中的customer表进行演示: SELECT first_name, last_name, emailFROM customer; 当初,假如您想更新电子邮件列以用 zhaoxinsoft.com 替换域 sakilacustomer.org,请应用以下语句: UPDATE customerSET email = REPLACE ( email, 'sakilacustomer.org', 'zhaoxinsoft.com' );因为咱们省略了 WHERE 子句,所以更新了 customer 表中的所有行。 ...

December 21, 2021 · 2 min · jiezi

关于postgresql:中韩印尼6大子论坛齐聚-PGConfAsia亚洲技术大会DAY3迎来收官

12月16日 PGConf.Asia2021 DAY3 6场分论坛火爆举办 接下来 小编带你重温各场分论坛 中文论坛利用实际专场(一) 腾讯云高级工程师黄辉,主题为<<构建PostgreSQL跨可用区能力实际>>。黄辉老师首先对数据库高可用评估体系、高可用架构演进进行了介绍,而后具体阐明了跨可用区能力指标和跨可用区能力建设内容,之后为大家分享了跨可用区架构实际以及跨可用区域实例的可用性判断规定。黄老师的本次分享是构建PostgreSQL跨可用区的最佳实际。关注高可用的数据库发烧友,务必观看回放认真学习。 南京基石数据CTO徐戟(白鳝),主题为<<Postgres智能诊断中的门路发散与收敛>>。徐戟老师首先解释了做自动化诊断的起因,而后论述了实现数据库主动驾驶的技术思路-技术图谱,而后解说了基于常识图谱的自动化诊断工具在PG上获得的良好效果,之后,徐戟老师表白了心愿与社区合作独特欠缺自动化诊断工具的愿景。 Airwallex地面云汇资深DBA赵飞祥,主题为<<PostgreSQL分布式数据库摸索与尝试>>。赵飞祥老师首先阐明了分布式数据库的概念、架构以及利用场景,而后论述了分布式数据库的实现。最初,赵飞祥老师解释了Airwallex分布式数据库选型的心路历程与实践经验。 瀚高数据库工程师张波,主题为<<PostgreSQL全文检索>>。张波老师介绍了PostgreSQL的全文检索的常识,包含含糊查问、全文检索数据类型、全文检索操作符、全文检索函数,而后介绍了中文全文检索的实现形式:zhparser和pg_jieba,最初,用一个理论例子来阐明了全文检索的应用过程。 晟数科技总经理崔旭,主题为<<PostgreSQL中外部数据存储和读取>>。崔旭老师从一个问题引出了本次演讲的内容:页数据外部存储调配和HOT机制,通过援用页的存储源代码,崔老师具体解释了页数据外部存储分配机制,并做试验进行了理论演示阐明该机制。而后崔老师通过试验对HOT机制进行了具体的解释。崔旭老师丰盛的实践与实操教训,让广大观众深深的折服。 杭州美创科技有限公司运维经理徐浩,主题为<<浅谈PG分布式高可用架构>>,徐浩老师首先解释了分布式高可用架构的种种概念:CAP实践,Base实践,Paxos协定,Raft算法,而后列举了PG数据库中六种支流的分布式高可用架构,并别离阐明了这六种架构的长处和毛病,堪称是干货多多。关注分布式高可用的PGer,务必观看回放认真学习。 瀚高数据库运维经理咸士杰,主题为<<PostgreSQL的逻辑同步计划>>, 咸士杰老师首先介绍了逻辑复制的基本概念、实用场景与种种限度,解释了复制标识和复制槽的概念与作用,以及在非凡场景下复制槽治理的留神要点。最初,咸士杰老师阐明了在双向同步的环境中,如何解决数据循环复制的问题。咸老师从技术细节登程,丝丝入扣解释了逻辑复制的整个生命周期的全景与留神要点。看得出,瀚高工程师在逻辑复制技术的粗浅功力。 中文论坛利用实际专场(二) 海能达数据库业务交付总监崔鹏,主题为<<专网通信畛域的PGHA实际>>,崔鹏老师概述了专网通信业务对数据库选型的需要,以及对PostgreSQL高可用计划的抉择,以及海能达技术团队针对PostgreSQL高可用进行的定制化开发,最初,崔老师概述了PostgreSQL高可用的测试方法。 PG ACE 、高级DBA彭冲,主题为<<PGDATA数据目录重组案例分享>>,彭冲老师以一个误删除PostgreSQL的PGDATA目录的复原案例来解说了数据库复原的办法,这个复原案例能够说是干货多多,从中能够学习到超多的知识点。 首旅如家DBA虞乐,主题为<<大型连锁酒店业会员库迁徙至PostgreSQL及高可用>>,虞乐老师首先阐明了待迁徙的Oracle数据库的现状及迁徙前的筹备措施,而后阐述了迁徙过程中遇到的问题以及解决办法,以及迁徙实现之后的PostgreSQL高可用和监控计划的实现。 云和恩墨培训产品总监姜殿斌,主题为<<Postgresql体系结构中shared_buffers的作用及其优化>>,姜殿斌老师首先具体解释了PostgreSQL的体系结构,通过试验的形式演示了数据块的生命周期,提出了Shared_buffers的优化倡议及相干插件的应用。 某银行软件研发核心DBA王雪,主题为<<深刻解析分布式架构下PostgreSQL参数优化>>。王雪老师形容了以后的分布式数据架构,以及在该架构下的数据处理瓶颈,而后为了解决该瓶颈,王雪老师进行的wal和检查点的摸索实际,之后,王雪老师提出了wal的参数优化倡议。 盘古云课堂特邀高级讲师李鑫,主题为<<PostgreSQL中MVCC机制>>。李鑫老师通过举例的形式,形象的论述了PostgreSQL中MVCC机制:事务管制、事务的ACID个性、事务状态、并发问题、事务快照的实现形式。 中文论坛利用实际专场(三) 云贝数据首席架构师郭一军,主题是<<PostgreSQL国产分布式数据库SQL Tuning利用案例剖析>>,在本次演讲中,郭老师分享SQL优化的经验总结,如分片键的抉择根据、利用索引打消排序、增大work_mem参数、改写成等价的SQL语句等优化干货。欲知优化大法详情,请看郭老师的演讲回放。 安全科技DBA熊灿灿,主题是<<从无到有,如何解决传统PostgreSQL下的运维痛点>>。熊老师列举了原生PostgreSQL数据库中不便于运维的各个痛点,如短少成熟的ash、awr,不反对slot的failover,32bit 事务id,短少原生的连接池等,欲知这些痛点的解决之道,请看熊老师精彩回放。 PGFans沉闷用户DBA甘植恳,主题是<<PostgreSQL场景利用-将需要和DB个性联合,实现百亿数据查问毫秒响应>>,在此次演讲中,甘老师列举了看似简略的理论业务场景在微小数据量加持之下的难题。基于对PostgreSQL的深厚技术了解,甘老师提出了百亿数据查问毫秒响应的精妙办法。欲知详情,请看回放。 SphereEx公司Java 高级工程师端正强,主题是<<PostgreSQL 增量服务生态实际>>。端老师首先介绍了数据库中间件ShardingSphere的产品定位及外围能力,以及PostgreSQL数据的通明分片的实现,端老师还介绍了ShardingSphere中对PostgreSQL数据库的深度反对状况。 山东辉鸿泛在电子科技有限公司技术主管苑泽福,主题是<<Greenplum数据迁徙与同步>>。苑老师首先梳理了Greenplum基础架构,解释了迁徙到Greenplum的起因及必要性,阐明了迁徙到Greenplum的流程步骤及相干留神要点,最初,苑老师介绍了校验数据一致性的办法。 海能达数据库开发DBA李洋,主题是<<foreign-data wrapper在专网通信畛域的利用与实际>>。李老师在本演讲中,以实战案例分享的模式,形象的阐明了应用foreign-data wrapper在多个客户场景下的不同数据源的多向数据同步案例。通过李老师的本次演讲,让宽广PGer体验到了FDW弱小的扩大性能。 PGFans沉闷用户DBA胡毅,主题是<<PostgreSQL高可用之Pacemaker计划>>。胡老师首先介绍了Pacemaker的次要性能及架构,阐明了Pacemaker反对的集群模式以及Pacemaker日常管理工具及各工具特点。 PG产学研论坛 今天上午的PG产学研论坛特地邀请了与PG分会和国产数据库厂商有密切合作的高校优秀教师代表,向咱们分享了面向开源PG发展数据库库教学改革的教训和成绩,对造就把握数据库根底软件核心技术的人才培养起到了无效的推动作用,十分值得全国更多高校借鉴和实际。 包含北京大学副教授荆琦老师的《PostgreSQL在北大软件学院开源教育中的实际》主题,北京大学软微学院是国家首批特色化示范性软件学院。且惟一的特色化钻研畛域即要害根底软件。主题介绍了北大软件与微电子学院采纳轻量级双轨制开源教学框架,由中国PG分会全程参加和反对,包含32课时的开源基础课和24课时的我的项目实际课,填补了国内开源开发课程的空白,目前北京大学软件与微电子学院的开源开发示范课程曾经发展到了第二届研究生,受到了学校师生的统一好评。 深圳大学特聘传授,国家青年千人专家秦建斌传授的主题是《PostgreSQL在深圳大学数据库内核教学中的落地》,秦建斌传授是国内PostgreSQL数据库教学改革的踊跃推动者,是首先在深圳将PostgreSQL引入本科生数据库内核教学的引路人,通过主题为大家分享了通过整合PG分会培训认证课程、腾讯分布式数据库材料、武汉大学PG内核课程,组织了以PG为主题面向本科的教学内容,联合在线平台,面向本科生发展了开源PG内核开发的教学,使得数据库教学可能与企业联合,以面向企业须要的人才培养为导向,造就在校本科生,促成待业。 郑州大学软件学院姬丽霞副教授为大家带来的是演讲主题是<<数据库与深度学习-挑战与时机>>。中国PG分会自2020年起与郑州大学软件学院深刻单干,联结共建河南省级特色示范软件学院、河南省级研究生教育翻新造就基地等。本次主题介绍了郑州大学依靠信创东风,以数据库教学改革为题,联结一线国产数据库厂商瀚高软件的力量,联合AI深度学习优化数据库连贯查问等技术组织课程,发展教学,达成了数据库与AI联合的阶段性翻新成绩。 山东师范大学信息科学与工程学院丁艳辉副教授与张永新副教授的演讲主题别离是<<基于PG的数据库实际教学平台的钻研与利用>>,和<<基于PG数据库的DBMS零碎实现课程及教材的钻研>>,在以往的数据库实际教学工作中,丁艳辉、张永新副教授等人始终心愿能有一套相似斯坦福大学数据库实现教材进行解说与工夫,在PG分会的反对下,丁艳辉、张永新副教授团队组织多位博士青年教师,进行了基于PG的数据库系统实现教材及数据库实际教学平台编写及研发。并于往年在山师及局部兄弟院校进行了教学利用实际。获得了良好的反映。这也为其团队进一步倒退迭代这个教学平台加强了信念。 苏州科技大学傅向阳副教授的演讲主题是<<PG培训认证体系在本科生IT根底培训中的推广>>,作为PostgreSQL数据库常识学习体系的重要一环,PG培训认证体系有着重要作用。以往数据库的各种培训大多是针对在职人员,而大学本科生是没有理论工作与工程教训的群体,必然须要依靠PG培训认证体系这个国内惟一的系统化的PG培训体系,依据零根底在校生的理论认知程度进行适应性设计和革新。分会依据开源合作的理念,踊跃倒退各类院校老师进行二次的培训课程开发。这外面苏科大的傅向阳副教授就是其中获得较强成绩的代表之一。 最初,中国计算机学会数据库专委会委员、中国开源软件推动联盟PostgreSQL分会白国华秘书长为大家带来的是<<PostgreSQL生态与国产化要害人才培养>>,作为寰球最先进的开源关系数据库软件,PostgreSQL数据库衍生了大量的生态化产品,这显示出PostgreSQL在寰球数据库生态中有较高的普适性和较强的生态交融性。在国内,PG更是被大量国产数据库产品所借鉴,乃至基于其进行二次开发。联合近年来中国PG分会大量的PG产学研单干及数据库课改工程的实际。中国PG分会基于PG的根底软件要害人才培养能力失去极大倒退。 首尔子论坛 在首尔子论坛,4位韩国PostgreSQL用户组成员登台演讲,别离是Ioseph Kim、Jaegeun Yu、Daniel Lee、Lee Jiho。 Ioseph Kim是PostgreSQL11和PostgreSQL12的贡献者,并且翻译了PostgreSQL韩文文档。他的演讲主题是<<Peculiar SQL with PostgreSQL for application developer>>,在本演讲中,Loseph Kim讲述了PostgreSQL的Lateral Joins、distinct on等语法,他还介绍了PostgreSQL14版本的新性能。 ...

December 20, 2021 · 1 min · jiezi

关于postgresql:获取上下一个工作日实践

获取高低一个工作日实际前言 其实这个文章集体之前有进行过公布和探讨,在上一篇文章中,介绍了如何通过postgresql数据库的sql语句构建一个工作日的表,并且介绍如何应用sql语法获取某一天往前或者往后的工作日或者天然日,然而理论浏览之后发现短少了很多细节,故这里从新梳理一下整个过程,心愿能够给读者一个参考。 本次实际只是集体提供的一个工作日获取的解决方案,如果有更好的解决方案欢送探讨和分享。 上一篇文章链接:https://juejin.cn/post/7023008573827481637 留神应用的数据库为:PostgreSql 前置筹备 在介绍具体的编码和解决逻辑之前,咱们须要筹备表构造和相干的数据。 表设计 首先这里仍然先回顾一下这个工作日表获取的表构造: -- ------------------------------ Table structure for sa_calendar_table-- ----------------------------DROP TABLE IF EXISTS "public"."sa_calendar_table";CREATE TABLE "public"."sa_calendar_table" ( "calendar_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, "calendar_year" varchar(10) COLLATE "pg_catalog"."default", "calendar_month" varchar(10) COLLATE "pg_catalog"."default", "calendar_date" varchar(10) COLLATE "pg_catalog"."default", "day_of_week" varchar(10) COLLATE "pg_catalog"."default", "day_of_month" varchar(10) COLLATE "pg_catalog"."default", "week_of_year" varchar(10) COLLATE "pg_catalog"."default", "month_of_year" varchar(10) COLLATE "pg_catalog"."default", "quarter_of_year" varchar(10) COLLATE "pg_catalog"."default", "is_end_month" varchar(10) COLLATE "pg_catalog"."default", "is_end_quarter" varchar(10) COLLATE "pg_catalog"."default", "is_end_halfayear" varchar(10) COLLATE "pg_catalog"."default", "is_end_year" varchar(10) COLLATE "pg_catalog"."default", "operator_id" varchar(50) COLLATE "pg_catalog"."default", "operator_name" varchar(50) COLLATE "pg_catalog"."default", "operate_date" timestamp(6), "res_attr1" varchar(40) COLLATE "pg_catalog"."default", "res_attr2" varchar(40) COLLATE "pg_catalog"."default", "res_attr3" varchar(40) COLLATE "pg_catalog"."default", "res_attr4" varchar(40) COLLATE "pg_catalog"."default", "is_work_day" varchar(1) COLLATE "pg_catalog"."default")WITH (fillfactor=100);ALTER TABLE "public"."sa_calendar_table" OWNER TO "postgres";COMMENT ON COLUMN "public"."sa_calendar_table"."calendar_id" IS '主键';COMMENT ON COLUMN "public"."sa_calendar_table"."calendar_year" IS '年';COMMENT ON COLUMN "public"."sa_calendar_table"."calendar_month" IS '月';COMMENT ON COLUMN "public"."sa_calendar_table"."calendar_date" IS '日';COMMENT ON COLUMN "public"."sa_calendar_table"."day_of_week" IS '天然周的第几天';COMMENT ON COLUMN "public"."sa_calendar_table"."day_of_month" IS '月的第几天';COMMENT ON COLUMN "public"."sa_calendar_table"."week_of_year" IS '年的第几个天然周';COMMENT ON COLUMN "public"."sa_calendar_table"."month_of_year" IS '年的第几月';COMMENT ON COLUMN "public"."sa_calendar_table"."quarter_of_year" IS '年的第几季';COMMENT ON COLUMN "public"."sa_calendar_table"."is_end_month" IS '是否月末';COMMENT ON COLUMN "public"."sa_calendar_table"."is_end_quarter" IS '是否季末';COMMENT ON COLUMN "public"."sa_calendar_table"."is_end_halfayear" IS '是否半年末';COMMENT ON COLUMN "public"."sa_calendar_table"."is_end_year" IS '是否年末';COMMENT ON COLUMN "public"."sa_calendar_table"."operator_id" IS '操作人ID';COMMENT ON COLUMN "public"."sa_calendar_table"."operator_name" IS '操作人名称';COMMENT ON COLUMN "public"."sa_calendar_table"."operate_date" IS '操作工夫';COMMENT ON COLUMN "public"."sa_calendar_table"."res_attr1" IS '预留字段1';COMMENT ON COLUMN "public"."sa_calendar_table"."res_attr2" IS '预留字段2';COMMENT ON COLUMN "public"."sa_calendar_table"."res_attr3" IS '预留字段3';COMMENT ON COLUMN "public"."sa_calendar_table"."res_attr4" IS '预留字段4';COMMENT ON COLUMN "public"."sa_calendar_table"."is_work_day" IS '是否为工作日,Y是,N否(即节假日)';列名称数据类型形容数据长度不能为空calendar_idvarchar主键255YEScalendar_yearvarchar年10NOcalendar_monthvarchar月10NOcalendar_datevarchar日10NOday_of_weekvarchar天然周的第几天10NOday_of_monthvarchar月的第几天10NOweek_of_yearvarchar年的第几个天然周10NOmonth_of_yearvarchar年的第几月10NOquarter_of_yearvarchar年的第几季10NOis_end_monthvarchar是否月末10NOis_end_quartervarchar是否季末10NOis_end_halfayearvarchar是否半年末10NOis_end_yearvarchar是否年末10NOoperator_idvarchar操作人ID50NOoperator_namevarchar操作人名称50NOoperate_datetimestamp操作工夫6NOres_attr1varchar预留字段140NOres_attr2varchar预留字段240NOres_attr3varchar预留字段340NOres_attr4varchar预留字段440NOis_work_dayvarchar是否为工作日,Y是,N否(即节假日)1NO 另外这里再教大家一个技巧,如何应用postgresql获取某一个表的表构造: ...

December 20, 2021 · 5 min · jiezi

关于postgresql:7大子论坛回顾-PGConfAsia亚洲技术大会DAY2精彩继续

12月15日 PGConf.Asia2021 DAY2 7场分论坛火爆举办 接下来 小编带你重温各场分论坛 中文论坛内核专场(一) 腾讯云专家工程师孙旭,主题是<<TDSQL-C PostgreSQL主从架构优化>>,在分享中,孙旭老师介绍了腾讯云对TDSQL-C PostgreSQL进行的多项优化工作,包含主机优化、从机优化、主从架构优化等方面。通过这些优化工作咱们能够看出,腾讯云对PostgreSQL数据库内核代码的掌控水平曾经位居全国第一方阵。 SphereEx 联结创始人兼 CTO, Apache ShardingSphere PMC潘娟,主题为<<PostgreSQL 的分布式及平安数据库生态搭建>>,这是本次大会惟一的一个数据库中间件专题。潘老师针对 PostgreSQL 在企业大数据场景下的需要,借助 Apache ShardingSphere 的我的项目的开源生态力量,打造分布式平安数据库生态体系,为 PostgreSQL 开源场景及企业理论利用场景赋能。 浪潮迷信研究院分布式数据库研究所开源赋能团队技术负责人赵衎衎,主题为<<工业级SQL优化器技术蓝图>>,展现了赵博士对数据库优化器的深度把握。面向未来研发将扩大现有的查问优化框架,构建工业级 SQL 优化器。包含被动查问优化、自适应查问优化、整体查问优化等5个方面。 美创科技首席内核研究员吕海波,主题为<<PG内核数据一致性保障机制的钻研与改良>>,吕海波老师首先论述了PostgreSQL数据库针对页决裂的解决方案-FPW,而后通过试验拦挡零碎调用模仿了页决裂场景,并具体解释了Oracle以及MySQL数据库页决裂的解决办法。吕老师明确指出:双写并不能解决所有的页决裂问题。基于以上实证,吕海波老师提出了对PostgreSQL页裂的优化解决方案,并且该计划会开源进去。敬请关注中国PG分会以理解该计划开源动静。 Vmware公司内核研发工程师王晓冉,主题为<<PostgreSQL 闲暇空间治理(FSM)>>,王晓冉老师联合PostgrSQL 存储引擎,从源代码层面论述了FSM的实现机制、剖析了FSM代码中次要数据结构,存储、并发及recovery的实现。 OtterTune公司联结创始人张伯翰,主题为<<OtterTune:利用机器学习主动优化数据库>>,张伯翰老师分享了利用机器学习自动化调优的必要性,介绍了CMU数据库组7年的研发成绩-OtterTune主动调优零碎的架构、TPC-C试验后果、在多个客户(法兴银行、booking.com)的落地实际。 中文论坛内核专场(二) 在中文论坛-内核专场(二),有七位工程师为咱们带来精彩的演讲,别离是: 华为数据库技术专家张树杰,主题为<<PostgreSQL的昨天、明天和今天>>。张树杰老师具体论述了PG历史上比拟重要的个性,如GEQO Optimizer、Join Recorder、PITR、JIT、MVCC、WAL、Stream Replication、Parallel Executor等等。 北京四维纵横数据技术有限公司CTO翁岩青,主题为<<与大象共舞,MatrixDB时空探索之旅>>。翁岩青老师具体解释了对时序场景的深刻理解以及面临的挑战,论述了时序数据库的演进趋势,介绍了MatrixDB数据库富裕特色的存储引擎和计算引擎,对时序数据库感兴趣的PGer,务必记得看回放。 中兴架构师陈小强,主题为<< PG WAL日志长久化机制优化摸索>>。陈小强老师剖析了PG WAL长久化瓶颈,梳理了PG WAL长久化流程,指出了PG WAL长久化存在的问题以及对应的摸索之道,关注WAL性能优化的敌人须要认真了解陈小强分享的干货。 阿里云内核研发工程师冯遵宝,主题为<<云原生数据库的架构设计>>,冯遵宝老师具体介绍了PolarDB云原生架构和HTAP架构。 南京开特信息科技有限公司数据库内核研发部门负责人尚翀,主题为<<国密SM4在PG中的利用>>,尚翀老师在演讲中具体介绍了国密算法、PostgreSQL加密现状和SM4的实用场景,而后阐明了Sm4在PG中的实现,最初畅想了SM4加密强化的对策,关注国密算法的PGer,肯定要具体学习这个演讲。 泽拓科技(深圳)有限责任公司技术专家何变革,主题为<<基于postgresql分布式数据库的实现>>,何变革老师在演讲中具体介绍了KunlunDB云原生分布式数据库面对数据库ACID个性的解决办法。 海能达通信股份有限公司高级数据库开发工程师孟令彬,主题为<<你不晓得的PostgreSQL管制文件>>,孟令彬老师在演讲中具体解释了PostgreSQL数据库管制文件的重要作用以及重置管制文件的办法,干货多多! 中文论坛内核专场(三) 腾讯云专家工程师伍鑫的演讲主题是<<企业级剖析型数据库TDSQL-A技术架构演进>>。本次演讲伍鑫老师具体的分享了企业级剖析型分布式数据库TDSQL-A的倒退历程、技术架构翻新实际以及对将来PG技术生态的将来瞻望。 青云科技资深内核研发工程师张连壮,通过主题《PostgreSQL误操作数据找回的办法》,为大家分享了误操作数据找回的多种办法和相干扩大模块的应用,展现了PG丰盛的扩大性能。 亚信科技AntDB 内核研发专家梁博分享主题《PG子事务的性能优化》,讲述了PG子事务如何灵便应答沉重业务和如何利用子事务达到优化业务流程的目标。 西方瑞通PG技术专家刘华阳通过主题《Postgresql 在商业二次开发中的劣势》全面展现了PG的技术劣势和生态劣势并剖析了国内政、企客户对数据库的选型思路。 PGFans技术社区TOP博主杨向博的主题是《DBA深刻理解PostgreSQL内核教训分享》,为深刻PG内核学习和研发的网友分享了本人的贵重的教训,十分值得借鉴。 PG爱好者孙羽川在主题《利用golang搭建citus扩缩容迁徙web平台》中,分享了利用时下风行的golang语言研发citus分布式数据库web管控平台的教训和具体性能实现。 英文分论坛(一、二) 在明天的英语论坛中,来自世界各地的PG爱好者,发展了PG多种性能个性、利用实际、开发翻新的主题分享,异彩纷呈。不同地区的国内嘉宾,办理着不同的英语口音,分享了精心实际的技术专题,十分值得PG用户借鉴学习,感触到了世界各地酷爱PG、乐于分享的激情。 在上午的分享环节,首先PG国内社区核心成员Bruce Mojian学生,再次在英文论坛中为大家带来了《PG执行打算与查问优化》的主题分享。次要内容波及SQL查问申请的执行过程、影响优化器工作的三种物理链接形式、索引优化要点、长期表的应用等优化要点,为大家深入浅出的解说,给咱们建立了一位孜孜以求PG布道者的可亲、可敬的前辈楷模形象。 接下来EDB首席反对工程师Richard Yen和来自英国的pgMustard联结创始人Michael Christofides,别离通过主题《解释EXPLAIN:对EXPLAIN Plans的介绍》、《EXPLAIN ANALYZE初学者指南》也在不同角度分享的对于PG执行打算的内容,通过分享可能了解执行打算对于数据库的高效治理运维,起着十分要害的作用,内容不仅实用于初学者,对有教训的工程师更能全面的学习和应用执行打算来优化治理PG数据库。 ...

December 17, 2021 · 1 min · jiezi

关于postgresql:六大奖项花落各家丨2021-PG中国年度技术评选发布仪式回顾

2021年12月14日,由中国PG分会、PG亚洲社区和PostgresConf国内会议组织联结举办的PostgresConf.CN & PGConf.Asia2021大会召开了DAY1-主论坛。2021年度PG中国技术评比也在主论坛上午举办了公布典礼,独特回望与总结了PostgreSQL往年来的倒退成就!6大奖项花落谁家?答案也最终揭晓。 云原生数据库TDSQL-C(Cloud Native Database TDSQL-C)简称 TDSQL-C。TDSQL-C 是腾讯云自研的新一代高性能高可用的企业级分布式云数据库。 TDSQL-C 基于日志即数据库的设计理念,反对了存算拆散的数据库架构,可在秒级迅速拉起或删除数据库计算实例,反对灵便的数据弹性调度。 并交融了传统数据库、云计算与新硬件技术的劣势,100%兼容 PostgreSQL。在工程实现上应用了翻新的share-nothing编程异步框架,一种无需耗时锁定即可在 CPU 内核之间共享信息的设计,面向古代新硬件技术的劣势实现了超百万级QPS的高吞吐。并且通过对底层存储的分布式实现反对了高达128TB海量分布式智能存储,也充分保证了数据的可靠性。 目前云原生数据库TDSQL-C曾经利用于多个明星业务,如腾讯地图、QQ、微信领取、腾讯游戏等各类业务零碎中。涵盖了数据分析,数据归档,实时计算,外围交易等多种利用场景。 腾讯云数据库始终致力于健全产品服务体系,晋升产品性能,通过欠缺的行业解决方案,云上、云下及混合云的部署模式,帮忙全行业客户具备面对简单业务挑战的能力。目前,腾讯云数据库为企业提供了欠缺的关系型数据库、非关系型数据库、剖析型数据库和数据库生态工具。 其中在 PostgreSQL 数据库畛域,腾讯云提供了业界最齐全的 PG 数据库生态,包含:传统架构的云端数据库 PostgreSQL,云原生架构的 TDSQL-C PostgreSQL、分布式 HTAP 数据库 TDSQL PostgreSQL ,以及大规模数据分析型数据库 TDSQL-A PostgreSQL。除此之外,还通过数据传输服务(DTS),数据管理服务(DMC)等数据库生态组件晋升 PostgreSQL 系列产品体验和易用性。 目前,腾讯云数据库服务了数十万以上的客户,保护着超 PB 量级的数据库集群,保障了各行业客户的业务稳固与平安。特地是在疫情期间,腾讯云数据库撑持了多省市的衰弱码小程序以及抗疫相干App,为全国抗疫做出了本人应有奉献。 瀚高是国内PostgreSQL社区建设倒退的主导者、国内PostgreSQL生态建设的引领者、是国内PostgreSQL社区亚太地区的次要贡献者。瀚高数据库以PostgreSQL内核为根底,通过深层次二度开发,造成具备知识产权、产品稳固、兼容性强、有服务保障的商业版本,2011年瀚高公布国内首个基于开源商业发行版HighGODataBase,创始了中国开源数据库商业发行版模式的先河, 产品已在电子政务、公共服务、地理信息、新能源等多个业务畛域的外围零碎实现广泛应用。 瀚高是PG官网文档中文版最早翻译者,2017年主导中国开源软件推动联盟PG分会正式成立。2019年主导并制订了中国第一个PG认证体系,截止目前已造就PG技术从业人员已达5000+人,胜利实现数据库培训产业化。同时瀚高踊跃与清华、北大、深大等顶尖高校发展面向高校的开源数据库内核研发课程,推动中国根底软件内核研发人才培养。 瀚高深度参加国内社区建设,踊跃与20余个国家社区与用户组深刻对接,推动中国PG商业生态衰弱继续倒退。截至2021年10月,瀚高已在国内PG社区提交代码超40万行,波及文件1000+个,向开源社区提交 Patch、Bug,300+个(PGPOOL-II次要代码贡献者)。在国内PG社区官网Blog零碎寰球贡献度中屡次位列顶级奉献团队榜首。 浪潮K1 Power作为浪潮服务器家族的高端高价值系列,依靠于寰球顶尖的研发程度,充沛开释了国产高端服务器的高价值计算力,是面向要害外围利用,具备高可靠性、高性能、高平安和数据强一致性的算力保障。始终帮忙客户轻松应答业务高速增长与利用负载带来的微小挑战,不仅是外围零碎集中式商业数据库的最佳平台,还是重要零碎开源数据库的优选平台,为企业数字化转型夯实要害计算底座,助力企业外围利用迁徙。 浪潮K1 Power高端服务器FP系列是为开源数据库深度优化设计,高达3.9GHz超高主频、超高内存IO带宽,PCIe 4.0接口轻松应答数据库对硬件平台的性能要求,单机可部署更多的开源数据库实例。经测试,性能是X86架构的2倍以上;反对CAPI规范,连贯IO拜访FPGA卡设施的零碎延时只有X86的1/36;反对OpenCAPI高速接口,与处理器互连传输速率高达25GT/s,为异构减速,并广泛应用于全行业的各大利用场景:企业级数据库/要害利用、大数据、开源数据库:互联网外围、信贷、证券前置应用服务器,大数据分析,网络进攻、影像开掘、实时大数据分析等利用场景及各行业的视频、AI存储节点、小文件存储性能突出的分布式存储等。 浪潮K1 Power高端服务器全栈反对PostgreSQL数据库,自2008年,Power服务器就是EDB的策略投资单干平台,以其高平安、高性能、高可靠性,数据强一致性的劣势,施展出EDB的最佳性能,晋升PostgreSQL的业务价值。浪潮K1 Power高端服务器是PostgreSQL最佳撑持平台。 麒麟软件次要面向通用和专用畛域打造平安翻新操作系统产品和相应解决方案,以平安可信操作系统技术为外围,现已造成河汉麒麟服务器操作系统、桌面操作系统、嵌入式操作系统、麒麟云、操作系统增值产品为代表的产品线。依据赛迪参谋统计,麒麟软件旗下操作系统产品,间断10年位列中国Linux市场占有率第一名。 截止目前,河汉麒麟操作系统曾经与PostgreSQL数据库软件的多个版本(8,9,10,11,12,13)进行了兼容适配并公布了兼容适配证书,曾经与多个云厂商的基于PostgreSQL的数据库(天翼云关系型数据库PostgreSQL零碎、华为云数据库PostgreSQL等等)进行了兼容适配并公布了兼容适配证书。 在上述适配中,包含了所有的国产CPU类型,河汉麒麟操作系统曾经成为在国产CPU平台下运行PostgreSQL数据库软件的最佳操作系统。 特地鸣谢

December 17, 2021 · 1 min · jiezi

关于postgresql:当PostgreSQL遇到K1-Power服务器如何构建高性能高可靠性数据库支撑平台

演讲时段:12.14 14:00-14:30 演讲主题:浪潮K1 Power高端服务器与PostgreSQL携手助力企业数字化降级 演讲嘉宾:冯健,浪潮商用机器有限公司资深技术支持工程师 会场:主论坛 在2021年PGConf.Asia2021亚洲技术大会主论坛,浪潮商用机器有限公司资深技术工程师冯健老师将带来<<浪潮K1 Power高端服务器与PostgreSQL携手助力企业数字化降级>>。 提到Power处理器,大家首先的反馈可能就是它与AIX操作系统的绑定,其实浪潮K1 Power服务器还能够运行Linux操作系统,也就是咱们通常所说的PowerLinux。另外,自2008年,Power服务器也是EDB的策略投资单干平台。这种独特的劣势以及与一线数据库厂商的强强联合,无疑为客户提供了最佳的解决方案与最好的业务体验。 冯健老师的演讲波及K1 Power的产品劣势、K1 Power为PostgreSQL带来的业务价值,浪潮商用机器为构建K1 Power+PostgreSQL生态体系进行的技术布局。这些种种致力,无一例外的传播一种信息:构建K1 Power生态体系,浪潮商用机器是认真的! 各位技术发烧友,还等什么?请锁定12月14日下午14:00-14:30的精彩演讲,让咱们站在K1 Power的肩膀上,吸取工程精髓,晋升技术视线! 特地鸣谢

December 14, 2021 · 1 min · jiezi

关于postgresql:在PGConfAsia主论坛纵览腾讯云PostgreSQL技术演进

演讲时段:12.14 10:50-11:20 演讲主题:腾讯云PostgreSQL生态演进与技术架构分享 演讲嘉宾:刘少蓉博士,腾讯云数据库技术专家组负责人 会场:主论坛 作为腾讯云数据库技术专家组负责人,刘少蓉博士在主论坛将为大家带来<<腾讯云PostgreSQL生态演进与技术架构分享>>。 随同着腾讯各项业务的倒退,腾讯云在PostgreSQL数据库畛域耕耘多年,倒退至今在业界公布了如云数据库TencentDB for PostgreSQL、云原生数据库TDSQL-C PostgreSQL、HTAP 分布式数据库TDSQL PostgreSQL、分布式剖析性数据库TDSQL-A PostgreSQL等丰盛的数据库产品线。 本次分享将回顾腾讯云在PostgreSQL数据库的倒退历程,分析生态演进与技术架构方面的一些心得和领会,并且展望未来PostgreSQL的倒退方向,敬请期待! TIPS浏览更多: 在PGConf.Asia-中文技术论坛,凝听腾讯云专家对数据库技术的深度了解 聚焦PGConf.Asia-腾讯云分论坛,Get金融级分布式数据库集大成之作 特地鸣谢

December 10, 2021 · 1 min · jiezi

关于postgresql:在PGConfAsia中文技术论坛聆听腾讯云专家对数据库技术的深度理解

本届PGConf.Asia 2021亚洲技术大会,除腾讯云数据库分论坛(聚焦PGConf.Asia-腾讯云分论坛,Get金融级分布式数据库集大成之作)外,腾讯云数据库专家团队还将在中文技术论坛-内核专场和利用实际专场带来3场分享。 直播地址: https://2021.postgresconf.cn/... 咱们首先来科普一下在上述演讲中提到的腾讯云数据库产品。 TDSQL-C产品: 云原生数据库 TDSQL-C(Cloud NativeDatabase TDSQL-C)简称 TDSQL-C。TDSQL-C是腾讯云自研的新一代高性能高可用的企业级云原生云数据库。交融了传统数据库、云计算与新硬件技术的劣势,100%兼容 MySQL 和 PostgreSQL,实现超百万级QPS的高吞吐,448TB海量分布式智能存储,保障数据安全可靠。该产品有如下个性: 全面兼容:100%兼容开源数据库引擎 MySQL和 PostgreSQL。简直无需改变代码,即可实现现有数据库的查问、利用和工具平滑迁徙。 超高性能: 具备商用数据库的强劲性能,最高性能是 MySQL 数据库8倍、PostgreSQL数据库的4倍。 海量存储: 单实例反对448TB的海量存储,轻松应答业务数据量的持续增长。 疾速复原: 计算节点实现无状态,反对本地和跨设施的秒级故障切换和复原;反对基于快照的秒级备份和回档。 数据高牢靠:集群反对平安组和 VPC 网络隔离。主动保护数据和备份的多个正本,保障数据安全可靠,可靠性达99.9999999%。 弹性扩大:计算节点可依据业务须要疾速升降配,秒级实现扩容,反对无服务器Serverless架构,主动扩缩容,实现计算资源的老本最优。 TDSQL-A产品: 剖析型数据库(Analytical Datbase TDSQL-A,TDSQL-A)是腾讯自主研发的分布式剖析型数据库系统,为您提供高效的海量数据存储和在线剖析解决能力。该产品有如下个性: 自研列式存储:提供高效的行列混合查问能力,提供列式存储能力,具备高压缩比,节俭存储空间。 兼容性高:反对SQL 2003 和 PostgreSQL 语法,高度兼容Oracle 语法,反对存储过程和残缺分布式事务能力。 企业级数据安全:具备三权分立、数据脱敏、数据加密、数据审计等企业级平安能力。 海量数据存储:MPP 无共享架构,弹性扩大节点,可反对 PB 级海量存储和大规模集群通信,大规模集群的数据互联互通、关联查问等。 高效简单查问: 万亿宽表数据毫秒级解决,关联剖析秒级响应,性能相比开源和传统数据库晋升数倍至数百倍; 具备弱小的 OLAP 剖析能力。 弱小数据治理能力: 高效弹性在线扩容、长尾数据冷热拆散、多类型分区表反对以及二级分区表反对。 有了下面常识做铺垫,咱们再来别离看这三位工程师的演讲: 腾讯云专家工程师孙旭的演讲主题是<< TDSQL-C PostgreSQL主从架构优化>>。孙旭老师有10年数据库内核开发教训;相熟数据库查询处理,并发管制,日志以及存储系统;相熟PostgreSQL(Greenplum,PGXC等)、Teradata等数据库内核实现机制。家喻户晓,PostgreSQL数据库通过数据冗余和日志同步实现一主多读,并容许备机在主机不可用后,替换主机持续对外提供服务,保证系统的可用性。然而TDSQL-C是计算-存储拆散架构的, 数据库实例共享同一份数据, 因而,一主多读的设计与传统数据库相比也有很大差别。在本次议题中,孙旭将会与大家分享TDSQL-C PostgreSQL主从架构的设计和优化,关注云原生数据库主从架构设计与优化的数据库爱好者,请务必锁定本演讲主题。 腾讯云专家工程师伍鑫的演讲主题是<<企业级剖析型数据库TDSQL-A技术架构演进>>。伍鑫老师在数据库、数据复制、大数据计算等畛域有丰盛教训,曾发表多篇相干论文、专利。退出腾讯前曾在IBM大数据分析团队工作多年,后退出Hashdata数据库守业公司。退出腾讯后,负责TDSQL-A剖析型数据库优化器、执行器、分布式事务等多项外围性能研发级设计。TDSQL-A在内核设计和整体架构上针对大规模数据场景进行了专门的设计,次要解决超大规模数据库集群扩展性问题和大规模数据高效剖析问题。本次分享伍鑫老师会具体的企业级剖析型分布式数据库的倒退历程、技术架构翻新实际以及咱们对将来PG技术生态的将来瞻望。 腾讯云高级工程师黄辉的演讲主题是<<如何构建超高可用PostgreSQL之跨机房容灾建设实际>>。黄辉老师毕业以来始终从事数据库畛域工作,相熟数据库高可用、管控架构、数据备份和复原等。对于数据可靠性与数据库服务的可用性是数据库容灾领域永恒不变的话题。黄辉老师的本次分享次要集中如何在两者之间均衡,以及高可用设计时候的一些衡量要点。 TIPS在12月14日的主论坛,还将有腾讯云数据库技术专家组负责人刘少蓉老师为大家带来腾讯云PostgreSQL生态演进与技术架构方向的演讲,敬请期待揭秘。 特地鸣谢

December 7, 2021 · 1 min · jiezi

关于postgresql:在PGConfAsia中文技术论坛纵览16个方向42场演讲

本届PGConf.Asia亚洲技术大会的中文技术论坛逾越两个终日,别离是12月15日(周三)的内核专场以及12月16日(周四)的利用实际专场。 中文技术论坛-内核专场 12月15日全天的内核专场共计20场演讲,由别离来自云厂商、数据库厂商、ISV、ICT厂商、AI及MachineLearning初创企业的20位技术专家奉献。 1)内核-高可用方向:腾讯云专家工程师孙旭为大家带来《TDSQL-C PostgreSQL主从架构优化》的演讲。家喻户晓,TDSQL-CPostgreSQL是计算-存储拆散架构的,那么基于存算拆散架构该如何设计一主多从?敬请期待原厂技术专家的演讲。 2)剖析型数据库方向:腾讯云专家工程师伍鑫为大家带来了《企业级剖析型数据库TDSQL-A技术架构演进》的分享,本次分享会具体的介绍企业级剖析型分布式数据库的倒退历程、技术架构翻新实际以及腾讯云对将来PG技术生态的将来瞻望。关注剖析型数据库的爱好者请勿错过。 3)内核-分布式方向:有三位技术专家为大家带来分布式相干主题的演讲,别离是SphereEx联结创始人兼CTO潘娟的《PostgreSQL的分布式及平安数据库生态搭建》、泽拓科技技术专家何变革的《基于PostgreSQL分布式数据库的实现》、格灵深瞳技术专家孙羽川的《利用golang搭建citus扩缩容迁徙web平台》,三位专家别离从数据库中间件、PG数据库、Citus插件角度论述了分布式数据库的实现,关注分布式的敌人请不要错过。 4)内核-性能优化方向:有三位技术大咖为大家带来性能优化相干主题的演讲,别离是浪潮云溪数据库赵衎衎博士的《工业级SQL优化器技术蓝图》,OtterTune公司联结创始人张伯翰的《OtterTune:利用机器学习主动优化数据库》,亚信科技AntDB内核研发专家梁博的《PG子事务的性能优化》。值得一提的是张伯翰研究生毕业于卡内基梅隆大学,期间和AndyPavlo传授进行数据库主动调优OtterTune和自治数据库的钻研,并联结开办公司将科研成果商业化。敬请期待国内国外嘉宾在内核-性能优化畛域的成绩分享。 5)内核实现机制方向:有三位技术专家为大家带来内核实现机制相干主题的演讲,别离是美创科技内核技术专家吕海波的《PG内核数据一致性保障机制的钻研与改良》,vmware内核研发工程师王晓冉的《PostgresSql 闲暇空间治理(FSM)》,中兴通讯架构师陈小强的《PG WAL日志长久化机制优化摸索》,敬请期待三位PostgreSQL内核猎手的精彩分享。 6)内核-运维干货方向:有三位技术专家为大家带来运维干货相干主题的演讲,别离是海能达高级数据库开发工程师孟令彬的《你不晓得的PostgreSQL管制文件》,青云科技资深内核研发工程师张连壮《PostgreSQL误操作数据找回的办法》、PGFans沉闷用户杨向博的《DBA深刻理解PostgreSQL内核教训分享》,为宽广的PostgreSQL DBA带来由传统运维DBA向读懂内核DBA精进的运维技术分享。 7)云原生方向:阿里的内核研发工程师冯遵宝为大家带来《云原生数据库的架构设计》,揭秘云原生数据库的诸多个性,敬请期待。 8)PG版本倒退介绍:由华为技术专家、中文图书<<PostgreSQL技术底细:查问优化深度摸索>>的作者张树杰带来《PostgreSQL的昨天、明天和今天》的分享,该分享回顾了PG数据库倒退历程中的重要个性、介绍以后PostgreSQL设计准则及框架、瞻望了PostgreSQL将来须要关注的倒退方向(如AI、调优、Vectorized Execution、CSN、zheap等),敬请期待。 9)在超交融数据库畛域,北京四维纵横CTO翁岩青为大家带来了《与大象共舞,MatrixDB时空探索之旅》的演讲,介绍了在PostgreSQL根底上扩大反对面向时序的存储引擎和计算引擎,关注时序场景的敌人请勿错过本次演讲。 10)PG与国产化方向:从国产化角度,南京开特信息数据库内核研发部门负责人尚翀为大家带来了《国密SM4在PG中的利用》的演讲,西方瑞通PG技术专家刘华阳为大家带来了《PostgreSQL 在商业二次开发中的劣势》的演讲,关注国产化的敌人请不要错过。 关注内核的PostgreSQL数据库爱好者,敬请在12月15日锁定直播平台https://2021.postgresconf.cn/...。 中文技术论坛-利用实际专场 利用实际专场共计22个演讲,由别离来自云厂商、数据库厂商、ISV、银行、中国PostgreSQL受权培训机构的22位技术专家奉献。 11)利用实际-高可用方向:有五个演讲,别离是腾讯云高级工程师黄辉的《如何构建超高可用PostgreSQL之跨机房容灾建设实际》,杭州美创科技运维经理徐浩的《浅谈PG分布式高可用架构》,海能达数据库业务交付总监崔鹏的《专网通信畛域的PGHA实际》,首旅如家DBA虞乐的《大型连锁酒店业会员库迁徙至PostgreSQL及高可用》,盘古云课堂特邀高级讲师胡毅的《PostgreSQL高可用之Pacemaker计划》。这些演讲波及到pacemaker、patroni等不同的HA计划,请关注数据库高可用的敌人不要错过。 12)利用实际-运维干货方向:有五个演讲,别离是瀚高数据库工程师张波的《PostgreSQL全文检索》和咸士杰的《PostgreSQL的逻辑同步计划》,PG ACE彭冲的《PGDATA数据目录重组案例分享》,安全科技DBA熊灿灿的《从无到有,如何解决传统PostgreSQL下的运维痛点》,海能达数据库开发DBA李洋的《foreign-data wrapper在专网通信畛域的利用与实际》,这些演讲都是来自PostgreSQL数据库运维一线的经验总结,切勿错过! 13)监控与诊断方向:由南京基石数据CTO徐戟(白鳝)为大家带来《Postgres智能诊断中的门路发散与收敛》的演讲,请大家筹备好小板凳,一睹白鳝老师的PostgreSQL数据库智能诊断神功。 14)利用实际-分布式方向:有四个演讲,别离是Airwallex地面云汇资深DBA的《PostgreSQL分布式数据库摸索与尝试》,上海安畅网络PG技术顾问李博的《PG的分布式GP在生产上的利用》,SphereExJava 高级工程师端正强的《PostgreSQL 增量服务生态实际》,关注PG分布式的敌人不可错过。 15)利用实际-原理机制方向:有三个演讲, 别离是晟数科技总经理崔旭的《PostgreSQL中外部数据存储和读取》,云和恩墨姜殿斌《Postgresql体系结构中shared_buffers的作用及其优化》,盘古云课堂特邀高级讲师李鑫的《PostgreSQL中MVCC机制》,三位技术专家别离讲述了PostgreSQL外部数据存储和读取、shared_buffers作用及优化、MVCC机制,请各位PG爱好者不要错过。 16)性能优化方向: 有三个演讲,别离是某银行软件研发核心DBA王雪的《深刻解析分布式架构下PostgreSQL参数优化》的演讲,云贝数据郭一军的《PostgreSQL国产分布式数据库SQL Tuning利用案例剖析》,PostgreSQL爱好者甘植恳的《PostgreSQL场景利用-将需要和DB个性联合,实现百亿数据查问毫秒响应》,敬请期待三位在数据库优化方面的教训分享。 关注利用实际的PostgreSQL数据库爱好者,敬请在12月16日锁定直播平台https://2021.postgresconf.cn/...。 大会整体议程 特地鸣谢

December 4, 2021 · 1 min · jiezi

关于postgresql:原汁原味的韩语演讲就在PGConfAsia2021首尔子论坛

本届PGConf.Asia亚洲技术大会,将同韩国PostgreSQL用户组独特组织设置首尔子论坛, 4位韩国嘉宾将参加本次大会,别离是Ioseph Kim、Jaegeun Yu、Daniel Lee、Lee Jiho,并预计将有上百位韩国技术爱好者在线收看。上面咱们来别离介绍4位嘉宾以及演讲内容。 Ioseph Kim有超过20年的PostgreSQL应用教训,他是韩国PostgreSQL用户组的成员,并且为翻译PostgreSQL韩文文档做出了奉献,在韩国电信数据系统(Korea Telecom Data System)公司领导PostgreSQL DBA超过十年。Ioseph Kim的演讲主题是"Peculiar SQL with PostgreSQL for application developer",这是一个介绍PostgreSQL非凡SQL语法的主题。在本演讲中,Loseph Kim会讲述PostgreSQL的Lateral Joins、distinct on等语法,除此之外,还会介绍PostgreSQL14版本的新性能,敬请各位PostgreSQL爱好者期待。 Jaegeun Yu有超过10年的Oracle/MySQL/SQL Server教训,以及超过3年的PostgreSQL DBA教训,他目前就任于韩国ICT WAY公司。Jaegeun Yu为大家带来的演讲主题是"Porting from Oracle UDF and Optimization",这是一个对于Oracle的UDF(用户定义函数)迁徙到PG并优化的主题,在该主题中,Jaegeun Yu讲述了函数优化的根本准则,展现了如何在从Oracle函数移植时高效地编写PostgreSQL函数,并对迁徙的过程进行了举例说明,敬请各位PostgreSQL爱好者期待。 Daniel Lee为大家带来了主题为“Citus high-availability environment deployment based on Patroni”的演讲。在该演讲中,Daniel Lee介绍了Citus的高可用性技术解决方案,并理论演示了基于Patroni构建Citus HA环境的步骤,敬请各位PostgreSQL爱好者期待。 Lee Jiho在韩国insignal公司任部门主管,有超过20年的PostgreSQL应用教训。Lee Jiho为大家带来了主题为“Database configuration and migration and index clustering around clusters in PostgreSQL”的演讲。在该演讲中,Lee Jiho为大家介绍了Cluster的更改和降级、table clustering等内容,敬请各位PostgreSQL爱好者期待。 大会整体议程 特地鸣谢

December 4, 2021 · 1 min · jiezi

关于postgresql:聚焦PGConfAsia腾讯云分论坛Get金融级分布式数据库集大成之作

作为PGConf.Asia 2021亚洲技术大会最顶级合作伙伴,咱们将在12月15日上午9点-11点半设置腾讯云分论坛,特邀五位技术专家别离在腾讯云TDSQL PG版(原TBase)Oracle兼容、高效和智能运维、基于逻辑复制的数据迁徙、腾讯云 PostgreSQL内核优化与运维等方面为大家分享一线大厂在超高业务压力与超大数据规模下的技术干货。 腾讯云企业级分布式数据库TDSQL PG版是一款面向海量在线实时分布式事务交易和MPP实时数据分析通用型高性能数据库系统。面对利用业务产生的不定性数据爆炸需要,不论是高并发的交易还是海量的实时数据分析,TDSQL PG版都有足够能力解决。TDSQL PG版产品原型起源于技术成熟,功能强大的PostgreSQL。PostgreSQL经验了30多年的倒退,是目前世界上最好的企业级开源关系型数据库。 在此基础上腾讯云结构和发行了具备性能更丰盛、稳定性更好、兼容性更广、安全性更高、性能更强、扩展性极好的分布式数据库TDSQL PG版产品。腾讯公司对TDSQL PG版齐全自主可控,具备齐全自主知识产权,具备在中高端市场能够规模代替国外数据库的能力,在数据库根底软件层面撑持国家自主可控策略倒退。以后TDSQL PG版曾经在腾讯微信、金融、保险、通信、税务、公安、消防、政务等行业的外围交易系统上线运行。 12月15日09:00-09:30:TDSQL PG版首席架构师陈爱声将为大家带来<<Oracle兼容和金融企业客户案例分享>>。陈老师网名阿弟,是国内PG社群的出名布道者,陈老师的本次分享将次要介绍TDSQL PG版国产化替换最佳实际,具体阐明TDSQL PG版做了那些ORACLE兼容性加强,分享去O的全流程。家喻户晓,去O是一个艰巨的过程,让咱们期待TDSQL PG版在国产化替换中的精彩体现。 12月15日09:30-10:00:腾讯云高级工程师艾超将为大家带来<<逻辑复制在数据迁徙中的利用>>。家喻户晓PG的逻辑复制性能从9.4版本开始呈现,并随着PG版本的演进,逻辑复制性能有很了很多加强与进步,逻辑复制的呈现为数据迁徙提供了新的办法。摸索PostgreSQL数据迁徙办法的敌人,敬请期待艾超老师的精彩分享。 12月15日10:00-10:30:腾讯云DBA张治春将为大家带来<<基于超大规模PostgreSQL集群场景的内核优化与运维实际>>。本次分享次要集中于TencentDB for PostgreSQL内核优化和运维实际,在运维实际中解说如何基于数据库协定疾速剖析TCP包和生产环境内核降级零故障实际,关注运维干货的敌人,不要错过张治春老师的精彩分享。 12月15日10:30-11:00:腾讯云高级工程师谢灿扬将为大家带来<<TDSQL PG版企业级分布式数据库技术创新实际>>。本次分享将次要介绍企业级产品TDSQL PG版在分布式全局事务,数据安全,老本优化,简单查问性能等方面做的工作。关注分布式数据库技术的架构师、产品经理、运维工程师,请不要错过本场精彩的演讲。 12月15日11:00-11:30:腾讯云高级工程师周传稳将为大家带来<<TDSQL PG版高效和智能经营分享>>。本次分享介绍了在数据库经营平台中通过实时监控剖析与诊断、灵便的高可用管理策略、高效的冷热数据搬迁机制和牢靠的备份恢复能力等,实时发现被治理对象的状态并进行被动服务。关注高效运维和智能化服务经营的数据库技术爱好者,请勿错过。 TIPS除上述五位嘉宾外,还将有腾讯云数据库技术专家组负责人刘少蓉、专家工程师孙旭、专家工程师伍鑫、高级工程师黄辉别离在12月14日主论坛、12月15日中文技术论坛-内核专场、12月16日中文技术论坛-利用实际专场做腾讯云PostgreSQL生态演进与技术架构、云原生数据库TDSQL-C主从架构优化、剖析型数据库TDSQL-A技术架构演进、PostgreSQL高可用等方向的演讲,敬请期待下周的揭秘。 特地鸣谢

December 4, 2021 · 1 min · jiezi

关于postgresql:PostgreSQL备份工具pgdump和pgdumpall

原文链接:http://www.weijingbiji.com/1975/ PostgreSQL, 数据库 / 作者: viking PostgreSQL应用 pg_dump 和 pg_dumpall 进行数据库的逻辑备份,pg_dumpall 是对整个数据库集群进行备份,pg_dump 能够抉择一个数据库或者局部表进行备份。 pg_dump 将表构造及数据以SQL语句的模式导出到文件中,复原数据时,将导出的文件作为输出,执行其中的SQL语句,即可复原数据。 pg_dump 可能对正在应用的PostgreSQL数据库进行备份,并且不影响失常业务的读写。 一、pg_dump 罕用示例:1.1 导出单表数据 pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 –inserts > bak.sql1.2 导出多个表数据 pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 -t t2 –inserts > bak.sql1.3 导出整个数据库 pg_dump -h 127.0.0.1 -U admin -p 5432 -W db –inserts > bak.sql1.4 只导出表构造,不导出数据 pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -s > bak.sql1.5 只导出数据,不导出表构造 ...

November 25, 2021 · 1 min · jiezi

关于postgresql:PostgresSQL分区表不能统计下推的排查

在之前的分享中咱们提到过,LXDB实质上是基于PGSQL的一个拓展,相当于更换了PG的底层数据结构。本次的实际就是基于对PG分区表无奈进行统计下推的问题进行的排查和解决。 上面,开始咱们本次的实际分享: 一、问题背景近日,出于客户提出的需要,咱们在LXDB中退出了分区性能。然而在性能上线之后,咱们在测试拓展分区表的时候发现count(*)与group by这种分组统计并没有将计算下推到LXDB层去计算,而是将所有数据返回给PG层计算。因为数据格式的不同,在LXDB层的统计与将数据抛给PG层进行统计,两者性能相差了至多两个数量级。因而为了进步统计速度,咱们须要进一步调研,为何应用Postgres的分区表后没有将count(*)与group by分组统计下沉到LXDB层中去计算。 在这里再简略介绍一下LXDB,LXDB实质是Postgres的一个拓展,相当于更换了Postgres底层的数据结构,用来解决原生PG多索引数据入库慢、更新效率较差,以及在点查、全文检索、统计分析等场景的单薄之处。使得PG在单机状况下能做到百亿数据的毫秒级查问统计响应。 二、分区表建表LXDB作为一款主打轻量级的数据库产品,整体的操作命令都很便捷,建表也只须要三步。 1.创立分区表CREATE TABLE myn ( ukey text, i1 integer, i2 integer, txt1 text, txt2 text)PARTITION BY RANGE (i1);2.增加分区CREATE FOREIGN TABLE myn1 PARTITION OF myn FOR VALUES FROM (1000) TO (2000) SERVER lxdb options(store 'ios');CREATE FOREIGN TABLE myn2 PARTITION OF myn FOR VALUES FROM (2000) TO (3000) SERVER lxdb options(store 'ios');CREATE FOREIGN TABLE myn3 PARTITION OF myn FOR VALUES FROM (3000) TO (4000) SERVER lxdb options(store 'ios');CREATE FOREIGN TABLE myn4 PARTITION OF myn FOR VALUES FROM (4000) TO (5000) SERVER lxdb options(store 'ios');3.插入数据INSERT INTO myn(ukey,i1, i2, txt1,txt2) VALUES ('1111',1500, 2, 'txt2', 'txt2');INSERT INTO myn(ukey,i1, i2, txt1,txt2) VALUES ('1112',2500, 4, 'txt1', 'txt2');INSERT INTO myn(ukey,i1, i2, txt1,txt2) VALUES ('1113',3500, 6, 'txt2', 'txt2');INSERT INTO myn(ukey,i1, i2, txt1,txt2) VALUES ('1114',4500, 8, 'txt1', 'txt2');三、问题复现与剖析排查1.问题复现首先是执行查问:而后截获在LXDB里实在下发的SQL。 ...

November 3, 2021 · 1 min · jiezi

关于postgresql:2021中国数据库技术大会圆满落幕录信数软携新产品LXDB亮相大会

2021年10月18日,录信数软创始人兼CTO母延年在2021中国数据库技术大会上分享了“PostgreSQL在OLAP场景实战演练,撑持单节点百亿规模多维检索与统计”的主题演讲,这也是录信数软第二次加入DTCC数据库大会,同时录信数软重点打造的新一代轻量级检索剖析型数据库LXDB首次公开亮相技术论坛。上面,咱们一起回顾下本次分享内容。 本次DTCC大会以“数造将来”为主题,这也是录信数软第二次加入DTCC中国数据库技术大会,在2020年,咱们带来了万亿实时数仓LSQL产品实际的主题分享,而在往年的大会中,咱们带来了全新打造的新一代轻量级检索剖析型数据库LXDB的实际分享。 在分享的最后,母延年首先介绍了录信产品布局的心路历程,从解决万亿数据的LSQL开始,录信始终致力于解决大数据场景下多套组件混搭的问题,尽可量在升高零碎复杂性的同时晋升数据库自身的检索剖析性能。然而基于Hadoop的LSQL配置简单,造成了前期运维老本的高启。基于此,录信的第二代产品HSQL采纳了Hadoop+Hbase+Spark的架构,母延年称这一技术架构堪称心中最终版的全栈数据库。然而因为HSQL架构上相比于LSQL多了Hbase,这使得在解决现场问题时难度更大,并且同时精通Hadoop、Hbase、Spark的技术人员稀缺,也正是因为这些问题限度了第二代产品HSQL的倒退。基于这些因素,在录信的第三代产品LXDB的打造上,抉择了轻量级的产品架构,做到了单机1分钟,集群5分钟的超短部署工夫。在保障性能齐备性的同时采纳了规范SQL接口,也使得运维和应用老本大幅升高,研发人员能够更加专一于索引层的开发。 在随后的分享中,母延年论述了为何抉择PG作为新产品实际的底层根底,母延年将PG的劣势概括为:“成熟稳固、生态敌对、插件多,同时以公司目前的技术教训,能无效晋升PG在即席场景的性能”,在对PG进行深度优化之后,基于PG实现了数据的极速入库,在点查问、全文检索、统计分析上也实现了冲破。 之后针对于新产品LXDB的架构、装置部署和集群模式进行了简略介绍,展现了新产品LXDB的一些特定,例如对于零碎架构、硬件配合、部署形式的灵便抉择,以及在性能上对于内存表、向量检索和地理位置检索的反对和性能参数等。 而后对于LXDB的一些特定的技术实现办法进行了介绍,并且对于LXDB的性能进行了展现: 在分享的最初,母延年总结了一下LXDB将来的研发方向,根本能够演绎为“内存计算、多表关联与图数据库、基于KD-TREE的空间划分和二进制搜寻”,在将来的研发中要在进一步拓宽产品的利用场景的同时,晋升产品的性能体现。 在主题演讲之后,咱们的展台也迎来了许多心愿征询和试用产品的同学,针对于大家比拟关注的为什么数据格式没有抉择Clickhouse以及LXDB所提供的全文检索能力相比于PG自带的ES插件有何不等同问题进行了解答。前者次要是因为产品开发过程中对于技术教训的积攒不同造成的,自身Clickhouse也是十分优良的产品。而后者则是因为PG中的ES插件集成度较低,同时性能欠缺,不论是性能还是性能,都无奈满足用户的多样化检索需要。 本次为期三天的数据库大会让咱们可能接触到了以后中国数据库行业最为优良的厂商,也进一步理解了以后数据库倒退的技术趋势。在咱们的下一步布局中,将会围绕着本次带来的新产品LXDB,进一步丰盛产品的利用场景和使用性能,争取在明年的DTCC上分享更多技术实际干货!

October 27, 2021 · 1 min · jiezi

关于postgresql:一次工作日的获取技巧记录

一次工作日的获取技巧记录前言 工作日的获取还是比拟常见的,比方银行和跨境电商的交易,有时候在教育的行业也会有用到,因为咱们不晓得每一年那一天是节假日,有时候波及调休等等又要下班比拟麻烦,所以这里罗唆做一次记录,当前用到的时候能够间接把表拿来做参考,心愿这次的笔记能对读者有所帮忙。 留神,本文应用的是PostgreSql数据库,应用其余的数据库须要稍微的批改sql的内容。 日期表的设计 日期表的设计不是固定的,上面的内容其实都是供参考应用。 字段名称类型是否为空形容calendar_idvarchar(255)M主键calendar_yearvarchar(10)M年calendar_monthvarchar(10)M月calendar_datevarchar(10)M日day_of_weekvarchar(10)M天然周的第几天day_of_monthvarchar(10)M月的第几天week_of_yearvarchar(10)M年的第几个天然周month_of_yearvarchar(10)M年的第几月quarter_of_yearvarchar(10)M年的第几季is_end_monthvarchar(10)M是否月末is_end_quartervarchar(10)M是否季末is_end_halfayearvarchar(10)M是否半年末is_end_yearvarchar(10)M是否年末operator_idvarchar(50)M操作人IDoperator_namevarchar(50)M操作人名称operate_datetimestampM操作工夫res_attr1varchar(40)O预留字段1res_attr2varchar(40)O预留字段2res_attr3varchar(40)O预留字段3res_attr4varchar(40)O预留字段4数据入库模板 当然还是针对PostgreSql数据库应用,上面应用了数据库入库的sql,入库之后能够看到一年的数据内容。 上面的select insert语句来讲数据入库,当然咱们须要先依据下面的数据表构建相干的数据表才行 INSERT INTO sa_calendar_table( calendar_id, calendar_year, calendar_month, calendar_date, day_of_week, day_of_month, week_of_year, month_of_year, quarter_of_year, is_end_month, is_end_quarter, is_end_halfayear, is_end_year, operator_id, operator_name, operate_date, res_attr1, res_attr2, res_attr3, res_attr4, is_work_day ) SELECT a.calendar_id, a.calender_year, a.calender_month, a.calendar_date, a.day_of_week, a.day_of_month, a.week_of_year, a.month_of_year, a.quarter_of_year, a.is_end_month, a.is_end_quarter, a.is_end_halfayear, a.is_end_year, a.operator_id, a.operator_name, a.operator_date, a.res_attr1, a.res_attr2, a.res_attr3, a.res_attr4, a.is_work_day FROM ( SELECT gen_random_uuid() as calendar_id, to_char(tt.day, 'yyyy') as calender_year, to_char(tt.day, 'yyyy-mm') as calender_month, to_char(tt.day, 'yyyy-mm-dd') as calendar_date, extract(DOW FROM tt.day) as day_of_week, to_char(tt.day, 'dd') as day_of_month, extract(MONTH FROM tt.day) as month_of_year, extract(WEEK FROM tt.day) as week_of_year, extract(QUARTER FROM tt.day) as quarter_of_year, CASE WHEN tt.day = date_trunc('month',tt.day + interval'1 month') - interval '1 day' THEN 'Y' ELSE 'N' END as is_end_month, CASE WHEN tt.day = date_trunc('quarter',tt.day + interval '3 month') - interval '1 day' THEN 'Y' ELSE 'N' END as is_end_quarter, CASE WHEN tt.day = date_trunc('year',tt.day) + interval '6 month' - interval '1 day'THEN 'Y' ELSE 'N' END as is_end_halfayear, CASE WHEN tt.day= date_trunc('year',tt.day) + interval '12 month' - interval '1 day'THEN 'Y' ELSE 'N' END as is_end_year, 'b8617d3d-d2c9-4a2a-93ba-5b2d8b700cb0' as operator_id, 'admin' as operator_name, cast(CURRENT_DATE AS TIMESTAMP) as operator_date, null as res_attr1, null as res_attr2, null as res_attr3, null as res_attr4, CASE WHEN extract(DOW FROM tt.day) = 6 THEN 'N' WHEN extract(DOW FROM tt.day) = 0 THEN 'N' ELSE 'Y' END as is_work_day FROM ( select generate_series( (SELECT (date_trunc('year', now()) + interval '1 year' )::date as next_year_first_date) , (SELECT (SELECT (date_trunc('year', now()) + interval '2 year')::date -1 as last_year_last_date)), '1 d' ) as day ) as tt ) as a;案例:获取几天前工作日 因为集体应用的教训也不是非常丰盛,所以这里记录集体最近接触到的一个应用案例,上面的案例是应用row_number()来获取多少个日之前的工作日,依据上面的sql语句咱们能够轻松实现多少个日之前的工作日,默认会依照以后的日期作为分水岭,如果在当天之前的日期,则为正数,如果是以后天数之后的内容,则为负数。 ...

October 25, 2021 · 2 min · jiezi

关于postgresql:PostgreSQL一键安装入门教程

PostgreSQL是一个性能十分弱小的、源代码凋谢的客户/服务器关系型数据库管理系统(RDBMS)。 什么是数据库?数据库(Database)是依照数据结构来组织、存储和治理数据的仓库。每个数据库都有一个或多个不同的 API 用于创立,拜访,治理,搜寻和复制所保留的数据。咱们也能够将数据存储在文件中,然而在文件中读写数据速度绝对较慢。所以,当初咱们应用关系型数据库管理系统(RDBMS)来存储和治理的大数据量。所谓的关系型数据库,是建设在关系模型根底上的数据库,借助于汇合代数等数学概念和办法来解决数据库中的数据。ORDBMS(对象关系数据库系统)是面向对象技术与传统的关系数据库相结合的产物,查询处理是 ORDBMS 的重要组成部分,它的性能优劣将间接影响到DBMS 的性能。ORDBMS在原来关系数据库的根底上,减少了一些新的个性。RDBMS 是关系数据库管理系统,是建设实体之间的分割,最初失去的是关系表。OODBMS 面向对象数据库管理系统,将所有实体都看着对象,并将这些对象类进行封装,对象之间的通信通过音讯 OODBMS 对象关系数据库在本质上还是关系数据库。 上面咱们就来学习一下如何简略疾速的装置部署好PostgreSQL服务1.找到PostgreSQL的装置服务可点击试用。2.装置部署增加节点-抉择版本-填写参数-部署胜利装置部署过程简略又疾速,具体的装置教程如下:如何增加节点?https://www.bilibili.com/vide...如何装置部署PostgreSQLhttps://www.bilibili.com/vide...

October 20, 2021 · 1 min · jiezi

关于postgresql:问题定位-PostgreSQL-报错-requested-WAL-segment-already-been-removed

本文首发于 2016-04-25 20:59:52问题形容在应用配置了热备的 PostgreSQL 数据库时,在执行大量事务时,尤其是一个须要插入几千万条数据的 insert 事务时(典型的做法是继续 insert into t select * from t;),后盾 csv log 中报错如下: 2015-07-01 13:25:29.430 CST,,,27738,,51d112c8.6c5a,1,,2015-07-01 13:25:28 CST,,0,LOG,00000,"streaming replication successfully connected to primary",,,,,,,,"libpqrcv_connect, libpqwalreceiver.c:171",""2015-07-01 13:25:29.430 CST,,,27738,,51d112c8.6c5a,2,,2015-07-01 13:25:28 CST,,0,FATAL,XX000,"could not receive data from WAL stream:FATAL: requested WAL segment 0000000800002A0000000000 has already been removed",,,,,,,,"libpqrcv_receive, libpqwalreceiver.c:389",""问题剖析依据报错信息剖析,揣测是主库大事务产生了大量 xlog,这是因为 PostgreSQL 在执行事务过程中,直到提交时才会发送到备库。 因为该事务须要执行的工夫过长,超过了 checkpoint 的默认距离,所以导致有的 xlog 还未发送到备库却被 remove 掉了。 解决办法要解决该问题,个别可用的计划有: 办法一:调大参数 wal_keep_segments 的值将 GUC 参数 wal_keep_segments 设大一些,比方设置为2000,而每个 segment 默认值为16MB,就相当于有 32000MB,那么,最多可保留 30GB 的 xlog ,超过则删除最早的 xlog 。 ...

September 25, 2021 · 1 min · jiezi

关于postgresql:源码分析-使用-gcov-和-lcov-测试-PostgreSQL-代码覆盖率

本文首发于 2016-03-30 15:34:34引言通常咱们评判一个 test case 好坏的规范之一是代码的覆盖率,一个好的 test case 应该笼罩到所有的代码。 那么问题来了,咱们怎么晓得这个 test case 有没有笼罩到所有的代码呢? 以 PostgreSQL 为例,咱们看看如何检测 C 语言程序的代码覆盖率。 C 代码覆盖率测试,须要用到 gcc 的配套工具gcov,还有一个可视化工具lcov。 1. 装置依赖首先须要装置依赖 gcov 和 lcov 。 gcov 在 gcc 包中曾经蕴含了,lcov 是 ltp 的一个 gcov 扩大插件,用来产生HTML报告。 sudo apt install lcov2. 编译、装置 PG2.1. 编译选项介绍首先介绍一下 PostgreSQL 的编译选项 --enable-coverage: --enable-coverage build with coverage testing instrumentation这个编译项对应gcc的两个参数:-fprofile-arcs 和 -ftest-coverage。 # enable code coverage if --enable-coverageif test "$enable_coverage" = yes; then if test "$GCC" = yes; then CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage" else as_fn_error $? "--enable-coverage is supported only when using GCC" "$LINENO" 5 fifi通过man gcc查看这两个参数的含意: ...

September 25, 2021 · 8 min · jiezi

关于postgresql:源码分析-PostgreSQL-回归测试详解

本文首发于 2016-03-30 15:29:35背景回归测试是 PostgreSQL 的测试方法之一。 回归测试,须要当时定义好测试脚本(通常是 SQL 脚本,放在 sql 目录中),同时定义好调用执行测试脚本的预期正确输入文件(通常放在 expected 目录中)。 测试应用 make check 或 make installcheck 进行,它会通过 pg_regress 程序调用 sql 目录中的 SQL,并收集输入后果(通常放到 results 目录中),最初 pg_regress 会对 expected 目录和 results 目录中的文件应用 diff 进行一一比拟。 如果比拟发现文件内容不统一,会将不统一的后果输入到 regression.diffs 文件中,并返回这个 TEST CASE failed。 然而这种测试方法实际上有一些须要留神的中央,例如咱们应用不同的本地化设置,时区可能失去的后果和冀望的后果就不一样。另外有些不可预知的后果,例如随机值,数据的程序,执行打算和优化器相干参数无关。这些因素都可能导致测试后果和预期不统一,那么咱们就须要人为去修复这种 failed。 PostgreSQL 的主代码测试文件在 src/test/regress 目录中。 这个目录的构造如下: postgres@digoal-> ll -rt total 1.2M -rw-r--r-- 1 postgres postgres 579 Jun 10 03:29 standby_schedule # 测试standby的调度配置, 其实就是调度sql里的文件名 -rw-r--r-- 1 postgres postgres 2.3K Jun 10 03:29 serial_schedule # 串行测试的调度配置 -rw-r--r-- 1 postgres postgres 937 Jun 10 03:29 resultmap # 不同的测试平台的后果映射文件,因为不同平台某些测试后果可能不雷同,所以一个expected文件不能反对所有的平台。例如浮点数测试。 -rwxr-xr-x 1 postgres postgres 4.4K Jun 10 03:29 regressplans.sh -rw-r--r-- 1 postgres postgres 20K Jun 10 03:29 regress.c -rw-r--r-- 1 postgres postgres 159 Jun 10 03:29 README -rw-r--r-- 1 postgres postgres 2.7K Jun 10 03:29 pg_regress_main.c -rw-r--r-- 1 postgres postgres 1.6K Jun 10 03:29 pg_regress.h -rw-r--r-- 1 postgres postgres 69K Jun 10 03:29 pg_regress.c -rw-r--r-- 1 postgres postgres 3.6K Jun 10 03:29 parallel_schedule # 并行测试的调度配置 -rw-r--r-- 1 postgres postgres 624 Jun 10 03:29 Makefile -rw-r--r-- 1 postgres postgres 5.6K Jun 10 03:29 GNUmakefile drwxrwxrwx 2 postgres postgres 4.0K Jun 10 03:38 output drwxrwxrwx 2 postgres postgres 4.0K Jun 10 03:38 input drwxrwxrwx 2 postgres postgres 4.0K Jun 10 03:38 data 一些测试数据 drwxrwxrwx 2 postgres postgres 4.0K Sep 7 14:51 sql # 测试用到的SQL drwxrwxr-x 2 postgres postgres 4.0K Sep 7 14:52 results # 通过pg_regress调用sql目录中的脚本,失去的后果 drwxrwxrwx 2 postgres postgres 4.0K Sep 7 14:51 expected # 执行sql目录中的文件对应的正确返回后果 下层目录构造如下,其中蕴含了一些其余的测试指标,例如隔离级别的测试,本地化测试,性能测试,线程平安测试。等。 ...

September 25, 2021 · 10 min · jiezi

关于postgresql:实用工具-PostgreSQL-数据库压力测试工具-pgbench-使用示例

本文首发于 2015-12-23 21:04:17环境PG数据库提供了一款轻量级的压力测试工具叫 pgbench,其实就是一个编译好后的扩展性的可执行文件。 测试环境: CentOS 5.7 in VMWare 8.0 PG:9.1.2 数据库参数: max_connection=100 其余默认 留神: 本文只为阐明 pgbench 的应用办法,因而,并未对数据库参数调优。 装置进入源码安装包,编译、装置: cd postgresql-9.1.2/contrib/pgbench/make allmake install装置结束当前能够在 bin 文件夹下看到新生成的 pgbench 文件: $ ll $PGHOME/bin/pgbench-rwxr-xr-x. 1 postgres postgres 50203 Jul 8 20:28 pgbench参数介绍[postgres@localhost bin]$ pgbench --helppgbench is a benchmarking tool for PostgreSQL.Usage: pgbench [OPTIONS]... [DBNAME]Initialization options: -i invokes initialization mode -F NUM fill factor -s NUM scaling factorBenchmarking options: -c NUM number of concurrent database clients (default: 1) -C establish new connection for each transaction -D VARNAME=VALUE define variable for use by custom script -f FILENAME read transaction script from FILENAME -j NUM number of threads (default: 1) -l write transaction times to log file -M {simple|extended|prepared} protocol for submitting queries to server (default: simple) -n do not run VACUUM before tests -N do not update tables "pgbench_tellers" and "pgbench_branches" -r report average latency per command -s NUM report this scale factor in output -S perform SELECT-only transactions -t NUM number of transactions each client runs (default: 10) -T NUM duration of benchmark test in seconds -v vacuum all four standard tables before testsCommon options: -d print debugging output -h HOSTNAME database server host or socket directory -p PORT database server port number -U USERNAME connect as specified database user --help show this help, then exit --version output version information, then exit局部参数中文含意: ...

September 25, 2021 · 5 min · jiezi

关于postgresql:特性分析-PostgreSQL-PrimaryStandby-主备流复制机制

本文首发于 2015-11-21 20:02:26引言PostgreSQL 在 9.0 之后引入了主备流复制机制,通过流复制,备库一直的从主库同步相应的数据,并在备库 apply 每个 WAL record,这里的流复制每次传输单位是 WAL 日志的 record 。而 PostgreSQL 9.0 之前提供的办法是主库写完一个 WAL 日志文件后,才把 WAL 日志文件传送到备库,这样的形式导致主备提早特地大。同时,PostgreSQL 9.0 之后提供了 Hot Standby,备库在利用 WAL record 的同时也可能提供只读服务,大大晋升了用户体验。 主备总体构造PostgreSQL 主备流复制的外围局部由 walsender,walreceiver 和 startup 三个过程组成。 walsender 过程是用来发送 WAL 日志记录的,执行程序如下: PostgresMain()->exec_replication_command()->StartReplication()->WalSndLoop()->XLogSendPhysical()walreceiver 过程是用来接管 WAL 日志记录的,执行程序如下: sigusr1_handler()->StartWalReceiver()->AuxiliaryProcessMain()->WalReceiverMain()->walrcv_receive()startup 过程是用来 apply 日志的,执行程序如下: PostmasterMain()->StartupDataBase()->AuxiliaryProcessMain()->StartupProcessMain()->StartupXLOG() walsender 和 walreceiver 过程流复制过程walsender 和 walreceiver 交互次要分为以下几个步骤: walreceiver 启动后通过 recovery.conf 文件中的 primary_conninfo 参数信息连向主库,主库通过连贯参数 replication=true 启动 walsender 过程;walreceiver 执行 identify_system 命令,获取主库 systemid/timeline/xlogpos 等信息,执行 TIMELINE_HISTORY 命令拉取 history 文件;执行 wal_startstreaming 开始启动流复制,通过 walrcv_receive 获取 WAL 日志,期间也会回应主库发过来的心跳信息(接管位点、flush 位点、apply 位点),向主库发送 feedback 信息(最老的事务 id),防止 vacuum 删掉备库正在应用的记录;执行 walrcv_endstreaming 完结流复制,期待 startup 过程更新 receiveStart 和 receiveStartTLI,一旦更新,进入步骤2。 ...

September 25, 2021 · 2 min · jiezi

关于postgresql:应用案例-PostgreSQL-libpq-网络库接口操作数据库示例

本文首发于 2015-11-12 09:23:46前言本文成文较早,测试程序验证的是 PostgreSQL 9.3 版本的 libpq,实践上,对其余版本也应该实用。 对于 libpq 各个函数接口的阐明,参考:http://www.postgres.cn/docs/9... 示例1/* * testlibpq.c * * Test the C version of libpq, the PostgreSQL frontend library. */#include <stdio.h>#include <stdlib.h>#include <libpq-fe.h> static voidexit_nicely(PGconn *conn){ PQfinish(conn); exit(1);} intmain(int argc, char **argv){ const char *conninfo; PGconn *conn; PGresult *res; int nFields; int i, j; /* * If the user supplies a parameter on the command line, use it as the * conninfo string; otherwise default to setting dbname=postgres and using * environment variables or defaults for all other connection parameters. */ if (argc > 1) conninfo = argv[1]; else conninfo = "dbname = postgres"; /* Make a connection to the database */ conn = PQconnectdb(conninfo); /* Check to see that the backend connection was successfully made */ if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn)); exit_nicely(conn); } /* * Our test case here involves using a cursor, for which we must be inside * a transaction block. We could do the whole thing with a single * PQexec() of "select * from pg_database", but that's too trivial to make * a good example. */ /* Start a transaction block */ res = PQexec(conn, "BEGIN"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } /* * Should PQclear PGresult whenever it is no longer needed to avoid memory * leaks */ PQclear(res); /* * Fetch rows from pg_database, the system catalog of databases */ res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } PQclear(res); res = PQexec(conn, "FETCH ALL in myportal"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } /* first, print out the attribute names */ nFields = PQnfields(res); for (i = 0; i < nFields; i++) printf("%-15s", PQfname(res, i)); printf("\n\n"); /* next, print out the rows */ for (i = 0; i < PQntuples(res); i++) { for (j = 0; j < nFields; j++) printf("%-15s", PQgetvalue(res, i, j)); printf("\n"); } PQclear(res); /* close the portal ... we don't bother to check for errors ... */ res = PQexec(conn, "CLOSE myportal"); PQclear(res); /* end the transaction */ res = PQexec(conn, "END"); PQclear(res); /* close the connection to the database and cleanup */ PQfinish(conn); return 0;}示例2/* * testlibpq2.c * Test of the asynchronous notification interface * * Start this program, then from psql in another window do * NOTIFY TBL2; * Repeat four times to get this program to exit. * * Or, if you want to get fancy, try this: * populate a database with the following commands * (provided in src/test/examples/testlibpq2.sql): * * CREATE TABLE TBL1 (i int4); * * CREATE TABLE TBL2 (i int4); * * CREATE RULE r1 AS ON INSERT TO TBL1 DO * (INSERT INTO TBL2 VALUES (new.i); NOTIFY TBL2); * * and do this four times: * * INSERT INTO TBL1 VALUES (10); */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/time.h>#include <libpq-fe.h> static voidexit_nicely(PGconn *conn){ PQfinish(conn); exit(1);} intmain(int argc, char **argv){ const char *conninfo; PGconn *conn; PGresult *res; PGnotify *notify; int nnotifies; /* * If the user supplies a parameter on the command line, use it as the * conninfo string; otherwise default to setting dbname=postgres and using * environment variables or defaults for all other connection parameters. */ if (argc > 1) conninfo = argv[1]; else conninfo = "dbname = postgres"; /* Make a connection to the database */ conn = PQconnectdb(conninfo); /* Check to see that the backend connection was successfully made */ if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn)); exit_nicely(conn); } /* * Issue LISTEN command to enable notifications from the rule's NOTIFY. */ res = PQexec(conn, "LISTEN TBL2"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "LISTEN command failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } /* * should PQclear PGresult whenever it is no longer needed to avoid memory * leaks */ PQclear(res); /* Quit after four notifies are received. */ nnotifies = 0; while (nnotifies < 4) { /* * Sleep until something happens on the connection. We use select(2) * to wait for input, but you could also use poll() or similar * facilities. */ int sock; fd_set input_mask; sock = PQsocket(conn); if (sock < 0) break; /* shouldn't happen */ FD_ZERO(&input_mask); FD_SET(sock, &input_mask); if (select(sock + 1, &input_mask, NULL, NULL, NULL) < 0) { fprintf(stderr, "select() failed: %s\n", strerror(errno)); exit_nicely(conn); } /* Now check for input */ PQconsumeInput(conn); while ((notify = PQnotifies(conn)) != NULL) { fprintf(stderr, "ASYNC NOTIFY of '%s' received from backend PID %d\n", notify->relname, notify->be_pid); PQfreemem(notify); nnotifies++; } } fprintf(stderr, "Done.\n"); /* close the connection to the database and cleanup */ PQfinish(conn); return 0;}示例3/* * testlibpq3.c * Test out-of-line parameters and binary I/O. * * Before running this, populate a database with the following commands * (provided in src/test/examples/testlibpq3.sql): * * CREATE TABLE test1 (i int4, t text, b bytea); * * INSERT INTO test1 values (1, 'joe''s place', '\\000\\001\\002\\003\\004'); * INSERT INTO test1 values (2, 'ho there', '\\004\\003\\002\\001\\000'); * * The expected output is: * * tuple 0: got * i = (4 bytes) 1 * t = (11 bytes) 'joe's place' * b = (5 bytes) \000\001\002\003\004 * * tuple 0: got * i = (4 bytes) 2 * t = (8 bytes) 'ho there' * b = (5 bytes) \004\003\002\001\000 */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <libpq-fe.h> /* for ntohl/htonl */#include <netinet/in.h>#include <arpa/inet.h> static voidexit_nicely(PGconn *conn){ PQfinish(conn); exit(1);} /* * This function prints a query result that is a binary-format fetch from * a table defined as in the comment above. We split it out because the * main() function uses it twice. */static voidshow_binary_results(PGresult *res){ int i, j; int i_fnum, t_fnum, b_fnum; /* Use PQfnumber to avoid assumptions about field order in result */ i_fnum = PQfnumber(res, "i"); t_fnum = PQfnumber(res, "t"); b_fnum = PQfnumber(res, "b"); for (i = 0; i < PQntuples(res); i++) { char *iptr; char *tptr; char *bptr; int blen; int ival; /* Get the field values (we ignore possibility they are null!) */ iptr = PQgetvalue(res, i, i_fnum); tptr = PQgetvalue(res, i, t_fnum); bptr = PQgetvalue(res, i, b_fnum); /* * The binary representation of INT4 is in network byte order, which * we'd better coerce to the local byte order. */ ival = ntohl(*((uint32_t *) iptr)); /* * The binary representation of TEXT is, well, text, and since libpq * was nice enough to append a zero byte to it, it'll work just fine * as a C string. * * The binary representation of BYTEA is a bunch of bytes, which could * include embedded nulls so we have to pay attention to field length. */ blen = PQgetlength(res, i, b_fnum); printf("tuple %d: got\n", i); printf(" i = (%d bytes) %d\n", PQgetlength(res, i, i_fnum), ival); printf(" t = (%d bytes) '%s'\n", PQgetlength(res, i, t_fnum), tptr); printf(" b = (%d bytes) ", blen); for (j = 0; j < blen; j++) printf("\\%03o", bptr[j]); printf("\n\n"); }} intmain(int argc, char **argv){ const char *conninfo; PGconn *conn; PGresult *res; const char *paramValues[1]; int paramLengths[1]; int paramFormats[1]; uint32_t binaryIntVal; /* * If the user supplies a parameter on the command line, use it as the * conninfo string; otherwise default to setting dbname=postgres and using * environment variables or defaults for all other connection parameters. */ if (argc > 1) conninfo = argv[1]; else conninfo = "dbname = postgres"; /* Make a connection to the database */ conn = PQconnectdb(conninfo); /* Check to see that the backend connection was successfully made */ if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn)); exit_nicely(conn); } /* * The point of this program is to illustrate use of PQexecParams() with * out-of-line parameters, as well as binary transmission of data. * * This first example transmits the parameters as text, but receives the * results in binary format. By using out-of-line parameters we can * avoid a lot of tedious mucking about with quoting and escaping, even * though the data is text. Notice how we don't have to do anything * special with the quote mark in the parameter value. */ /* Here is our out-of-line parameter value */ paramValues[0] = "joe's place"; res = PQexecParams(conn, "SELECT * FROM test1 WHERE t = $1", 1, /* one param */ NULL, /* let the backend deduce param type */ paramValues, NULL, /* don't need param lengths since text */ NULL, /* default to all text params */ 1); /* ask for binary results */ if (PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "SELECT failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } show_binary_results(res); PQclear(res); /* * In this second example we transmit an integer parameter in binary * form, and again retrieve the results in binary form. * * Although we tell PQexecParams we are letting the backend deduce * parameter type, we really force the decision by casting the parameter * symbol in the query text. This is a good safety measure when sending * binary parameters. */ /* Convert integer value "2" to network byte order */ binaryIntVal = htonl((uint32_t) 2); /* Set up parameter arrays for PQexecParams */ paramValues[0] = (char *) &binaryIntVal; paramLengths[0] = sizeof(binaryIntVal); paramFormats[0] = 1; /* binary */ res = PQexecParams(conn, "SELECT * FROM test1 WHERE i = $1::int4", 1, /* one param */ NULL, /* let the backend deduce param type */ paramValues, paramLengths, paramFormats, 1); /* ask for binary results */ if (PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "SELECT failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } show_binary_results(res); PQclear(res); /* close the connection to the database and cleanup */ PQfinish(conn); return 0;}欢送关注我的微信公众号【数据库内核】:分享支流开源数据库和存储引擎相干技术。 ...

September 25, 2021 · 8 min · jiezi

关于postgresql:特性介绍-PostgreSQL-的依赖约束详解-系统表-pgdepend-pgconstraint

本文首发于 2015-11-04 15:28:08前言本文成文较早,依赖的是 PostgreSQL 9.3 版本,后续内核版本可能不兼容,但外围原理是相通的,可做参考。 表构造pg_dependpg_depend 是 postgres 的一张零碎表,用来记录数据库对象之间的依赖关系,除了常见的主外键,还有其余一些外部依赖关系,能够通过这个零碎表出现进去。 postgres=# \d+ pg_depend Table "pg_catalog.pg_depend" Column | Type | Modifiers | Storage | Stats target | Description-------------+---------+-----------+---------+--------------+------------- classid | oid | not null | plain | | 零碎OID objid | oid | not null | plain | | 对象OID objsubid | integer | not null | plain | | refclassid | oid | not null | plain | | 援用零碎OID refobjid | oid | not null | plain | | 援用对象ID refobjsubid | integer | not null | plain | | deptype | "char" | not null | plain | | pg_depend类型Indexes: "pg_depend_depender_index" btree (classid, objid, objsubid) "pg_depend_reference_index" btree (refclassid, refobjid, refobjsubid)Has OIDs: noOID 是 Object Identifier 的缩写,是对象 ID 的意思,因为是无符号的4字节类型,示意范畴不够大,所以个别不必做主键应用,仅用在零碎外部,比方零碎表等利用。能够与一些整型数字进行转换。与之相干的零碎参数是 default_with_oids ,默认是 off 。pg_depend.deptype 字段自 9.1 版本之后多了一个 extension 的类型,目前类型有: ...

September 25, 2021 · 3 min · jiezi

关于postgresql:Postgresql-慢查询语句记录与分析

1. 记录postgresql 以 12 版本为例咱们须要先关上 postgresql 的慢查问日志,此为前置条件,先记录下咱们工夫较长的查问。 编辑配置文件:/var/postgres12/data/postgresql.conf#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements # and their durations, > 0 logs only # statements running at least this number # of milliseconds批改 -1 为 200,示意大于等于 200 毫秒的操作将被记录到日志。 重载配置/path/to/pg_ctl reload -D /path/to/pgdata2. 获取慢查问语句2.1 切 postgresql 超户sudo su - postgres2.2 获取慢查问语句关上日志文件less /path/to/pg_log/postgresql.log跳到文件开端Shift + G查问关键字 duration因为被记录的日志格局形如: duration xxx ms select ….3. 剖析连贯 postgresql 服务器path/to/psql -U postgres -d <database>关上计时\timing语句剖析explain select max(id) as max_id from test_table where created < now() - interval '24 hours'; QUERY PLAN------------------------------------------------------------------------------------------------------------------------------ Finalize Aggregate (cost=12673.45..12673.46 rows=1 width=8) -> Gather (cost=12673.24..12673.45 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=11673.24..11673.25 rows=1 width=8) -> Parallel Seq Scan on test_table (cost=0.00..10631.80 rows=416575 width=8) Filter: (created < (now() - '24:00:00'::interval))(6 rows)explain 是显示查问打算,不会真正执行,所以甚至 update 也能够放在 explain 前面。然而要留神,不能是 explain analyze ,带了 analyze 就真跑了,所以这个不能用于 DML 。 ...

September 19, 2021 · 1 min · jiezi

关于postgresql:解决PostgreSQL-执行超时的情况

应用背景 最近在应用PostgreSQL的时候,在执行一些数据库事务的时候,先后呈现了statement timetout 和idle-in-transaction timeout的问题,导致数据库操作失败。 经钻研查找,PostgreSQL有对于SQL语句执行超时和事务执行超时的相干配置,而默认超时工夫是10000毫秒,即10秒钟的工夫,这样会导致执行工夫稍长的工作执行失败。能够通过批改PostgreSQL服务器配置文件的形式批改默认配置。 参数阐明 statement_timeoutstatement_timeout 在 postgresql 被用来管制语句执行时长,单位是ms。$ vi postgresql.conf statement_timeout = 0 # in milliseconds, 0 is disabled默认是0,示意语句能够始终执行上来。 如果设置为10000,那就意味着语句最多能够执行 10000ms = 10s。 倡议设置为0,禁用该参数。 1idle_in_transaction_session_timeout PostgreSQL 9.6版本开始反对主动查杀超过指定工夫的 idle in transaction 闲暇事务连贯,用于清理利用代码中遗记敞开已开启的事务,或者零碎中存在僵死过程等。 idle_in_transaction_session_timeout 在 postgresql 被用来管制事务执行时长,单位是ms。 $ vi postgresql.conf #idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled 默认是0,示意语句能够始终执行上来。超时会报 FATAL: terminating connection due to idle-in-transaction timeout。 批改办法 查找配置 通过命令查找到postgresql配置文件的地位,用vi进行编辑。 1 2find / -name "postgresql.conf"vi /var/lib/pgsql/9.6/data/postgresql.conf 批改参数 进入vi编辑界面,能够通过vi查找命令定位到相干参数,批改成适合的工夫,保留退出。 ...

August 5, 2021 · 2 min · jiezi

关于postgresql:Postgresql-分区表分区范围

论断:分区表创立分区时,范畴定义是左闭右开。创立分区表create table orders( id bigint, create_time timestamp(0) default current_timestamp) partition by range (id);创立默认分区当插入数据没有子分区匹配时,会增加到默认分区。 create table def partition of orders default;创立子分区create table orders_1 partition of orders for values from (1) to (10);create table orders_2 partition of orders for values from (10) to (20);插入数据测试1: insert into orders(id) values (10);记录在 orders_2 子分区中。 测试2: insert into orders(id) values (20);记录在 def 默认分区中。

July 21, 2021 · 1 min · jiezi

关于postgresql:postgresql-常用函数

罕用函数 postgres=# select pg_backend_pid(); pg_backend_pid---------------- 7968(1 row)

July 13, 2021 · 1 min · jiezi

关于postgresql:postgresql-set-transaction-snapshot

用法SET TRANSACTION SNAPSHOT snapshot_id 能够在一个新的事务中应用曾经存在的事务的snapshot。这个snapshot必须首先进行export(pg_export_snapshot)。SET TRANSACTION SNAPSHOT必须在新事务开始执行。事务隔离级别必须为SERIALIZABLE or REPEATABLE READ。新事务隔离级别如果为SERIALIZABLE,则老事务的也必须是SERIALIZABLE。如果老事务时read-only,新事务也须要为read-only。 应用场景,session 1 export snapshot,session 2 通过SET TRANSACTION SNAPSHOT与session 1 的snapshot同步。这样不论session 1 export snapshot后有没有别的session 提交事务,都不影响session 2。 session 1 export snapshot此时t1中没有id=897的tuple [postgres@hgcndn ~]$ psql -p 5432 -U postgres -h 127.0.0.1psql (12.4)Type "help" for help.postgres=# BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;BEGINpostgres=# SELECT pg_export_snapshot(); pg_export_snapshot--------------------- 00000003-0000000F-1(1 row)postgres=# select * from t1 where id=897; id | name----+------(0 rows)session 2 进行commit在t1中insert了id=897的tuple [postgres@hgcndn ~]$ psql -p 5432 -U postgres -h 127.0.0.1psql (12.4)Type "help" for help.postgres=#postgres=# select * from t1 where id=897; id | name----+------(0 rows)postgres=# insert into t1 values(897, 'test');INSERT 0 1postgres=# select * from t1 where id=897; id | name-----+------ 897 | test(1 row)session 3默认的read committed的隔离级别下,能看到session 2提交的批改然而在新事务中,通过SET TRANSACTION SNAPSHOT与session 1中export snapshot的事务对齐后,看不到session 2中insert 的tuple ...

June 25, 2021 · 1 min · jiezi

关于postgresql:postgresql-prepare-transaction

一般事务为session级别,prepare transaction将以后事务与以后session拆散,进行长久化记录,带来的益处是进步事务提交胜利概率。 一般事务是session级别的,在commit过程中,如果server产生异样,如零碎解体,断电等,session隐没,commit失败。而prepare transaction是长久化记录的,即便产生零碎解体,重启后事务依然能够进行commit。 prepare transaction次要用于实现两阶段提交,个别用于事务管理器应用,一般client不要间接应用,应该应用begin, start transaction。 前提:零碎参数max_prepared_transactions须要大于0设置办法见alter system 如果max_prepared_transactions为0会报错 postgres=# prepare transaction 'prep1';ERROR: prepared transactions are disabledHINT: Set max_prepared_transactions to a nonzero value.prepare transaction postgres=# begin;BEGINpostgres=# insert into t1 values(666, 'test666');INSERT 0 1postgres=# select * from t1 where id=666; id | name-----+--------- 666 | test666(1 row)postgres=# prepare transaction 'prep1';PREPARE TRANSACTIONpostgres=# select * from pg_prepared_xacts; transaction | gid | prepared | owner | database-------------+-------+-------------------------------+----------+---------- 3316 | prep1 | 2021-06-25 01:48:39.618381+00 | postgres | postgres(1 row)postgres=# \qcommit prepared能够在prepare transaction的session中执行,也可在其它session中执行,也能够在server重启后执行。 ...

June 25, 2021 · 2 min · jiezi

关于postgresql:postgresql-alter-system

alter system用于批改整个server级别的配置,它通过批改文件来实现。只能由superuser执行,并且不能在事务中执行(批改了配置文件postgresql.auto.conf,不能回退) 配置后,参数不会立即失效,须要零碎从新reload参数(pg_reload_conf(), pg_ctl reload, 或者向postmaster发送SIGHUP),有的参数是server启动时才失效,则须要restart server(pg_ctl restart)。 用法 ALTER SYSTEM SET configuration_parameter { TO | = } { value | 'value' | DEFAULT }ALTER SYSTEM RESET configuration_parameterALTER SYSTEM RESET ALL用法例子 alter system ALTER SYSTEM set max_prepared_transactions to 10;postgres=# show max_prepared_transactions; max_prepared_transactions--------------------------- 0(1 row)[root@centos]# cat /usr/local/pgsql/data/postgresql.auto.conf# Do not edit this file manually!# It will be overwritten by the ALTER SYSTEM command.max_prepared_transactions = '10'非启动用参数失效,不须要重启server如??? select pg_reload_conf();pg_ctl xxx reload启动用参数失效,须要重启服务如max_prepared_transactions pg_ctl xxx restart参考资料https://www.postgresql.org/do... ...

June 25, 2021 · 1 min · jiezi

关于postgresql:postgresql相关链接

libpqhttps://www.postgresql.org/do... protocolhttps://www.postgresql.org/do...https://zhuanlan.zhihu.com/p/... set:https://www.postgresql.org/do... prepare:https://www.postgresql.org/do... prepare-transaction:https://www.postgresql.org/do... savepoint:https://www.postgresql.org/do...

June 24, 2021 · 1 min · jiezi

关于postgresql:kettle真是神器啊3分钟将mysql中的数据迁移到postgres中

明天公司机房因为停电几台开发机的磁盘损坏了。运维同学通知我,磁盘复原比较慢,如果焦急用,能够先申请一个新的虚拟机应用。没方法又要各种装装装,这是第二次了吧,心中真是策马奔流 再暗骂一句老板抠门,也不晓得土豪的大厂是不是一人一台ECS用。 因为第一次故障,丢了几天代码,当初不论性能做没做完,都会先把代码push到仓库,仓库要是挂了公司的IT部门是不是都要去顶楼jump、jump了。 就剩下数据库了,尽管有备份,然而老是重装也挺浪费时间的,马上618了,看能不能去网上搜一个便宜一点的ecs装个mysql,尽管不能报销,但节省下来本人的工夫摸鱼不香么。 犹豫一下筹备下单了。隔壁的XD冲过来说,有个收费的云数据库MemFireDB在搞流动,他有邀请码,能够先试试,ecs先不慌买。试试又不花钱,不过如同是postgres的,我之前是用的mysql,得先把数据同步下来。用kettle来做数据同步,有点杀鸡用牛刀的感觉。须要科普的同学能够看b站这个视频,https://www.bilibili.com/vide..., 不想看的,我截了几张图在上面 kettle介绍 程序目录,这里丢个网盘地址 链接:https://pan.baidu.com/s/1hPxr... 提取码:d3lf 下载实现后间接解压,点击外面的spoon.bat启动 新建job,而后点击右边的“主对象树”,配置“DB连贯” 配置源数据库,我的源数据库是Mysql的,这里填上相应的参数 配置指标数据库,这里登陆云数据库的控制台获取数据库连贯IP地址,名称,将参数填写到kettle 点击“工具”--“向导”--“复制多表向导”,抉择源数据库和指标数据库 抉择要复制的表 批改工作名 点击“Finish”实现配置 点击“Run”开始复制数据,复制实现后,能够登录云数据库控制台查看数据 kettle性能十分丰盛,很多大数据公司都用他来做数据集成,这个迁徙只能算是杀鸡用牛刀了。

June 24, 2021 · 1 min · jiezi