• [问题求助] 【PostgreSQL】【绑核功能】PostgreSQL 13.3如何绑核
    【功能模块】PostgreSQL 13.3【操作步骤&问题现象】1、如何给postgresql 13.3版本绑核,使用numactl -C 32-63 测试不生效,还运行在别的cpu上【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 常用 PostgreSQL 预防数据丢失解决方案
    PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。下面看下常用 PostgreSQL 预防数据丢失解决方案。PostgreSQL 本身不具备数据闪回和数据误删除保护功能,但在不同场景下也有对应的解决方案。本文由作者在 2021 PCC 大会的演讲主题《PostgreSQL 数据找回》整理而来,上一篇《盘点 | 常用 PG 数据恢复方案概览》 介绍了 PostgreSQL 常见的 数据恢复方案。本篇将介绍 预防数据丢失方案的实现原理及使用示例。预防数据丢失方案前文提到数据丢失的主要操作为 DDL 和 DML 。本篇主要介绍关于 DDL 和 DML 操作,如何预防数据丢失的方案。DDL 操作事件触发器当事件以其定义的方式在数据库中相关的发生时,触发事件触发器。主要可预防以下四种 DDL 事件。事件说明ddl_command_startDDL 执行前执行ddl_command_endDDL 执行后执行, 通过 pg_event_trigger_ddl_commands() 可以获取操作的对象sql_dropDDL 执行后执行, 通过 pg_event_trigger_dropped_objects() 可以获取所有被删除的对象table_rewriteDDL 执行前执行, 例如 ALTER TABLE、ALTER TYPE 等当表被删除后,可以通过 ddl_command_start 事件组织删除操作。12345678910CREATE OR REPLACE FUNCTION disable_drops()    RETURNS event_trigger LANGUAGE plpgsql AS $$BEGIN     RAISE EXCEPTION 'drop table denied';END$$; -- 创建事件触发器函数  CREATE EVENT TRIGGER event_trigger_disable_drops    ON ddl_command_start WHEN TAG in('drop table')    EXECUTE PROCEDURE disable_drops(); -- 创建事件触发器,禁止drop table操作事件触发器,无法修改 drop 的任何行为,因此只能拒绝,来确保数据不被删除,由其他拥有更高权限的数据库管理员删除。12345678910test=# \dy                                        事件触发器列表            名称             |       Event       | 拥有者  | 使能 |     函数      |    标签    -----------------------------+-------------------+---------+------+---------------+------------ event_trigger_disable_drops | ddl_command_start | lzzhang | 启用 | disable_drops | DROP TABLE(1 行记录)  test=# drop table lzzhang;ERROR:  drop table deniedCONTEXT:  PL/pgSQL function disable_drops() line 3 at RAISE删除表的操作由拥有更高级权限的数据库管理员操作。12345BEGIN;ALTER EVENT TRIGGER event_trigger_disable_drops DISABLE;DROP TABLE lzzhang;ALTER EVENT TRIGGER event_trigger_disable_drops ENABLE;COMMIT;回收站DDL 会将文件从操作系统中完全删除,因此唯一的办法是将删除改为换一个"位置",类似 Windows 中回收站。pgtanshscan[1] 便是一种回收站工具,并且只能通过插件采用 hook 的方式来实现。123456if (nodeTag(parsetree) == T_DropStmt){                if (stmt->removeType == OBJECT_TABLE){AlterObjectSchemaStmt *newstmt = makeNode(AlterObjectSchemaStmt);newstmt->newschema = pstrdup(trashcan_nspname);通过其代码示例可以看出, DROP TABLE 操作被转换成了 ALTER 操作。由于 pgtrashcan 代码陈旧,已经有 8 年未更新,不适配新版本 PG。且仅支持移动功能,并不支持彻底清除功能。由此,pgtrashcan 做了很多优化。• 支持新版本 PG 14/13/12• 通过插件的 depend 功能,依赖 pg_cron• 自动设置 pg_cron 将其回收站中超过 1 天的数据清除DML 操作通过参数 vacuum_defer_cleanup_age 来调整 Dead 元组在数据库中的量,以便恢复误操作的数据。接下来将根据 流复制延迟恢复和 备份恢复两种设计方案来具体介绍:流复制延迟恢复PostgreSQL 流复制时可以通过 recovery_min_apply_delay 设置相应的延迟时间。例如设置 5 小时,备库可以延迟应用最近 5 小时的日志,提供最多 5 小时的数据恢复窗口,延迟的应用日志的同时并不影响日志的接受,源库的日志仍然是实时的被延迟恢复节点接受。找回数据的具体操作步骤如下:• 暂停延迟恢复 pg_wal_replay_pause() ;• 通过 pg_dump 或 copy 操作将其需要的数据找出来;• 通过 psql、copy、pg_restore 等操作将数据导入源库中;• 继续延迟 pg_wal_replay_resume() 。备份恢复从备份模式的角度来说,备份主要包括以下两种:• 逻辑备份不能进行实时备份,因此不太适用于数据找回,会丢失很多数据。• 物理备份物理备份拥有与源集群完全一致的数据,因此可以持续使用源集群的 WAL 日志,达到数据找回的目标,原理上也是延迟恢复。物理备份与 PITR 结合,可恢复数据到任意时间点。可选用工具有很多,如下几种是常用的恢复工具。• pg_basebackup[2]• pg_probackup[3]• pgbackrest[4]• barman[5]• pg_rman[6]总结• 注意权限划分。危险操作或是 DDL 等影响大的操作,一定要由第二个数据库管理员操作。• 提前做好数据找回和数据安全的方案规划。• 流复制延迟恢复,同样需要设置 recovery_target_xid 、recovery_target_time 或recovery_target_lsn 来精准的定位到完整的数据集。• pg_waldump 是数据找回必备的一个功能。• 如果方案是重型的,轻型的插件有时会是更好的选择。• 若无任何准备,且不能安装任何插件,可第一时间将数据库关机!!!防止 Dead 元组被清理,拷贝整个集群,使用拷贝后的集群用 pg_resetwal 进行数据恢复。参考引用[1] :pgtrashcan:https://github.com/petere/pgtrashcan [2]:pg_basebackup:https://www.postgresql.org/docs/10/app-pgbasebackup.html 转载自https://www.jb51.net/article/235029.htm
  • [技术干货] 将PostgreSQL插件移植到openGauss指导
    1 概述PostgreSQL社区提供了丰富的插件,但由于openGauss和PostgreSQL存在一定的差异,如线程/进程模型、系统表和视图等,无法直接为openGauss所用,不可避免的需要在插件上做整改。本文档主要对PostgreSQL插件移植到openGauss的过程提供指导说明,旨在让开发人员对PG插件所需要的修改有一个具体的了解,基于该文档,可基本实现PG插件移植到openGauss。2 约束由于openGauss与PostgreSQL在内核上存在不少差异,这篇文档未能覆盖所有这些差异,因此仅依赖该文档有可能无法实现PG插件的完全迁移,部分差异需要开发者深入内核源码识别,然后可将识别出来的差异补充到该博客的第9章对应小节的表格中(博客对应的gitee地址: https://gitee.com/opengauss/blog/blob/master/content/zh/post/chenxiaobin/,具体操作可见blog仓库的将PostgreSQL插件移植到openGauss指导.md ),有任何问题可在博客下方留言讨论。3 移植步骤1) 将PG插件的代码拷贝到openGauss源码的contrib目录下2) 配置环境变量,需要将数据库的bin和lib加在操作系统的环境变量PATH和LD_LIBRARY_PATH中3) 到插件目录下,执行make && make install,编译安装插件。4) 编译成功后,到数据库中执行create extension extension_name即可使用。通常步骤3和4不会直接成功,需要一些必须的修改。下面分类别说明移植PG插件所需要做的修改。4 Makefile文件1) 当前有两种方式支持插件编译,一种是依赖源码编译,一种是用pgxs的方式编译,支持插件在一个已经安装的数据库服务上进行编译。建议选择前者的方式,如果采用后者,需要定义USE_PGXS,但是可能出现部分头文件找不到的问题,这时候需要到源码拷贝头文件到目标目录。ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else subdir = contrib/pg_freespacemap top_builddir = ../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif2) -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code)。使用-fPIC,可以使得动态库可以被多个程序共享。不加fPIC加载的so,要在加载时根据加载到的位置再次重定位。override CPPFLAGS :=$(filter-out -fPIE, $(CPPFLAGS)) -fPIC5 类型转换1) ANSI C规定,void指针可以复制给其他任意类型的指针,其他任意类型的指针也可以复制给void指针,他们之间复制不需要强制类型转换。但是c++不支持,需要做强制类型转换。buffer = palloc(MAX_LINESIZE); -> buffer = (char*)palloc(MAX_LINESIZE);2) 部分c++编译器不支持const char*到char*的隐式转换,需要做强制类型转换。6 函数声明1) C语言中并没有重载和类这些特性,编译出的符号与C++不同,例如print(int i),不会被编译为_print_int,而是直接编译为_print等。因此如果直接在C++中调用C的函数会失败,例如调用print(3),c++中实际上会去找_print_int(3),这样就会找不到。加上extern “C”,指示编译器这部分代码按C语言来进行编译,而不是C++。extern PGDLLEXPORT Datum orafce_to_char_timestamp(PG_FUNCTION_ARGS); -> extern "C" PGDLLEXPORT Datum orafce_to_char_timestamp(PG_FUNCTION_ARGS);可以通过nm -D so文件查看生成的符号。7 安全函数整改1) 推荐使用安全函数(可见securec.h),并对安全函数的返回值作检查,openGauss定义了几个常用的检查宏,如下。#define check_memcpy_s(r) securec_check_c((r), "", "") #define check_memmove_s(r) securec_check_c((r), "", "") #define check_memset_s(r) securec_check_c((r), "", "") #define check_strcpy_s(r) securec_check_c((r), "", "") #define check_strncpy_s(r) securec_check_c((r), "", "") #define check_strcat_s(r) securec_check_c((r), "", "") #define check_strncat_s(r) securec_check_c((r), "", "") #define check_gets_s(r) securec_check_ss_c((r), "", "") #define check_sprintf_s(r) securec_check_ss_c((r), "", "") #define check_snprintf_s(r) securec_check_ss_c((r), "", "") #define check_scanf_s(r) securec_check_ss_c((r), "", "")下面是安全函数整改的示例。memcpy(d, u, clen); -> check_memcpy_s(memcpy_s(d, strlen(d), u, clen));为了方便和完全地作安全函数整改,这里提供一个查找危险函数的正则表达式。(wmemcpy\()|(wmemove\()|(memmove\()|(wcscpy\()|(wcsncpy\()|(strcat\()|(wcscat\()|(strncat\()|(wcsncat\()|(strtok\()|(wcstok\()|(sprintf\()|(swprintf\()|(vsprintf\()|(vswprintf\()|(snprintf\()|(vsnprintf\()|(vsnprintf_truncated\()|(snprintf_truncated\()|(scanf\()|(wscanf\()|(vscanf\()|(vwscanf\()|(fscanf\()|(fwscanf\()|(vfscanf\()|(vfwscanf\()|(sscanf\()|(swscanf\()|(vsscanf\()|(vswscanf\()|(gets\()|(strcpy\()|(strcpy\()|(strncpy\()|(strncpy\()|(strcat\()|(strncat\()|(memcpy\()|(memcpy\()|(memset\()|(memset\()8 变量转换1) 对比PostgreSQL,openGauss收集了原有的全局变量,将其收集在了g_instance、t_thrd、u_sess(分别是全局变量、线程变量和会话变量)等结构体内,因此需要作相应替换(通过编译报错体现,需要到内核代码层面查看变量具体存放位置)。插件的全局变量可通过nm -D so | grep ‘B’排查。(具体见7.7)econtext = error_context_stack; -> econtext = t_thrd.log_cxt.error_context_stack;2) PG采用进程模型,用户会话进来时会创建一个独立的进程去处理,此时插件定义的全局变量在该进程内就是唯一的会话变量。而openGauss采用线程模型,所有会话共享同一份全局变量,因此需要将全局变量修改为会话变量。对于只读的全局变量,保持原样即可,而对于多次修改的变量,需要作如下修改。a. 如果不考虑在线程池模式下使用插件,将全局变量修改为THR_LOCAL变量,即线程变量,因为用户会话进来会创建一个独立的线程。b. 如果需要线程池,就需要作额外的修改。线程池模式下,一个用户会话可能会切换多个线程,单纯的将全局变量改为线程变量,在切换线程时会丢失对该变量的修改。openGauss提供了插件自定义会话变量的方式,具体实现如下。(以dblink为例)内核侧在u_sess中定义一个指针数组extension_session_vars_array,和标识数组大小的变量extension_session_vars_array_size,数组用于存放插件会话变量的结构体。   typedef struct knl_session_attr_common { … uint32 extension_session_vars_array_size; void** extension_session_vars_array; } knl_session_attr_common;插件侧需定义一个全局的下标变量,用于获取数组元素,并且提供set_extension_index函数,内核侧会调用该函数来设置下标。示例如下。static uint32 dblink_index; void set_extension_index(uint32 index) { dblink_index = index; }此外,插件侧还需要定义步骤1提到的会话变量结构体,存放该插件自身所有的会话变量,以及提供函数init_session_vars,主要是初始化该结构体,并把指针存放在数组的对应下标位置。示例如下。#include "commands/extension.h" typedef struct dblink_session_context { remoteConn* pconn; HTAB* remoteConnHash; } dblink_session_context; void init_session_vars(void) { RepallocSessionVarsArrayIfNecessary(); dblink_session_context* psc = (dblink_session_context*)MemoryContextAllocZero(u_sess->self_mem_cxt, sizeof(dblink_session_context)); u_sess->attr.attr_common.extension_session_vars_array[dblink_index] = psc; psc->pconn = NULL; psc->remoteConnHash = NULL; }最终,在插件使用会话变量时,根据下标到数组中获取对应的结构体指针即可。dblink_session_context* get_session_context() { if (u_sess->attr.attr_common.extension_session_vars_array[dblink_index] == NULL) { init_session_vars(); } return (dblink_session_context*)u_sess->attr.attr_common.extension_session_vars_array[dblink_index]; } void example() { remoteConn* pconn = get_session_context()->pconn; }具体方案实现可见社区PR(https://gitee.com/opengauss/openGauss-server/pulls/1101),插件整改可参考其中对dblink的整改。9 其他除了上述修改点,还存在很多一些较为细节的地方,其中包括有C和C++的差异,例如在C++中new关键字不能作标识符等;大多数还是openGauss和PostgreSQL内核上的差异,下文会对这些差异作详细说明。此外,有些插件可能是基于PG内核新特性开发的,openGauss并不支持,可以考虑将特性整合到插件,必要时修改内核。下面列举openGauss和PostgreSQL(REL_13_STABLE)内核上的差异,第2章中提到该部分需要不断更新完善,目前仅列出极少部分。9.1 API序号API_01PostgreSQLvoid table_close(Relation relation, LOCKMODE lockmode);openGauss#define heap_close(r,l) relation_close(r,l) void relation_close(Relation relation, LOCKMODE lockmode);作用close any relation差异名称不同序号API_02PostgreSQLRelation table_open(Oid relationId, LOCKMODE lockmode)openGaussRelation heap_open(Oid relationId, LOCKMODE lockmode, int2 bucketid=-1);作用open a heap relation by relation OID差异名称不同;openGauss的heap_open增加了一个可选参数bucketid9.2 系统表序号SYSTAB_01系统表pg_class差异openGauss新增字段:reltoastidxid, reldeltarelid, reldeltaidx, relcudescrelid, relcudescidx, relhasoids, relhaspkey, relcmprs, relhasclusterkey, relrowmovement, parttype, relfrozenxid64, relbucket, relbucketkeyPostgreSQL 新增字段:relrowsecurity, relforcerowsecurity, relispopulated, relispartition, relrewrite , relminmxid , relpartbound relkind字段可选值差异:PostgreSQL中用p和I表示分区表和分区索引,openGauss用字段parttype表示。备注具体描述可见《开发者指南》-系统表和系统视图-系统表-PG_CLASS9.3 系统视图序号SYSVIEW_01系统表pg_tables差异openGauss新增字段:tablecreator, created, last_ddl_time PostgreSQL 新增字段:rowsecurity备注具体描述可见《开发者指南》-系统表和系统视图-系统视图-PG_TABLES9.4 系统函数9.5 LOCK9.6 Memory Context9.7 全局变量PostgreSQLopenGauss作用域error_context_stackt_thrd.log_cxt.error_context_stackThreadWalSndCaughtUpt_thrd.walsender_cxt.walSndCaughtUpThreaddisable_costg_instance.cost_cxt.disable_costInstancecpu_tuple_costu_sess->attr.attr_sql.cpu_tuple_costcpu_tuple_cost10 常见错误信息1) 编译安装时报错:dangerous relocation: unsupported relocation解决方法:参考4.2,在Makefile中添加下面一句。override CPPFLAGS :=$(filter-out -fPIE, $(CPPFLAGS)) -fPIC2) 编译安装时报错:error: invalid conversion from ‘void’ to ‘char’ [-fpermissive]解决方法:参考5类型转换3) create extension时报错:could not find function “xxx” in file “xxx.so”解决方法:参考6函数声明。
  • [技术干货] 直播预告 | 12月30日,openGauss与PostgreSQL核心技术解读及优势对比
    直播时间 12月30日 14:00—15:30 由Gauss松鼠会联合墨天轮、openGauss社区共同主办的专题分享之:“openGauss与PostgreSQL核心技术解读及优势对比” 将于本周四(12月30日)震撼登场。活动详情PostgreSQL 全球开发组于 2021-05-20 发布了 PostgreSQL 14 的第一个 beta 版本且目前已经提供了下载。最新版本的PostgreSQL的更新主要体现在负载情况下的性能优化,增加了数据类型和SQL,增强信息监控能力,逻辑复制的性能以及安全方面的强化。而作为基于PostgreSQL而开发的国产数据库领军产品openGauss也在今年9月30日发布了2.1.0的最新版本。市面上对于PostgreSQL及openGauss之间的对比及讨论一直非常热烈。openGauss毫无疑问在很多方面,尤其是内核增强上,规避了PostgreSQL出现的很多问题,但是相比较老牌的数据库产品,也有很多不足和需要继续进步的地方。活动主题本次直播将针对openGauss及PostgreSQL 进行核心技术的解读与对比,从专业的角度来分析双方产品的核心技术以及自身优势,同时也包括对于数据库国产化发展及生态构建的展望。直播福利本次直播给大家准备了超多精美礼物!届时进入直播间即有机会领取!礼物包括:墨天轮定制黑胶晴雨伞墨天轮定制款蓝牙耳机Gauss松鼠会保温杯Gauss松鼠会无线充电宝套装《openGauss数据库核心技术》 活动嘉宾大会议程扫码立即报名扫描二维码或点击文末“阅读原文”即可报名小伙伴们行动起来吧与大咖对话的机会千万别错过~- END -阅读原文
  • [问题求助] Postgresql性能优化求指点
    有进展了,谢谢。
  • [技术干货] 我使用DRS同步MySQL Float类型数据到PostgreSQL,为什么两边数据"不一致"
    最近收到一个客户反馈使用DRS同步后,源库和目标库的数据不一致。数据一致性是DRS的生存之本,团队上下非常重视,收到反馈后马上联系客户了解情况排查原因,最终发现原来是虚惊一场。那么这个“不一致”是怎么产生的?它底层的根本原因又是什么呢?接下来我们一起来挖一挖。 ### 问题现象 客户使用DRS创建了MySQL到PostgreSQL的同步任务,MySQL表中存在一个FLOAT类型的列,DRS任务启动后会在PostgreSQL中对应创建一个FLOAT4的列。同步过程中在MySQL中插入一条FLOAT列值为3.1415926的数据,同步后在源库MySQL中SELECT出来的数据是3.14159,而在目标库PostgrSQL中SELECT出来却是3.1415925。 ### 复现步骤: 1. 在源库建表: ``` CREATE TABLE `float_test` ( `id` int(11) primary key, `id2` float ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ``` 2. 创建DRS任务,同步这张表的数据到PostgreSQL。目标库会自动创建下表: ``` CREATE TABLE "root"."float_test" ( "id" int PRIMARY KEY, "id2" FLOAT4 ) ``` 3. 在源库insert数据: ``` insert into `float_test` values (1, 3.1415926); ``` 4. 数据同步之后 通过mysql客户端查询: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/30/212544xwlhjzvltsvzwq3e.png) 通过postgresql客户端查询: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/30/220225tpxlepjbgjhm6sgi.png) 而通过jdbc查询: mysql: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/30/220318ok6xwp6d82fzlwr3.png) postgresql: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202110/30/220331oolheuirfknpihww.png) ### 问题原因: mysql底层存储3.1415926的时候,binlog中记录的数据为3.1415925,DRS从binlog中解析出来数据,同步到PostgrSQL的也是3.1415925。 而通过mysql的driver进行select的时候,mysql driver对数据进行了截断,所以查出来是3.14159,而PostgrSQL的driver没有进行截断,导致通过两种driver select出的数据不一致。 如果不想让driver截断,可以在jdbc的url中增加useServerPrepStmts=true的option。
  • [问题求助] 【鲲鹏920产品】【Postgresql功能调优】性能问题分析热点函数
    运行TPCC,perf top 发现热点函数为tts_buffer_heap_getsomeattrs10%ExecInterpExpr 7%ExecParallelHashTableInsert 6%网上未找到相关联的参数能将热点函数消掉,特来鲲鹏论坛求助解答谢谢
  • [问题求助] mycat配置postgresql数据源报驱动不对如何解决?
    mycat做分库处理,后端数据源是postgresql-10,按照华为云文档,安装arm的java,同时增加startup_nowrap.sh文件的JAVA_HOME变量,在启动mycat时还是提示JDBCHeartBeat error java.sql.SQLException: No suitable driver found for jdbc:postgresql://192.168.0.228:5432/xxx,如图: 同时,我们买了带有MYCAT公共镜像的ECS,还是报一样的错,请问是ARM没有mycat对PG的支持吗?因为在X86上是可以的
  • [问题求助] 购买RDS postgresql怎么用navicat连接
    购买了RDS PostgreSQL增强版,这个数据库我想通过我本地电脑的Navicat 连接看一下配置,怎么去操作
  • [DevKit] 【Hyper Tuner调优实践12】基于系统性能分析工具的PostgreSQL调优实践
    1      调优介绍使用HyperTuner系统性能分析工具对PostgreSQL所在系统执行系统全景分析,找到性能瓶颈点,并根据分析结果进行优化修改,从而实现PostgreSQL系统的性能增强。2      组网环境项目说明服务器TaiShan 200 服务器(型号2280)CPUKunpeng 920OSCentOS 8.0应用postgres (PostgreSQL) 11.3调优工具HyperTuner 2.2.T4压力测试工具pgbench (PostgreSQL) 11.3 3      前提条件服务器和操作系统正常运行。PC端已经安装SSH远程登录工具。PostgreSQL数据库环境上HyperTuner工具已经安装完成,并正常运行。PostgreSQL数据库已经安装完成,并启动,并准备2000W条数据。压力测试工具pgbench正常运行。 4      调优思路在进行调优之前,先用pgbench工具测试PostgreSQL运行8个客户端8个线程的性能数据。使用HyperTuner系统性能分析工具针对PostgreSQL应用从全景分析维度进行性能分析,并根据性能分析结果得出性能瓶颈点以及优化方法。针对性能瓶颈点分别进行性能优化。完成优化后,再用pgbench工具测试PostgreSQL运行8个客户端8个线程的性能数据,与调优之前的性能进行对比,判断性能是否有提升。5      操作步骤5.1      调优前数据库性能测试1.运行pgbench程序    执行压测命令pgbench -M prepared -r -c 8 -f /home/test/login.sql -j 8 -n -T 30 -h 127.0.0.1 -p 5432 -U postgres postgres,查看tps和statement latencies in milliseconds 2.执行系统全景性能分析 创建系统全景分析任务,配置参数如下图   查看系统性能指标 从tps参数值中,可以看到sda的tps值为854.75,设备的带宽使用率超过基准值,触发优化建议:磁盘I/O存在问题,建议更换高性能硬盘或检查进程是否有可优化的读写操作。5.2      优化方法1.开启PostgreSQL的异步提交日志,修改PostgreSQL配置文件,执行vim /data/pgsql/postgresql.conf 命令编辑配置文件。    synchronous_commit = off    wal_writer_delay = 10ms2.切换postgres用户,执行重启PostgreSQL命令,使配置文件生效。/usr/local/pgsql/bin/pg_ctl -D /data/pgsql -l logfile restart5.3      调优后测试1.创建全景分析任务 2.运行Pgbench,执行压力测试数据库tps从793提升至3276,INSERT和UPDATE的语句延时从5.804ms和4.105ms降低至1.1359ms和0.955ms,性能有所提升。3.查看系统性能指标 系统tps从854提升至1176,设备的带宽使用率降低,未触发优化建议 6      调优结果分析  本实践中,经过对PostgreSQL参数进行了调优后,从pgbench性能和系统性能指标可以看出,性能有所提升。
  • [问题求助] GaussDB和PostgreSQL的区别在哪里?
    GaussDB和PostgreSQL的区别在哪里?
  • [数据库] 【Postgresql移植】【CRC检验算法】AArch64平台如何使用__crc32cb/cw/cd/ch
    postgresql移植指南中,关于AArch64平台(src/port/pg_crc32c_armv8.c)中描述的“使用__crc32cb/cw/cd/ch”的具体操作方法
  • [技术干货] 阿里李飞飞5月底发布的PolarDB for PostgreSQL直接针对OpenGauss,华为只能跟上
    上个帖子乏人问津,只好自己再说几句。纯粹的性能驱动的数据处理市场已趋于饱和,未来市场的发展方向更多的将是功能和性价比驱动。最能适应未来市场的数据平台将会是云上的全球分布的HTAP数据库,它将结合MPP数据库的并发计划并发执行技术与New SQL的基于时钟的全球分布部署能力和基于共识协议的高可靠模块,能在全球部署下支持HTAP应用,做到One size fits most。典型应用是用以替换原有的单机或集群TP系统,以本地TP为主,分布TP为辅,并增加分布AP能力,可直接访问分布的数据无需ETL。上述构架的优点是在单一系统内,以尽可能小的成本满足绝大多数客户的多样的数据处理需求。阿里云5月底发布的PolarDB for PostgreSQL正是这样的体系,并且直接针对OpenGauss。在数据库国产替换的潮流下将之开源是为了抢夺客户,纯TP的OpenGauss将没有多少竞争能力,华为要想不被彻底甩开,只有跟进同样的构架。所幸现有一条终南捷径,那就是将成熟的基于PostgreSQL的YugabyteDB上的基于混合时钟HLC的分布事务处理模块和基于Raft的HA移植到现有的分布PostgreSQL上。
  • [技术干货] PostgreSQL 高质量学习交流网站及链接推荐
    在学习和使用PG过程中,经常会翻阅一些资料,现在我把在这个过程积累得一些高质量的链接分享给大家。如果大家发现很好的链接,也欢迎分享给我,从而改进。官方   =================官方:https://www.postgresql.org/官方仓库:https://git.postgresql.org/gitweb/planet PG:https://planet.postgresql.org/  包括Top posters、Top teams、Feeds、Planet官方wiki:https://wiki.postgresql.org/wiki/Main_PageWeekly News: https://postgresweekly.com/英文手册:https://www.postgresql.org/docs/中文手册:http://www.postgres.cn/docs/10/中文社区:http://www.postgres.cn/pgadmin:https://www.pgadmin.org/#pg大会:https://postgresconf.org/插件大全:https://pgxn.org/pg欧洲:https://www.postgresql.eu/commitfest: https://commitfest.postgresql.org/厂商   =====================openGauss:https://opengauss.org/zh/富士通: https://www.postgresql.fastware.com/  postgres pro: https://postgrespro.com/二象限:https://www.2ndquadrant.com/en/EDB:https://www.enterprisedb.com/Crunchy Data:https://www.crunchydata.com/PostgreSQL Internal :http://postgresintl.com/HeteroDB:http://heterodb.com/  PG-Strom插件,基于GPU和NVME,大数据处理Cybertec:https://www.cybertec-postgresql.com/时序数据库 timescale:https://docs.timescale.com/https://www.pipelinedb.com/  High-performance time-series aggregationhttps://www.citusdata.com/ 分布式shardinghttps://pgexercises.com/XL官网:https://www.postgres-xl.org/pganalyze:https://pganalyze.com/https://www.elephantsql.com/博客  =====================数据库周报:https://dbweekly.com/issues、二象限博客中心:https://www.2ndquadrant.com/en/blog/PG每周新闻 https://grantzhou.github.io/PostgreSQL-Weekly-News-1-9/Bruce Momjian博客(PG社区co-founder) https://momjian.us/ 最新资讯:http://depesz.com/专注PG数据库维护的一个小团队  https://dataegret.com/news-blog/开源关系型数据库PostgreSQL生态系列资源 https://github.com/liuyuanyuan/FantasticPostgres/internal Postgres:http://www.interdb.jp/pg/index.htmlhttp://postgresguide.com/https://blog.panoply.io/https://pgdba.org/SeveralNines:https://severalnines.com/database-bloghttps://blog.panoply.io/percona:https://www.percona.com/blog其它  =====================https://pgmodeler.io/ PG建模PGTune https://pgtune.leopard.in.ua/#/  参数优化小工具
  • [开发应用] GaussDB A 的默认数据库postgres可以修改么?
    【功能模块】数据库名称修改;问题描述:使用GaussDB A数据库用户omm登录, 使用gsql命令行修改的默认数据库postgres,提示有连接section正在使用,而连接使用gsql停止命令,停止不掉;问题1:请问默认数据库postgres是不可以修改的是么?问题2:使用数据库用户,我可以一直免密登录postgres,是么?期待专家的接疑,谢谢
总条数:115 到第
上滑加载中