Posts by Year

2018

PostgreSQL(PPAS 兼容Oracle) 从零开始入门手册 - 珍藏版

17 minute read

背景 云数据库PPAS版,是阿里云与EnterpriseDB公司(简称EDB)合作基于PostgreSQL高度兼容Oracle语法的数据库服务,为用户提供易于操作的迁移工具,兼容范围涵盖:PL/SQL、数据类型、高级函数、表分区等。 用户可以直接在阿里云购买PPAS进行使用。 如果在购买PPAS前,想试用一下...

PostgreSQL pipelinedb 流计算插件 - IoT应用 - 实时轨迹聚合

1 minute read

背景 IoT场景,车联网场景,共享单车场景,人的行为位点等,终端实时上报的是孤立的位点,我们需要将其补齐成轨迹。 例如共享单车,下单,开锁,生成订单,骑行,关闭订单,关锁。这个过程有一个唯一的订单号,每次上报的位点会包含时间,订单号,位置。 根据订单号,将点聚合为轨迹。 使用pipelinedb插件,可以实...

PostgreSQL datediff 日期间隔(单位转换)兼容SQL用法

1 minute read

背景 使用datediff,对时间或日期相减,得到的间隔,转换为目标单位(日、月、季度、年、小时、秒。。。等)的数值。 DATEDIFF ( datepart, {date|timestamp}, {date|timestamp} ) 周 select datediff(week,'2009-01-0...

PostgreSQL DNS 解析功能 - get ip, get host name

11 minute read

背景 在数据库中,根据主机名获得IP,根据IP解析主机名。 这个功能没有什么花哨,可以通过C函数或者PYTHON函数得到。 src/common/ip.c /* * pg_getnameinfo_all - get name info for Unix, IPv4 and IPv6 sock...

PostgreSQL 分区表、继承表 记录去重方法

2 minute read

背景 当使用数据库分区或继承功能,在PK层面上出现分区与分区,或分区与主表出现了重复的键值时,可以通过tableoid进行甄别,同时通过ONLY TABLE的操作方法进行删除。 select tableoid::regclass delete|select|update|truncate only ...

阿里云ppas 逻辑备份(导出)、还原 - 导出到本地、从本地导入

2 minute read

背景 阿里云RDS PPAS是PG的企业版本,兼容PG同时兼容Oracle。 由于ppas做了很多兼容ORACLE的工作,所以元数据与PG社区版本有很大不同,那么用户在使用RDS PPAS时,如果有导出、导入的需求,请使用EDB 的pg_dump, pg_restore,请不要使用pg社区版本的pg_dump与...

AWS redshift->hdb pg(Greenplum),DDL语法转换规则

5 minute read

背景 redshift 和 Greenplum都是源自PostgreSQL的MPP数据库: https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases 语法上有一些差异,从redshift切换到greenplum(或阿里云hdb pg)时,DDL...

PostgreSQL JOIN limit 优化器 成本计算 改进 - mergejoin startup cost 优化

7 minute read

背景 PostgreSQL limit N的成本估算,是通过计算总成本A,以及估算得到的总记录数B得到: (N/B)*A 大概意思就是占比的方法计算 对于单表查询,这种方法通常来说比较适用,但是如果数据分布有倾斜,实际上也并不一定适用,例如以下两种情况: 1、符合条件的数据占总记录数的50%...

PostgreSQL Mastering book 序

less than 1 minute read

背景 从互联网、移动互联网到互联网+、再到IoT、万物互联、人工智能,计算机数十年就从科技行业渗透到了几乎所有的传统行业,线上线下打通,甚至将来会完全融合的状态。企业数据爆炸性增长,数据库在整个变革中承担了非常重要的角色,掀起了数据驱动的狂潮。 PostgreSQL数据库凭借丰富的功能,强大的扩展接口能力,稳定...

PostgreSQL bloom filter index 扩展 for bigint

2 minute read

背景 凡是支持HASH函数,以及相等operator的类型,都可以使用bloom filter index . 扩展方法见本文。 原文 https://obartunov.livejournal.com/201027.html Bloom index by default works for int4 an...

PostgreSQL pg_top pgcenter - 实时top类工具

3 minute read

背景 PostgreSQL 的统计信息、实时会话信息、操作系统状态信息等汇总,统计,展示。 https://www.postgresql.org/docs/devel/static/monitoring-stats.html 1 pgcenter https://github.com/lesovsky/pgc...

PostgreSQL pgmetrics - 多版本、健康监控指标采集、报告

23 minute read

背景 pgmetrics,GO写的一款PostgreSQL 多版本、健康监控指标采集、报告开源软件。 https://github.com/rapidloop/pgmetrics 结合pgdash,可以实现被监控PG实例的可视化,指标值变更告警等。 https://pgdash.io/ pgmetrics...

PostgreSQL PostGIS point join polygon (by ST_xxxx) - pglz_decompress 性能优化

1 minute read

背景 在空间数据中,通常会有轨迹、点、面的数据,假设有两张表,一张为面的表,一张为点的表,使用包含 ST_xxxx(c.geom, p.geom) 来进行JOIN(例如以面为单位,聚合统计点的数量)。 本文介绍了空间JOIN的性能分析,瓶颈分析,优化方法。 原文 http://blog.cleverele...

PostgreSQL Heap Only Tuple - HOT (降低UPDATE引入的索引写IO放大)

30 minute read

背景 PostgreSQL目前默认的存储引擎在更新记录时,会在堆内产生一条新版本,旧版本在不需要使用后VACUUM回收,回收旧版本前,需要先回收所有关联这个版本的所有索引POINT。 PG的索引的KEY为索引字段或表达式的值,VALUE为行号。 8.3以前,每个TUPLE版本(行号)都有对应的索引POINT,...

PostgreSQL 内存表可选项 - unlogged table

10 minute read

背景 内存表,通常被用于不需要持久化,变更频繁,访问RT低的场景。 目前社区版本PostgreSQL没有内存表的功能,postgrespro提供了两个插件可以实现类似内存表的功能。 https://postgrespro.com/docs/enterprise/10/in-memory 《PostgreSQ...

PostgreSQL undo多版本存储引擎 zheap测试

5 minute read

背景 undo 存储引擎,由于大量使用inplace update,所以大幅度降低了表膨胀的概率。并且减少了垃圾回收引入的IO。 预计会在PG 12的版本中release。 目前可以下源码进行测试。 部署zheap引擎 1、源码使用 https://github.com/EnterpriseDB/zhea...

PostgreSQL 11 1Kw TPCC , 1亿 TPCB 7*24 强压耐久测试

29 minute read

背景 TPCC, TPCB是工业标准的OLTP类型业务的数据库测试,包含大量的读、写、更新、删除操作。 7*24小时强压耐久测试,主要看数据库在长时间最大压力下的 性能、稳定性、可靠性。 测试CASE : 1、1000万 tpcc 2、1亿 tpcb 测试时长7天。 测试环境 与如下测试同一台ECS虚...

PostgreSQL pgbench tpcb 海量数据库测试 - 分区表测试优化

3 minute read

背景 pgbench是PG的一款测试工具,内置的测试CASE为tpcb测试。同时支持用户自己写测试CASE。 大量自定义CASE参考 https://github.com/digoal/blog/blob/master/201711/readme.md 当我们使用tpcb测试CASE时,如果生成的数据量过于...

PostgreSQL pgbench tpcb 数据生成与SQL部分源码解读

4 minute read

背景 pgbench是PG的一款测试工具,内置的测试CASE为tpcb测试。同时支持用户自己写测试CASE。 大量自定义CASE参考 https://github.com/digoal/blog/blob/master/201711/readme.md 本文为pgbench 内置tpcb的解读。 源码 s...

PostgreSQL pageinspect 诊断与优化GIN (倒排) 索引合并延迟导致的查询性能下降问题

2 minute read

背景 GIN索引为PostgreSQL数据库多值类型的倒排索引,一条记录可能涉及到多个GIN索引中的KEY,所以如果写入时实时合并索引,会导致IO急剧增加,写入RT必然增加。为了提高写入吞吐,PG允许用户开启GIN索引的延迟合并技术,开启后,数据会先写入pending list,并不是直接写入索引页,当pendi...

PostgreSQL 11 100亿 tpcb 性能测试 on ECS

19 minute read

背景 PostgreSQL 11 发布在即,以下是tpcc与tpch测试的结果: 《PostgreSQL 11 tpcc 测试(103万tpmC on ECS) - use sysbench-tpcc by Percona-Lab》 《(TPC-H测试 SF=10,SF=200) PostgreSQL 11 ...

PostgreSQL 大版本升级方法之一 - 不落地并行导出导入

1 minute read

背景 尽量快的大版本升级的方法。 一、9.4以下版本,使用pg_dump并行导出,pg_restore并行导入,迁移 (导出使用源版本pg_dump,导入使用目标版本pg_restore。如果是ppas请使用enterprisedb对应版本。) 1、(源库)全局元数据(用户、表空间)导出 需要superus...

PostgreSQL 块级 snapshot (flash back) - postgrespro improvement

1 minute read

背景 Postgrepro提供了一个snapshot fs的功能,允许用户对数据库状态打快照,并可以在将来迅速的闪回到某个过去的快照。 这个功能是通过数据库page级COW来实现的,类似ZFS文件系统的快照功能,在PostgreSQL 内核层面实现了。 snapshot fs与逻辑flashback quer...

PostgreSQL 任意字段数组合 ANDOR 条件,指定返回结果条数,构造测试数据算法举例

1 minute read

背景 在进行一些实际的POC测试时,需要根据业务提出的需求构造数据,比如按照任意字段数组合 AND\OR 条件,指定返回结果条数,构造测试数据。 需求 表记录数A 表字段数B 1、N个字段等值OR,命中M条记录 (两个条件无法同时满足) 2、X个字段等值AND,命中Y条记录 字段取值空间如何计算? ...

PostgreSQL sharding : citus 系列5 - worker节点网络优化

4 minute read

背景 citus 节点间的网络需求: 1、cn节点访问所有worker节点。oltp业务的访问较频繁。 2、重分布数据时,worker节点间相互访问。访问频度不大,OLAP业务常见,一旦有可能数据交换吞吐较大。 citus的cn节点连worker节点为有两种模式, 一种为事务级保持连接模式(每条SQL发起...

PostgreSQL 相似搜索插件介绍大汇总 (cube,rum,pg_trgm,smlar,imgsmlr,pg_similarity) (rum,gin,gist)

2 minute read

背景 在搜索业务场景中,相似搜索是一个非常常见的需求。 PostgreSQL有很多插件、索引可以支持海量数据的高效率搜索。 以下是一些案例: 《Greenplum 轨迹相似(伴随分析)》 《PostgreSQL 相似文本检索与去重 - (银屑病怎么治?银屑病怎么治疗?银屑病怎么治疗好?银屑病怎么能治疗好?...

Greenplum 优化CASE - 对齐JOIN字段类型,使用数组代替字符串,降低字符串处理开销,列存降低扫描开销

2 minute read

背景 Greenplum通常被用作OLAP,在一些用户使用过程中,可能因为数据结构设计,SQL问题等原因导致性能不佳,虽然通过增加节点可以解决问题,但是如果能优化的话,可以节约不少硬件资源。 例如 1、对齐JOIN字段类型。如果等值JOIN的字段类型不一致,无法使用HASH JOIN。 2、对齐where条...

Deepgreen(Greenplum) 多机部署测试 , TPC-H VS citus

16 minute read

背景 多机部署deepgreen,与greenplum部署方法类似。 本文仅用于测试。 1 环境 与之前测试citus的环境一致,9台ECS虚拟机。 xxx.xxx.xxx.228 digoal-citus-gpdb-test001 xxx.xxx.xxx.224 digoal-citus-gpdb-t...

PostgreSQL dblink异步调用实践,跑并行多任务 - 例如开N个并行后台任务创建索引, 开N个后台任务跑若干SQL

5 minute read

背景 使用DBLINK异步接口,可以非常方便的实现跑后台任务,如果要让数据库执行若干条SQL,开N个并行执行,同样可以使用DBLINK封装成API进行调用。 例如,结合我前面的一些文字,可以实现自动选择索引接口、指定并行度、指定表空间、给所有字段创建索引。 《自动选择正确索引访问接口(btree,hash,g...

PostgreSQL sharding : citus 系列2 - TPC-H

6 minute read

背景 紧接着上一篇文档,本文测试citus的tpc-h能力(包括兼容性). 《PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)》 《(TPC-H测试 SF=10,SF=200) PostgreSQL 11 vs 10 vs Deepgreen》 h...

PostgreSQL citus, Greenplum 分布式执行计划 DEBUG

17 minute read

背景 开启DEBUG,可以观察citus, Greenplum的SQL分布式执行计划,下发情况,主节点,数据节点交互情况。 执行explain前,打开DEBUG。 set client_min_messages ='debug5'; \set VERBOSITY verbose explain...

[转载] TPCH 22条SQL语句分析

9 minute read

背景 原文链接 https://yq.aliyun.com/articles/149715 作者, 阿福 原文 使用TPC-H进行性能测试,需要有很多工作配合才能获得较高性能,如建立索引,表数据的合理分布(使用表空间和聚簇技术)等。 本文从查询优化技术的角度,对TPC-H的22条查询语句和主流数据库执行每...

PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)

17 minute read

背景 《(TPC-H测试 SF=10) PostgreSQL 11 vs 10 vs Deepgreen》 测试结果证明PG已经是一个HTAP数据库,可以同时满足OLTP,OLAP的需求。 citus是PG的一个sharding插件,可以把PG变成一个分布式数据库。目前在苏宁有大量的生产应用跑在citus+p...

Greenplum csvlog(日志数据)检索、释义(gp_toolkit.gp_log*)

8 minute read

背景 由于GP为分布式数据库,当查看它的一些日志时,如果到服务器上查看,会非常的繁琐,而且不好排查问题。 例如这是某个节点的日志 2018-08-23 15:34:30.004070 CST,"digoal","postgres",p12775,th-1756479360,"127.0.0.1","52802...

PostgreSQL 12 preview - plan_cache_mode参数控制强制使用plan cache或强制custom plan (force_custom_plan and force_generic_plan)

1 minute read

背景 plan cache在OLTP中,可以大幅降低生成sql parser, 执行计划的开销。 但是在某些场景中,plan cache可能成为问题,比如AP类型的场景中,由于SQL 输入条件的变化(通常AP业务涉及的条件可能比较容易出现这样的问题),可能导致plan cache并不是最佳的执行计划。 Pos...

PostgreSQL json内容特殊字符使用unicode代替

less than 1 minute read

背景 json中包含特殊字符时,可能导致输入异常,可以转换为UNICODE后,即可正常输入。 格式为 \u[0-f]{4} postgres=# select '{"id1":1, "id2":2, "info":"digoal d\u0061t\u0061 ab", "c1":123, "c2":1.1, ...

PostgreSQL 快速给指定表每个字段创建索引 - 1 (不够完美)

1 minute read

背景 如何快速给表的所有字段,每个字段都加上索引。 《PostgreSQL 设计优化case - 大宽表任意字段组合查询索引如何选择(btree, gin, rum) - (含单个索引列数超过32列的方法)》 满足任意字段组合查询的需求。 例子 (PostgreSQL 11) 1、如果需要在单个事务中要创建...

MSSQL(SQL Server) on Linux 简明部署与使用

4 minute read

背景 本文介绍MS SQL on Linux的简单部署,使用。 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-2017 后面简单介绍如何将MS SQL迁移到Postgr...

PostgreSQL Oracle 兼容性之 - DBMS_OUTPUT.PUT_LINE

1 minute read

背景 在函数、存储过程中需要进行一些debug,输出一些过程变量的值时,PG中使用raise notice可以非常方便的得到。 Oracle put_line在存储过程、函数中通常被用于调试,输出一些变量,时间值。 CREATE FUNCTION dept_salary (dnum NUMBER) RETUR...

PostgreSQL 无会话、有会话模式 - 客服平均响应速度(RT)实时计算实践(窗口查询流计算)

19 minute read

背景 通常客服系统可能存在一对多,多对多的情况。 例如, 我们在使用淘宝时,与店家交流时,你根本不知道后面的小二是一个人还是多个人共用一个账号,还有可能是多个人使用了多个账号但是对消费者只看到一个。 例如: 小二(n)账号 -> 统一对外账号 -> 消费者 还有的情况是一个小二为多个消费者服...

MySQL 不落地迁移、导入 PostgreSQL - 推荐 rds_dbsync

2 minute read

背景 将MySQL数据不落地的方式导入PostgreSQL。 1 rds_dbsync (推荐使用) 《MySQL准实时同步到PostgreSQL, Greenplum的方案之一 - rds_dbsync》 这个效率最高,支持不落地,支持流式导入,支持单表并发(通过配置文件,写WHERE条件,拆成多个并发导同...

PostgreSQL 恢复模式错误日志增强 - 提供正在恢复的WAL(XLOG)文件位置

1 minute read

背景 当数据库异常停库,再次启动时。又或者由于进程CRASH后自动重启时。需要进入恢复模式,恢复完成后,数据库才能正常交互。 在启动过程中,正在恢复时,如果此时连接数据库,会报错如下: the database system is starting up 用户只看这个信息,并不知道数据库还要启动多久,...

PostgreSQL 内容随机推荐系统开发实践 - 文章随机推荐

3 minute read

背景 内容推荐是蛮普遍的需求,例如论坛、电商、新闻客户端等。 比较简单的需求:编辑精选一些内容ID,生成推荐列表。(例如每天生成一个这样的推荐列表。)然后随机的推荐给用户(同时过滤已读的内容)。 更高级的推荐需求:应该是根据不同口味产生的,例如对会员本身进行画像,归类。服务端针对不同口味生成不同的推荐列表。定...

PostgreSQL PostGIS 空间数据约束使用

2 minute read

背景 空间数据有一定的规范,例如SRID的规范。空间类型geometry包罗万象,除了能存储POINT,还能存储多边形,线段等。 这就带来一个有意思的烦恼,当我们业务不够规范时,你可以往GEOMETRY里面存储任意SRID的数据,存储任意的空间对象。 1、SRID错乱,可能导致一些查询,索引问题。 2、本身...

PostgreSQL 当有多个索引可选时,优化器如何选择

11 minute read

背景 当一个表有很多索引时,并且一个QUERY可以使用到其中的多个索引时,数据库会如何做出选择?最终选择哪个,或者哪几个索引呢? 《PostgreSQL 多查询条件,多个索引的选择算法与问题诊断方法》 选择单个索引时,PATH可以选择index scan , index only scan, bitmap s...

PostgreSQL psql 绘制饼图

3 minute read

背景 图像相比文字是更容易被理解的东西,在BI可视化领域,经常会使用图像来代替数值,展示一些信息,例如柱状图、饼图、线图等。 AWR文字报告里面,如果多几个图像来代替列表,其实也是不错的。 那么SQL能直接画图吗,把一行行的结果,转换成图像。 例如 1、TOP SQL的总耗时占比饼图。 2、数据库对象类...

PostgreSQL 消息平台实践

less than 1 minute read

背景 一个多渠道消息平台的数据库设计。 业务规则 1、消息发送给最终用户,一则消息可以发送给多个社交软件平台(因为一个用户可能使用多个软件平台(比如旺旺,WEB版旺旺,淘宝。。。))。 使用数组存储 社交软件平台 2、一条消息在某社交软件平台已读,则该消息在其他社交软件平台也需要为已读。因为同一条...

PostgreSQL 设计优化case - 大宽表任意字段组合查询索引如何选择(btree, gin, rum) - (含单个索引列数超过32列的方法)

20 minute read

背景 大宽表,任意字段组合查询,透视。是实时分析系统中的常见需求: 1、实时写入。 2、实时任意字段组合查询、透视。 PostgreSQL中,有多种方法支持这种场景: 《PostgreSQL 9种索引的原理和应用场景》 1、方法1,每个字段加一个索引(普通类型用btree, 多值类型(数组,json,全...

PostgreSQL 设计优化case - 多对多 转 一对多(数组)

less than 1 minute read

背景 某个系统存储了会员的标签,以及标签的描述信息。业务上需要通过会员ID得到会员的标签,再得到描述信息。 每个会员有若干标签,原来是这么存储的 1、会员标签表,人数5亿左右,每个人平均有几百个标签,1500亿行左右。 create table a(uid int8, tag int); 2、标签描...

PostgreSQL AB表切换最佳实践 - 提高切换成功率,杜绝雪崩 - 珍藏级

6 minute read

背景 AB表切换经常出现在数据导入的场景中,例如每天或者每个固定周期,需要全量导入一批数据到数据库,同时被导入的数据要持续的被查询。 为了尽量避免导入影响查询,通常会使用AB表切换的方法。使用如下步骤: 1、建新表 2、全量数据导入到新表 3、在新表上面建必要的索引 4、切换新、老表名 但是,注意,由...

PostgreSQL 生成空间热力图

6 minute read

背景 结合空间数据,计算基于地理位置信息的热力图,在空间数据可视化场景中是一个非常常见的需求。 结合流计算,可以实现实时的热力图计算。 结合并行计算,可以高效率的对海量数据进行热力图计算。 计算热力图中bucket的方法 https://www.postgresql.org/docs/devel/st...

PostgreSQL 空间位置(geometry 经纬、点、线、面…)、行政地址(门牌、商圈、行政区…) 相互转换方法

2 minute read

背景 空间位置(geometry 经纬、点、线、面…)、行政地址(门牌、商圈、行政区…) 相互转换需求,如果你有这方面的素材库,在PostgreSQL里面转换,性能是非常高效的。 例如输入任意一个空间对象,扫描出附近的空间对象,或者包含它的对象,或者它包含的对象。(构图) 输入任意一个空间对象,搜索离他最近的...

PostgreSQL 异步消息(LISTEN/NOTIFY)缓存多大?

4 minute read

背景 PostgreSQL异步消息功能的一些应用: 《PostgreSQL 流式处理应用实践 - 二手商品实时归类》 《PostgreSQL 事件触发器应用 - DDL审计记录 + 异步通知(notify)》 《从电波表到数据库小程序之 - 数据库异步广播(notify/listen)》 《use Pos...

PostgreSQL Oracle 兼容性之 - 全局临时表 global temp table

1 minute read

背景 PostgreSQL 临时表结构是会话级别的,而在Oracle中,临时表的结构是全局有效的,只是数据会话之间独立。 为了让PostgreSQL临时表的使用与Oracle兼容,除了内核层面兼容之外,目前只能在使用时注意。 使用以下方式: 1、plpgsql中 创建普通表(默认会创建对应的复合类型), ...

PostgreSQL Oracle 兼容性 - connect by 2

3 minute read

背景 Oracle connect by语法经常用于有树形关系的记录查询,PostgreSQL使用CTE递归语法,可以实现同样的功能。 《PostgreSQL Oracle 兼容性之 - connect by 高级选项 CONNECT_BY_ISLEAF、SYS_CONNECT_BY_PATH、CONNECT_...

PostgreSQL 随机数据生成(tablefunc.normal_rand 指定mean stddev)

1 minute read

背景 生成测试数据,PostgreSQL有各种各样的方法,建本文参考文档。 本文提供一种生成指定任意个数、平均值、标准方差的数值。使用tablefunc插件的normal_rand即可。 ``` F.38.1.1. normal_rand normal_rand(int numvals, float8 me...

PostgreSQL 流式处理应用实践 - 二手商品实时归类(异步消息notify/listen、阅后即焚)

4 minute read

背景 因为二手商品没有太多的活动、硬性分类,广告等活动,所以购买或者销售速度没有新商品那么快。为了提高二手商品的销售效率,需要提供一套归类策略。 当商品新增或商品内容发生变化时,需要根据商品属性,以及定义的规则,实时进行商品归类(鱼塘,圈子等)方便用户查询。 结构设计 1、商品ID,属性 create ta...

PostgreSQL oracle 兼容性 - 字符串内嵌 NULL字符(空字符)chr(0) 转换为 chr(32)

less than 1 minute read

背景 在Oracle中,存储字符串时,允许用户将空字符存到字符串中,虽然这种用法可能不常见,但是给Oracle迁移到PG的用户带来了一些小麻烦,因为PG中chr(0)是作为结束符来处理的,不允许作为用户输入传入字符串中。 如果要存储chr(0)字符,PostgreSQL 必须存储在字节流类型中。 Oracle...

PostgreSQL 空间类型统计信息(Statistics, Cardinality, Selectivity, Estimate)不准确导致SQL执行计划不准(包含、相交查询)的优化实践

6 minute read

背景 PostgreSQL 通过几何类型以及PostGIS插件,支持丰富的空间类型,空间数据类型包括KNN检索,空间包含,空间相交,方位搜索,空间计算等操作。 为了得到正确的执行计划,在数据库优化器中,评估满足某个操作符条件的行数,是一个重要的CBO依据。 而评估选择性又依赖统计信息,同时依赖每种操作符的选择...

PostgreSQL quorum based同步复制模式在极端情况下的0丢失破坏问题

1 minute read

背景 PostgreSQL 9.6开始支持了quorum based 同步复制机制,当客户端发起事务结束请求时,必须要等这笔事务对应的redo日志复制到了指定副本,主库才响应客户端。 从而保证客户端正常收到主库反馈后,WAL日志一定已经有了多个副本,保证数据的0丢失。 但是在极端情况下,可能无法保障0丢失,为...

PostgreSQL 如何检测分布式死锁 - postgrespro pg_shardman

3 minute read

背景 单机的死锁检测是比较容易实现的,通过判断等待中的事务是否查询环状,即可实现。例如下面的图,A等B, B等C, C等A,出现环状,即认为死锁。 而对于分布式事务,由于相互等待的事务可能出现在不同的数据节点上,如何判断分布式死锁呢? 为了判断是否有环,必须引入全局事务号,或者有标识可以在每个数据节点上标...

PostgreSQL 模拟两个update语句死锁 - 利用扫描方法

1 minute read

背景 在单条UPDATE中模拟死锁,需要借助扫描方法,以及明确让AB两个会话分别锁定一条记录后再锁定对方已经锁定的记录。 利用批量update的语法以及values子句即可实现,这里利用了嵌套循环,确保被更新的表被多次扫描,并且每次扫描时两个会话更新的记录被错开,达到死锁效果。 同时为了让速度慢下来,使用pg...

PostgreSQL 电商业务(任意维度商品圈选应用) - json包range数组的命中优化 - 展开+索引优化

4 minute read

背景 电商,任意维度商品圈选应用,其中一个查询请求是这样的: 求 “某个国家、某个时间点、调价+折扣后的价格” 落在某个价格范围的商品。 首先需要有的要素包括: 1、商品ID 2、不同国家的商品价格 3、商品原价 4、商品日常价 5、不同时间段的价格折扣 6、调价系数 例子 1、表结构设计 ...

PostgreSQL 函数式索引使用注意 - 暨非immutable函数不适合索引的原因

2 minute read

背景 PostgreSQL支持表达式索引,但是表达式必须是immutable的,也即是当输入参数不变时,结果是永恒不变的。 因为当表达式涉及的变量不变时,索引本身不会变化。 给个例子,如果我们有一张表存储了商品价格,另一张表存储了商品折扣 ,如果我们想通过折扣后的价格范围搜索符合价格区间的商品ID,可以使用索...

如何让json里面的value支持索引范围检索

1 minute read

背景 JSON,JSONB是PG从9就开始引入的数据类型,开发人员非常喜欢,对于JSON里面的内容的检索,我们可以使用GIN索引,目前直接对JSON字段创建GIN索引,可以支持任意PATH的等值、包含检索。 https://www.postgresql.org/docs/10/static/datatype-j...

HybridDB for PostgreSQL , Greenplum 写入性能优化实践

2 minute read

背景 Greenplum写入数据的性能优化实践。 1 链路 尽量缩短客户端和数据库的链路,不要太多的跳数,比如NAT,PROXY,等越多,性能越差。 2 连接方式 尽量使用长连接,不要使用短连接,短连接的打开开销非常大。 3 存储属性 where storage_parameter is: APP...

PostgreSQL stable 函数调用次数

2 minute read

背景 immutable 函数,输入参数静态时,返回结果不变,所以它在plan前先计算,得到一个常量后,放到QUERY里面再生成执行计划。 stable 函数,输入参数静态时,如果在一个事务中多次调用它,返回结果不变。 显然一个immutable 函数在同一个SQL中,永远只调用一次,(在bind , exe...

PostgreSQL vacuum 的页内tuple move收缩空间

13 minute read

背景 当往数据库内插入记录时,PostgreSQL heap page内部的空间分配是这样的,lp内容为对应tuple在当前页的OFFSET,lp的位置固定长度固定(固定page head后面就是lp),lp固定方便tuple的搜索(例如ctid的第二个部分就是lp信息)。 lp从page head...

PostgreSQL 多值列的选择性 - Statistics, Cardinality, Selectivity, Estimate

15 minute read

背景 基于成本的优化器,选择性估算是重要的环节,对于单值列,通过表的行数,数据分布柱状图、高频值、唯一值比例、空值比例等统计信息(pg_class, pg_stats),以及用户输入的条件,可以估算得到输入条件的选择性。 对于多个条件的估算,之前PG给了比较暴力的AND,OR的叠加选择性计算。 PG 10开始...

Greenplum支持人为多阶段聚合的方法 - 直连segment(PGOPTIONS=’-c gp_session_role=utility’) Or gp_dist_random(‘gp_id’) Or 多阶段聚合 prefunc

7 minute read

背景 聚合操作是分析型场景中最常见的需求之一,在Greenplum中,数据已分布存储,聚合操作需要多阶段执行。 实际上PostgreSQL 9.6开始支持并行聚合后,聚合的方法也与分布式数据库的多阶段聚合类似。 创建聚合函数时,必须实现多阶段的API才能够让聚合操作真正的并行起来。 有些插件可能因为某些原因...

Greenplum 与 PostgreSQL 修改元数据(catalog)的方法 allow_system_table_mods

1 minute read

背景 PostgreSQL大量的信息保存在元数据中,所有的元数据都是内部维护的,例如建表、建索引、删表等操作,自动维护元数据。 在某些迫不得已的情况下才可能需要直接对元数据进行修改。 默认情况下,用户是允许修改元数据的。 postgres=# \set VERBOSITY verbose post...

在PostgreSQL中跑后台长任务的方法 - 使用dblink异步接口

2 minute read

背景 如果业务上需要在数据库中跑LONG SQL,并且不希望跑的过程中因为窗口断开,导致数据库任务用户主动cancel query。有什么方法? 使用DBLINK异步调用是不错的方法,相当于数据库内部建立了连接在后台跑。 方法 1、创建任务表,方便观察任务状态 create table tbl_task (...

[转载] gdb 调试打印完整字符串

less than 1 minute read

背景 原文 https://blog.csdn.net/shuizhizhiyin/article/details/53227913 正文 在使用gdb调试过程中,经常需要查看变量的值,最常用的方法: (gdb) print {变量名} 一般情况下,打印并不存在问题。但当一个字符串比较长时,打印出来的...

PostgreSQL 对象权限如何在元数据中获取 - 权限解读、定制化导出权限

10 minute read

背景 在PostgreSQL中,如何查询出指定用户的:系统权限、角色权限,以及其他用户的对象权限? 实际上PostgreSQL中所有权限都以ACL的形式存储在元数据中,所以权限并不是在某一张与用户挂钩的元数据表里面,而是分散在不同类型的对象的元数据中,以一个ACL字段存在。 导出与某个用户相关的权限方法1 用...

线下PG迁移到阿里云RDS PG - 兼容性、性能评估、迁移

3 minute read

背景 用户如果需要将线下的PG数据库迁移到阿里云RDS PG,应该评估哪些东西,如何迁移? 1 规格、性能评估 主要评估线下PG实例所在主机的性能指标 1、CPU主频 2、CPU核数 3、磁盘使用容量 4、网络带宽 5、磁盘读写IOPS 6、磁盘读写带宽 这些指标应该尽量与阿里云RDS PG对齐。...

PostgreSQL 开启“审计日志、时间记录”带来的性能影响有多少?

13 minute read

背景 开启审计日志,或者开启数据库的SQL耗时记录,会给数据库带来多大的性能开销? 1、审计日志通过log_statement设置,可以设置为all, ddl, mod, none,分别表示审计所有SQL,DDL SQL,DML SQL,不审计。 开启审计时,在执行SQL的时候(提交SQL请求时),数据库日志...

PostgreSQL 流复制协议交互式调试 - replication=true

2 minute read

背景 当客户端连接到PG服务端时,startup包里面可以带入一些信息。 src/interfaces/libpq/fe-connect.c 当postmaster解析startup包时,如果解析到replication的参数信息,则会启动wal sender进程与客户端交互,交互采用stream repli...

PostgreSQL libpq multi-host 配置与简单HA实现

1 minute read

背景 PostgreSQL libpq 是数据库的一个连接驱动,支持多主机配置,同时支持target_session_attrs 主机角色判断配置。 当配置了多个主机时,会按顺序尝试连接,之道获取到成功的连接为止。 什么是成功的连接,满足以下两点: 1、能与之成功建立连接。 2、如果target_sess...

[未完待续] PostgreSQL 一键诊断项 - 珍藏级

11 minute read

背景 一、诊断项类目 - 规格、配置 一 规格 1 数据库实例规格 检测方法 规格配置是否与实际配置相符 cpu mem iops network bandwidth disk size 告警规则 处理方法 背景知识 二 配置 1 ROLE,DB级定制配置 检测方法 select * from p...

PostgreSQL 实时健康监控 大屏 - 低频指标 - 珍藏级

7 minute read

背景 最关键的一些数据库健康指标,趋势监测。 1 数据年龄 年龄不能超过20亿(大概值),建议当达到15亿时,应尽快安排freeze。 postgres=# select datname,age(datfrozenxid) from pg_database order by 2 desc; datn...

PostgreSQL 实时健康监控 大屏 - 高频指标 - 珍藏级

6 minute read

背景 最关键的一些数据库健康指标,趋势监测。 1 总连接数 主要看趋势,直接与业务量挂钩 如果连接数接近max_connection水位,需要注意。 同时连接数应与数据库主机可用内存挂钩,每个连接保守估计10MB内存开销(这里还未计算SYSCACHE,RELCACHE)。 select count(*) ...

PostgreSQL , Oracle command reference 语法手册解读

less than 1 minute read

背景 我们在查语法手册是,比如Oracle, PostgreSQL 语法手册,经常看到里面很多这样的东西, postgres=# \h insert Command: INSERT Description: create new rows in a table Syntax: [ WIT...

PostgreSQL 登陆登出(login logout)事件触发方法

less than 1 minute read

背景 PostgreSQL 支持event trigger,但是event局限于DDL。当发生DDL时,可以触发一些动作调用用户自定义的event trigger函数,函数内容随意,比如审计,比如DDL逻辑复制,比如权限控制等。 对事件触发器感兴趣可以见我的GITHUB。 《PostgreSQL 登陆登出(l...

理解数据库扫描方法 - 利用扫描方法对数据存储进行优化

3 minute read

背景 假设一个黑盒中有三种水果:苹果,香蕉、菠萝。一共有若干个水果。 假设你需要拿10个苹果,你需要拿多少次呢? 最差的情况,你可能需要把所有的水果都拿完。(全表扫描,扫到最后才拿到10个或者不足10个) 最好的情况,你可能10次就拿完。(全表扫描,扫10行全都是苹果。) PS:索引扫描这里就不说了,因为...

Greenplum 轨迹相似(伴随分析)

2 minute read

背景 《阿里云 PostgreSQL 产品生态;案例、开发实践、管理实践、学习资料、学习视频 - 珍藏级》 以上有个CASE是讲:如何找出在同一辆车内的人,实际上就是通过车辆、人物的轨迹点数据,进行多轮的求交集,将结果收敛到一个较小的范围。 Greenplum伴随分析测试 1、创建测试表 create t...

PostgreSQL + PostGIS 时态分析

6 minute read

背景 假设我们有一些物体的轨迹数据(经纬度、measure(通常存为epoch时间戳)),比如车辆、人、传感器等。 给定一个物体在某个时间范围的轨迹数据,查找有没有与这个物体接触的轨迹,并按亲密度排序。 http://postgis.net/docs/manual-2.4/geometry_distance_...

Greenplum & PostgreSQL UPSERT udf 实现 - 2 batch批量模式

5 minute read

背景 《Greenplum & PostgreSQL UPSERT udf 实现 - 1 单行模式》 批量模式,接口函数的输入参数如下 1、schemaname 2、表名 3、分布键名(数组) 4、每一次请求的内容,JSON或JSONB 数组。(每次请求的字段可能各不相同,所以务必每个JSON或...

PostgreSQL PostGIS 的5种空间距离排序(knn)算法

2 minute read

背景 PostgreSQL GiST索引支持排序接口,可以支撑空间、标准、数组、文本向量、文本等类型的排序。 分别表示: 1、给定一空间位置,按空间距离排序输出 2、给定一数组、全文检索值、字符串,按数组、全文检索、字符串相似度排序输出 3、给定一标准类型的值,按标准类型的距离排序 数据库目前支持哪些排...

Greenplum & PostgreSQL UPSERT udf 实现 - 1 单行模式

6 minute read

背景 PostgreSQL 9.5 开始支持了upsert的语法, PostgreSQL 9.5 以前的版本,可以使用CTE语法来代替insert into on conflict(upsert),实现UPSERT。或者使用UDF来实现。 [《HTAP数据库 PostgreSQL...

CentOS 7 动态调节CPU频率 - 给CPU升降频

2 minute read

背景 以下内容出自互联网: https://blog.csdn.net/zhenwenxian/article/details/6196943 cpufreq是一个动态调整cpu频率的模块,系统启动时生成一个文件夹/sys/devices/system/cpu/cpu0/cpufreq/,里面有几个文件, ...

PostgreSQL standby会不会做检查点? 以及做检查点的用处

2 minute read

背景 当数据库异常关闭时,数据库关闭时来不及或根本没有机会创建一个一致性的检查点,所以需要从上一个一致性检查点开始恢复。 实际上是数据库启动时检查控制文件中的数据库状态,如果状态不是shutdown的,那么说明数据库是异常关闭的(当然我们说,除了recovery状态),总之就需要从检查点开始恢复。 src/i...

PostgreSQL 如何确定某个opclass支持哪些操作符(支持索引),JOIN方法,排序

12 minute read

背景 PostgreSQL有很多的索引接口,同时索引接口还支持用户扩展,当扩展索引时,需要提供opclass。 那么每一个扩展的opclass,支持什么操作符,支持什么JOIN方法,支持排序吗,是默认的OPCLASS吗? 以btree_gin扩展包为例,它扩展了标准类型的GIN索引接口。那么扩展后支持哪些呢?...

PostgreSQL 推荐 TPC-C 测试工具 sqlbench

4 minute read

背景 TPC-C测试工具比较多,比如使用JAVA写的BenchmarkSQL。 sqlbench是阿里云数据库内核团队的mark wong大大开源的一款TPC-C测试软件,完全遵循TPC-C标准编写,关键它是纯C的,效率非常高,并且在遵循TPC-C的标准同时对请求模型进行优化。 https://github....

PostgreSQL wal_buffers 自动计算算法

1 minute read

背景 当wal_buffers设置为-1时,PG会自动计算一个值,取决于几个因素,wal_segment_size, shared_buffer. 算法 src/backend/access/transam/xlog.c /* * GUC check_hook for wal_buffers *...

PostgreSQL Oracle checksum 配置与性能

10 minute read

背景 开启数据库block checksum可以发现磁盘、存储、IO系统的问题引入一些的物理错误。 PostgreSQL checksum 在PostgreSQL中,默认强制对XLOG(WAL)开启了checksum,因此可以保证从redo buffer写入redo file里面的数据是一致的,读取的时候也会根...

PostgreSQL 9.x, 10, 11 hash分区表 用法举例

5 minute read

背景 PostgreSQL 10开始内置分区表语法,当时只支持了range,list两种分区,实际上可以通过LIST实现HASH分区。 PostgreSQL 10 hash 分区表 使用list支持hash分区 postgres=# create table p (id int , info text, cr...

[招聘] [杭州米雅] PostgreSQL 开发 DBA

less than 1 minute read

招聘 PostgreSQL 开发 DBA 1 公司名称 杭州米雅信息科技有限公司 2 公司人数 3 公司简介 出自 https://www.zhipin.com/gongsi/599f316e50481d5803d62Ny6.html?ka=company-intro 米雅是一家新兴的基于移动互联网,专...

[招聘] [招商仁和人寿] PostgreSQL 开发 DBA

less than 1 minute read

招聘 PostgreSQL 开发DBA 公司名称 招商仁和人寿 公司人数 公司简介 https://www.cmrh.com/ 公司网站 https://www.cmrh.com/ 坐标 深圳 职位 PostgreSQL 开发DBA 岗位描述 岗位职责: 1、参与业务系统数据模型设计、开发和优化...

PostgreSQL 多场景 阿里云沙箱实验 预告

3 minute read

背景 为了能够让用户可以更快的上手PostgreSQL,与云栖团队的小伙伴制作了一系列阿里云RDS PostgreSQL沙箱实验。 所有实验内容都结合了应用场景,非常具有代表性,兴趣性与一定的挑战性。 沙箱简介 基础知识准备 http://www.postgresqltutorial.com/ 客户端准备 ...

EDB PPAS (PostgreSQL plus advanced server) 10 参数模板 - 珍藏级

6 minute read

背景 系统参数模板 《PostgreSQL on Linux 最佳部署手册 - 珍藏级》 PostgreSQL 10 参数模板 《PostgreSQL 10 参数模板》 PPAS 10 参数模板 除以下参数模板以外,其他参数参考 《PostgreSQL 10 参数模板》 1、通用部分参数 #------...

PostgresPro buildin pool(内置连接池)版本 原理与测试

10 minute read

背景 PostgreSQL 与Oracle dedicate server 一样采用了线程模式,在连接数非常多时,性能下降会比较严重。 通常社区用户的做法是使用连接池,比如pgbouncer,但是使用PGbouncer也会引入一些使用上的不便利,比如transaction模式不能使用绑定变量等。在以下文章中做过...

[转载] 面试必备:什么是一致性Hash算法?

less than 1 minute read

背景 原文 https://blog.csdn.net/bntX2jSQfEHy7/article/details/79549368 正文 最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件...

[转载] 什么是一致性哈希算法

2 minute read

背景 原文 https://mp.weixin.qq.com/s/bCH-aU8cKS3uT6PwRYNJtA 正文 1,对于待存储的海量数据,如何将它们分配到各个机器中去?—数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式来存储数据变得越来越不适用,而通过增加机器数目来获得水平横向扩展的...

PostgreSQL 11 preview - pgbench 压测软件增强

8 minute read

背景 PostgreSQL 11 pgbench压测软件增强。 详细用法参考, pgbench非常强大,且性能非常好。 https://www.postgresql.org/docs/devel/static/pgbench.html 使用pgbench实施的一些压测场景 《HTAP数据库 Postgre...

PostgreSQL 11 preview - pg_resetwal 在线修改 WAL segment size

2 minute read

背景 PostgreSQL 11 允许用户在线修改WAL segment size。默认为16MB, 以往的版本,我们必须重新编译PG,并且不同–wal-segsize设置的postgresql软件相互不兼容。 Allow pg_resetwal to change the WAL segment size v...

PostgreSQL 11 preview - TOAST切片阈值表级可配置

1 minute read

背景 还记得我在13年的时候写过几篇关于变长字段优化的CASE,如果变长字段不怎么被更新,建议放到TOAST存储,因为放TOAST后,TUPLE中就只存指向TOAST的指针了。 [《PostgreSQL large row column performance tuni...

PostgreSQL 11 preview - 索引 增强 汇总

1 minute read

背景 PostgreSQL 11 索引特性的增强。 E.1.3.1.3. Indexes Allow indexes to INCLUDE columns that are not part of the unique constraint but are available for index...

PostgreSQL 11 preview - 分区表 增强 汇总

1 minute read

背景 PostgreSQL 11 分区表有非常多的增强特性。 E.1.3.1.1. Partitioning Allow faster partition elimination during query processing (Amit Langote, David Rowley, Dili...

PostgreSQL Oracle兼容性之 - text - text隐式转换

1 minute read

背景 Oracle的两个文本详见,会自动转换为数值进行相减操作。 PostgreSQL默认并不会将文本转换为数值进行相减操作。 为了实现兼容,有两种方法: 1、创建text到numeric的隐式转换 2、创建text-text的操作符。 PostgreSQL 内置CAST 可以看到varchar是有隐...

PostgreSQL Oracle兼容性之 - ‘’ 空字符

less than 1 minute read

背景 Oracle 对’‘有一些特殊的处理,默认会转成NULL。使得’‘可以适合任意的数据类型。 然而对于PostgreSQL来说,没有做这层转换,所以’‘并不能输入给任意类型。 Oracle SQL> create table a(id int, c1 varchar2(10) default ''...

PostgreSQL HooK 介绍

3 minute read

背景 PostgreSQL 的HOOK机制,结合PostgreSQL的_PG_init与_PG_fini两个初始化函数(加载SO时自动load _PG_init(), 退出会话时自动加载_PG_fini()),使得用户可以在不修改源码的情况下,使用HOOK来实现一些数据库的功能扩展。 比如实现改写SQL执行计划...

PostgreSQL 服务端COPY和客户端COPY - 暨PG有哪些服务端操作接口

2 minute read

背景 有些朋友在使用COPY命令对数据库进行数据导入导出时,可能会发现COPY到文件时,怎么和想象的不一样,COPY到文件并没有落到指定的地方。实际上原因是COPY命令是服务端命令,COPY到某个文件实际上是COPY到数据库所在的服务器上面了,而不是客户端所在的服务器。

PostgreSQL pgbench 支持100万连接

less than 1 minute read

背景 《阿里云 RDS PostgreSQL 高并发特性 vs 社区版本 (1.6万并发: 3倍吞吐,240倍响应速度)》 最近测试的阿里云高并发版本的性能,在1.6万个连接下,实际SQL的响应速度是社区版本的240倍。但是很多网友问怎么测的1.6万个连接,因为pgbench默认只能连1000个连接。 超过1...

PostgreSQL Failover slot - 支持将slot信息发送给物理备库

2 minute read

背景 PostgreSQL主库创建的slot(物理或逻辑的都算),在备库是否存在? 目前的版本,PG在主库创建的SLOT,备库是没有的(不会通过流复制协议复制到备库) (但是,2ND提出的failover slot,就是来解决这个问题的,在主库创建的slot,会通过流复制协议,发送给物理备库。) 测试 主...

从代码层判断 pg_basebackup 是否已正常结束 - 暨改进建议

1 minute read

背景 用户通常会使用pg_basebackup来对PostgreSQL实施在线备份,对于超级大的数据库实例,可能需要备份很久。 如果将任务分解来看,假设备份是任务流中的一个步骤,如果设置了超时时间,那么在超时导致该步骤失败之后,如何判断pg_basebackup是否已执行成功? 1、从pg_basebacku...

PostgreSQL, SQL Server 逻辑增量 (通过逻辑标记update,delete) 同步到 Greenplum, PostgreSQL

8 minute read

背景 异构数据的增量同步是比较繁琐的事情,需要考虑很多事情,比如: 1、同步延迟 2、DDL的同步 3、同步时对上游性能的影响 4、上下游数据一致性 5、上游事务原子性在目标端是否能保证原子性 6、上下游数据类型兼容性 7、上下游字符集一致性 8、同步时对下游性能的影响 9、可以同步哪些操作(I...

PostgreSQL Oracle 兼容性 - Analysis函数之keep

4 minute read

背景 Oracle 分析函数KEEP,类似OVER的语法结构(当然,含义与之不同)。keep可以用于普通的查询,也可以用于分组聚合,同时亦可用于窗口中。 SELECT deptno, MIN(t.mgr) KEEP (DENSE_RANK FIRST ORDER BY t.sal) a from emp ...

PostgreSQL copy (quote,DELIMITER,…) single byte char 的输入

less than 1 minute read

背景 PostgreSQL 可以通过COPY批量导入或导出数据,如果是文件操作是在数据库的SERVER端操作,如果是STDIN, STDOUT则是通过协议透传到客户端。 Command: COPY Description: copy data between a file and a table ...

Greenplum Oracle 兼容性之 - LOG ERRORS INTO

5 minute read

背景 Oracle支持DML的log errors,是一个很赞的功能。 https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_errlog.htm#CEGEJAAJ https://oracle-base.com/articles/10g/dml-e...

PostgreSQL 自动创建分区实践 - 写入触发器

3 minute read

背景 数据写入时,自动创建分区。 目前pg_pathman这个分区插件,有这个功能,如果你不是用的这个插件,可以考虑一下用触发器写入,并在触发器中实现自动创建分区。 《PostgreSQL 9.6 sharding based on FDW & pg_pathman》 《PostgreSQL 9.5...

阿里云 RDS PostgreSQL 高并发特性 vs 社区版本 (1.6万并发: 3倍吞吐,240倍响应速度)

8 minute read

背景 进程模型数据库,需要为每个会话指派独立的进程与之服务,在连接数非常多,且大都是活跃连接时,进程调度浪费或引入的开销甚至远远大于实际任务需要的开销(例如上下文切换,MEMCPY等),性能下降会较为严重。 PostgreSQL与Oracle Dedicate Server一样,属于进程模型。在非常高并发的...

Become a PostgreSQL DBA

less than 1 minute read

背景 一系列PostgreSQL DBA喜爱的BLOG https://severalnines.com/blog?series=690 digoal’s 大量PostgreSQL文章入口

ETL for Oracle to PostgreSQL 3 - DATAX

less than 1 minute read

背景 Datax是阿里巴巴开源的一款ETL工具,在云端可以作为服务直接使用,同时用户也可以下载开源代码自行部署。 1 开源Datax http://gitlab.alibaba-inc.com/datax/datax/wikis/quick_start 配置源端数据源 Oracle reader http:/...

[未完待续] PostgreSQL 道德经 智慧 - 57

less than 1 minute read

背景 道德经篇 57、以正治国,以奇用兵,以无事取天下。吾何以知其然哉?以此。天下多忌讳而民弥贫。民多利器国家滋昏。人多伎巧奇物泫起。法令滋彰盗贼多有。故圣人云我无为而民自化。我好静而民自正。我无事而民自富。我无欲而民自朴。 PostgreSQL 道德经智慧 发掘 开放的接口,共建生态,用户可以在Postgr...

[未完待续] PostgreSQL 道德经 智慧 - 3

less than 1 minute read

背景 道德经篇 03.不尚贤, 使民不争。不贵难得之货,使民不为盗。不见可欲,使民心不乱。是以圣人之治,虚其心,实其腹,弱其志,强其骨;常使民无知、无欲,使夫智者不敢为也。为无为,则无不治。 22.曲则全,枉则直,洼则盈,敝则新少则得,多则惑。是以圣人抱一为天下式。不自见故明;不自是故彰;不自伐故有功;不自矜...

PostgreSQL 批量导入性能 (采用dblink 异步调用)

13 minute read

背景 批量导入数据,怎样能挖掘出系统的比较极限的潜能? 瓶颈通常在哪里? 1、WAL lock 2、INDEX lock 3、EXTEND LOCK 4、autovacuum 干扰 因此最好的方法就是排除以上问题,例如 1、使用多表,解决单表EXTEND LOCK问题 2、使用unlogged t...

PostgreSQL 改元信息 invalid index

2 minute read

背景 某些时候,可能想避免一些索引的影响,特意让优化器不选择使用某些索引。 通常的做法可能有: 1、HINT 《关键时刻HINT出彩 - PG优化器的参数优化、执行计划固化CASE》 《PostgreSQL SQL HINT的使用(pg_hint_plan)》 2、设置开关,(注意它不能只影响某一个索引...

Oracle DBA 增值 PostgreSQL,Greenplum 学习计划 - 珍藏级

3 minute read

背景 去O很大程度上是国家层面的战略考虑,比如斯诺登事件,最近贸易战的“中兴”事件,使得去O成为一个不可不做的事情。 但是去O喊了若干年,并没有真正意义上成为轻松愉快的全民运动,比较大的原因可能是 1、去O的成本 2、去O后的责任方 3、利益 随着云计算的兴起,第2,3点应该可以得到很好的解决(有问题找...

Greenplum 海量数据,大宽表 行存 VS 列存

8 minute read

背景 GPDB支持行存列存,而且相关的选择原理我们之前的文章也有很详细的分析,同时在性能方面也做过较多的评测对比。 但是在大宽表上,相差到底有多悬殊我们之前没有对其进行过对比。主要的差异来自deform和QUERY扫描的存储空间(理论上,数据量越大,同时访问的列越少,列存的优势越明显。或者是访问到的列越靠后,优...

[转载] Oracle record、varray、table和%type、%rowtype的使用详解

1 minute read

背景 原文 http://www.ibloger.net/article/230.html 1 说明 1.1 RECORD 定义记录数据类型。它类似于c语言中的结构数据类型(structure),pl/sql提供了将几个相关的、分离的、基本数据类型的变量组成一个整体的方法,即record复合数据类型。在使用...

Oracle migration to Greenplum - (含 Ora2pg)

4 minute read

背景 Oracle在OLTP领域毫无疑问是非常不错的数据库,但是OLAP领域,可以有更好的选择,特别是在数据量大到一定程度的时候,Oracle用来做数据分析会显得有点力不从心。 Greenplum是一个很好的替代Oracle来处理OLAP业务场景的数据库,支持多机并行、列存储、丰富的OLAP SQL语法,存储过...

PostgreSQL 实践 - 实时广告位推荐 1 (任意字段组合、任意维度组合搜索、输出TOP-K)

14 minute read

背景 店铺,广告推荐位,自动计算,高效检索,高效更新。 根据:本店、全网用户行为,库存等进行运算,得到每个商品的分值,推荐排行靠前的商品。 维度可能很多,例如:北京的男性用户在秋天买袜子的可能性是0.431,这里面就是4个维度。实际场景维度可能有几十个,几百个,甚至几千个。 需要支持任意维度,排序,求TOP...

PostgreSQL 分区表的逻辑复制(逻辑订阅)

less than 1 minute read

背景 PostgreSQL 10 引入了内置分区语法,同时引入了逻辑订阅的功能。 《PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践》 逻辑订阅简单来说就是 1、创建pub, 2、将需要订阅的表加入到pub中, 3、在接收端创建订阅sub,指定订阅哪个pub。 4、然后发布...

PostgreSQL Oracle 兼容性之 - round interval

less than 1 minute read

背景 Oracle 可以将interval当成一个秒为单位的数值,并允许对其值进行round。 PostgreSQL的round没有写这个,不过我们可以自定义一个兼容函数。 create or replace function round(interval, int) returns float8 as $$...

PostgreSQL bit运算CASE - 最近7天消费金额大于N的用户bits

less than 1 minute read

背景 有一个这样的数据结构 日期, 消费金额,userbitmaps。表示这一天这些设置为1的BIT位对应对用户消费了这么多金额。 需求,最近7天,消费大于多少的用户有哪些。 create table t_test ( dt date, -- 日期 amount int, -...

PostgreSQL 滴滴派单 高峰区域集中打车冲突优化1 - 宇宙大爆炸理论与PostgreSQL实践

2 minute read

背景 在打车高峰时期,通常会出现某个区域打车的人特别多的情况,比如在下班时,写字楼。比如在演唱会结束时,演唱会现场。 这个场景有一个特点,同一个点发出请求,按距离搜索最近的车,然后锁定车辆。 在数据库中,如果大家都这么操作,会带来锁冲突的问题。我在上一篇文档中,介绍了adlock,可以大幅提高吞吐,但是还有一...

PostgreSQL PostGIS so 预加载(preload) 性能提升 - 暨什么动态库建议预加载

1 minute read

背景 PostgreSQL是一个可扩展的数据库,如果你的扩展是C扩展,代码在动态库中。那么在使用时需要加载这个动态库来实现一些功能例如创建类型,创建函数,创建操作符等。 PostgreSQL允许多种加载动态库的方法,例如数据库启动时加载,会话连接(启动backend_process)时加载,或者在会话中调用到对...

滴滴打车派单系统思考 数据库设计与实现 - 每月投入6140元, 1天最多可盈利117亿 -_-!

14 minute read

背景 打车类应用,如果完全按调度系统来派单,而非抢单的话,调度系统要非常的健硕。 比如滴滴打车,如何处理供给双方的需求,并高效的完成派单呢? 随着业务的需求增多,调度规则也会增加,比如拼车,预约,等。 下面是一个简单的派单系统的思考,如何使用PostgreSQL与空间数据库插件PostGIS来实现一个简单的...

PostgreSQL 大表扫描策略 - BAS_BULKREAD , synchronize_seqscans

4 minute read

背景 数据库BUFFER是一个对物理IO对冲非常有效的组件,所以BUFFER的稳态对IO波动影响很大。 在一些操作时,可能会导致一些IO的波动,比如刷脏页,检查点。但是PostgreSQL在这方面都有很好的调度策略,避免IO的波动。具体见PG文档的介绍,或如下 《PostgreSQL 9.6 平滑fsync,...

[未完待续] pgloader - mysql , sqlserver 迁移到 PostgreSQL - (含DDL自动迁移)

less than 1 minute read

背景 pgloader是一款开源的迁移软件,命令行操作。 支持从文本、mysql, sqlite, sqlserver迁移到PostgreSQL. 包含DDL的自动迁移。 同时在数据写入PG的过程中,支持COPY协议写入(支持记录错误行),支持并行创建索引。 功能以及导入效率都是很赞的。 https://...

PostgreSQL 从文件时间戳获悉一些信息(如数据库创建时间)

1 minute read

背景 PG的一些元数据没有时间字段,例如对象的创建时间、DDL的修改时间。 如果要获得这个时间信息,我们可以 1、通过事件触发器,将DDL事件记录到某个元数据表中,来获得。 2、或者打开DDL审计日志,从审计日志中获得。 3、与事件触发器类似,不过是通过PG的HOOK来实现的,在执行DDL时,通过代码中对...

PostgreSQL Freeze 风暴预测续 - 珍藏级SQL

12 minute read

背景 PostgreSQL 目前默认的存储引擎,事务可见性需要依赖行头的事务号,因为事务号是32位的,会循环使用。 在一条记录产生后,如果再次经历了20亿个事务,必须对其进行freeze,否则数据库会认为这条记录是未来事务产生的(可见性判断)。 因此FREEZE操作是数据库在32位事务号的情况下,经常要做的。...

PostgreSQL Oracle 兼容性之 - create type

2 minute read

背景 Oracle 自定义类型与PostgreSQL自定义类型的兼容性。 虽然两者用法上有一定的不同,但是PostgreSQL功能上完全覆盖到了Oracle的自定义类型。 下面从几个方面描述PostgreSQL Oracle create type的兼容性。 1、创建自定义类型 2、创建自定义类型的构造器...

PostgreSQL 单库对象过多,触发Linux系统限制(inode满或inode index满) (ext4_dx_add_entry: Directory index full!) (could not create file xx/xx/xxxxxx: No space left on device)

5 minute read

背景 PostgreSQL 里面创建的表,序列,索引,物化视图等带有存储的对象,每个对象的数据文件都是独立的,较依赖文件系统的管理能力。并不像Oracle那样把对象放到表空间中管理,表空间又由若干的数据文件组成。(ASM的话则接管更多的操作。) 所以,当创建了很多个有实际存储的对象时,文件数就会很多: 通常一...

PostgreSQL 变态并行拉取单表的方法 - 按块并行(按行号(ctid)并行) + dblink 异步调用

2 minute read

背景 数据同步是一个较为常见的需求,为了提高性能,并行是一个非常简单暴力的手段。但是通常只能做到不同的对象之间并行,对于单个对象,比如单表,能否并行呢? 有一种方法是使用HASH并行,例如按某个或某几个字段,按hash值取模,切分为多组数据,每个进程读取一部分,并行将单表取出。但是这种方法有一个弊端,会导致重复...

PostgreSQL Oracle 兼容性之 - 字符串分割

1 minute read

背景 Oracle中字符串分割,比较麻烦,可能需要写PL/SQL来实现。 create or replace TYPE "STRINGS_TABLE" is table of varchar2(2000) create or replace FUNCTION highsoft_split( p...

PostgreSQL Linux 下 僵尸状态的处理

4 minute read

背景 在某些非常特殊的情况下,可能遇到数据库无法停库,也无法连接(几乎处于不可用状态)的情况。即使使用-m immediate这样的暴力停库都无法停下来。 例如,当数据库的某些用户进程进入了defunct状态时。 2951 20411 37111 0 14:28 ? 00:00:00 ...

PostgreSQL 11 preview - bloom filter 误报率评估测试及如何降低误报 - 暨bloom filter应用于HEAP与INDEX的一致性检测

15 minute read

背景 bloom filter是一个空间压缩,概率数据结构,可以存储超容量的数据集,用于判断某个元素是否存在于数据集中。但是bloom filter存在一定的错误率(当判断存在时,可能不存在,因为这个元素的bits可能被set了。但是当判断发现元素不存在时就一定不存在。) 例如A元素对应1,19,200,21等...

PostgreSQL 家谱、族谱类应用实践 - 图式关系存储与搜索

9 minute read

背景 最近《最强大脑》节目的国际PK赛中,来自谷歌的一位国际选手展示了他在谷歌时做的一套系统,把三国人物关系整理并展示成了一张大图,属于非常典型的图式应用。 PostgreSQL非常适合于这类场景,有着丰富的SQL接口和良好的性能。下面这些都是PG在图式搜索方面的应用: 《小微贷款、天使投资(风控助手)业...

PostgreSQL 11 preview - Logical replication support for TRUNCATE

2 minute read

背景 PostgreSQL 11 逻辑订阅支持insert, update, delete, truncate。 后期可能还会增加对DDL的支持,目前的DDL(包括对已有订阅表的结构修改,新增,删除表等操作)通过如下方法来支持: 《PostgreSQL 逻辑订阅 - DDL 订阅 实现方法》

PostgreSQL 11 preview - Allow on-line enabling and disabling of data checksums (含pg_verify_checksums工具,离线检查数据文件有误块错误)

2 minute read

背景 PostgreSQL的数据文件是以数据块组织的,由于数据块可能比文件系统的原子写更大,所以在某些情况下可能出现partial write(例如断点或者块设备异常),出现数据块数据损坏(不一致)的情况。为了满足可靠性要求,PG在设计之初已经考虑到这点,所以有了WAL的FULL PAGE WRITE,以及WAL...

PostgreSQL 11 preview - Faster partition pruning

less than 1 minute read

背景 目前PG社区版本内置分区表的性能受制于一些BIND、LOCK所有子表等问题,当分区过多时,性能会受到极大的影响。 《分区表锁粒度差异 - pg_pathman VS native partition table》 《PostgreSQL 查询涉及分区表过多导致的性能问题 - 性能诊断与优化(大量BIND...

PostgreSQL 递归妙用案例 - 分组数据去重与打散

22 minute read

背景 我们现在业务场景,有对筛选结果进行去重和打散的需求,比如每个品牌的商品只能出现不超过10个。 目前我们是在业务层进行处理的,效率比较低。 PGSql有没有更好的方式来支持对结果的去重和打散呢? PostgreSQL SQL功能强大,有很多种方法可以实现这类业务需求的高效检索。比如 1、递归 2、窗...

PostgreSQL 11 preview - with_llvm JIT支持部署与试用

43 minute read

背景 PostgreSQL 11 JIT,目前支持tuple deform(将磁盘上的tuple转换为内存中TUPLE格式),以及表达式(select, where, 等语义中的表达式,操作符运算,UDF等)的动态编译。 对海量数据的计算(并且表达式或TUPLE DEFORM已成为瓶颈时)有加速效果。 特别适...

PostgreSQL 任意列组合条件 行数估算 实践 - 采样估算

4 minute read

背景 在任意维度查询(ADHoc)的场景中,有诸多技术手段来保证查询的性能,比如rum索引,GIN倒排索引,BLOOM FILTER索引。又比如多个索引的bitmap 合并scan。 例子: 《PostgreSQL ADHoc(任意字段组合)查询 与 字典化 (rum索引加速) - 实践与方案1》 《用Po...

insert on conflict - 合并写 (消除不必要更新)

1 minute read

背景 合并更新的应用非常广泛,存在则更新,不存在则写入。 但是在某些场景中,存在并不一定要更新,原因是新的内容可能和老的内容完全一致。这种更新操作是完全没有必要的。 因为PG是多版本的,更新会产生新的TUPLE版本,如果这种没必要的更新很多,只会给数据库带来额外的负担同时影响性能。特别体现在批量操作中。 例...

[转载] 磁盘硬件问题(坏块)检测

1 minute read

背景 Linux下面可以使用smartctl , badblocks检查是否有坏块。 Win下面可以使用HD Tune。 1 smartmontools apt install smartmontools https://www.aliyun.com/jiaocheng/120499.html s...

PostgreSQL 相似文本检索与去重 - (银屑病怎么治?银屑病怎么治疗?银屑病怎么治疗好?银屑病怎么能治疗好?)

6 minute read

背景 在云栖社区的问答区,有一位网友提到有一个问题: 表里相似数据太多,想删除相似度高的数据,有什么办法能实现吗? 例如: 银屑病怎么治? 银屑病怎么治疗? 银屑病怎么治疗好? 银屑病怎么能治疗好? 等等 解这个问题的思路 1. 首先如何判断内容的相似度,PostgreSQL中提...

Greenplum 计算能力估算 - 暨多大表需要分区,单个分区多大适宜

8 minute read

背景 在数据仓库业务中,单表的数据量通常是非常巨大的。Greenplum在这方面做了很多的优化 1、支持列存储 2、支持向量计算 3、支持分区表 4、支持btree, bitmap, gist索引接口 5、执行并行计算 6、支持HASH JOIN 等 提高数据筛选的效率是一个较为低廉有效的优化手...

PostgreSQL 一主多从(多副本,强同步)简明手册 - 配置、压测、监控、切换、防脑裂、修复、0丢失 - 珍藏级

34 minute read

背景 PostgreSQL物理流复制有几个特点 1、延迟及低,毫不畏惧大事务 2、支持断点续传 3、支持多副本 4、配置简单,看本文 5、备库与主库物理完全一致,并支持只读 所以大多数用户都会使用流复制来搭建只读备库,容灾,备份节点,HA等。 本文主要介绍一下PostgreSQL一主多从的配置,以及...

PostgreSQL 11 preview - 强制auto prepared statment开关(自动化plan cache)(类似Oracle cursor_sharing force)

2 minute read

背景 通常一个QUERY在执行时分为几个步骤,语义解析、SQL REWRITE、生成所有可选执行路径、选择最优路径、执行等多个步骤。 对于同一类SQL,只是更换SQL中的一些FILTER变量时,实际上很多步骤是可以共享的。例如语义解析、SQL REWRITE、生成执行计划都是可共享的,这些步骤通常比较耗CPU资...

PostgreSQL 11 preview - pg_stat_statements 增强,支持执行计划翻转记录

less than 1 minute read

背景 pg_stat_statements是PG的一个用于收集SQL统计信息的插件,可以帮助我们分析TOP SQL。 《PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)》 另一方面,我们可能也想知道SQL曾经执行时是否出现过较差的执行计划,使用较差的执行计划执行了多少次等信息。 通...

PostgreSQL 11 preview - pgbench 支持大于1000链接(ppoll()代替select())

less than 1 minute read

背景 目前pgbench最大可以测试1000个连接,显然在某些时候是不够的,我们可能需要建立更多的连接进行测试。 $ pgbench -j 3000 -c 1500 invalid number of clients: "1500" 使用这里提到的方法修改一下pgbench,让它能够建立100万个连...

PostgreSQL Huge Page 使用建议 - 大内存主机、实例注意

6 minute read

背景 当内存很大时,除了刷脏页的调度可能需要优化,还有一方面是虚拟内存与物理内存映射表相关的部分需要优化。 1 脏页调度优化 1、主要包括,调整后台进程刷脏页的阈值、唤醒间隔、以及老化阈值。(脏页大于多少时开始刷、多久探测一次有多少脏页、刷时多老的脏页刷出。)。 vm.dirty_background_by...

[转载] Linux进程状态解析之R、S、D、T、Z、X

1 minute read

背景 原文 https://wenku.baidu.com/view/8a932511866fb84ae45c8de8.html 正文 Linux进程状态解析之R、S、D、T、Z、XLinux进程状态解析之R、S、D、T、Z、X。 Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会...

PostgreSQL 11 preview - BRIN索引接口功能扩展(BLOOM FILTER、min max分段)

3 minute read

背景 BRIN索引是PG的一种块索引接口,存储指定连续数据块内被索引字段的元数据。 https://www.postgresql.org/docs/devel/static/brin.html 目前BRIN存储的元数据包括被索引字段在每个指定连续数据块区间的MIN,MAX值。所以对于比较分散的数据实际上效果是...

PostgreSQL 11 preview - Incremental Sort(排序优化)

less than 1 minute read

背景 当我们需要对数据进行排序时,通常加速的方法是建索引,走索引就快了对吧。 PostgreSQL排序的能力还是很强大的: 《PostgreSQL 11 preview - 并行排序、并行索引 (性能线性暴增) 单实例100亿TOP-K仅40秒》 通常情况下,如果要让排序用上索引,那么索引必须与排序字段一致...

PostgreSQL 11 preview - JIT接口放开

1 minute read

背景 LLVM对大量数据运算(比如说where条件中过滤大量的数据,聚合计算大量的数据等)的效率提升非常的明显。 原理参考 《分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱》 PostgreSQL 11的JIT接口正在进行打磨,完善。借助L...

我和大象 - 感恩、感谢、加油、腾飞

less than 1 minute read

背景 http://www.idcquan.com/Special/OSCAR2018/index.html 由中国信息通信研究院主办、中国通信标准化协会支持的”OSCAR云计算开源产业大会”于2018年3月21日-22日在国家会议中心举行。 非常有幸获得了“OSCAR尖峰开源人物”奖项。 奖项不敢自居...

PostgreSQL 11 preview - 多阶段并行聚合array_agg, string_agg

3 minute read

背景 并行聚合原理请参考: 《PostgreSQL 10 自定义并行计算聚合函数的原理与实践 - (含array_agg合并多个数组为单个一元数组的例子)》 实际上PostgreSQL支持并行计算后,聚合就分为多阶段聚合与原始的一阶段聚合两种玩法。 多阶段聚合会将聚合任务分配给所有的WORKER执行,然后再...

PostgreSQL 11 preview - 虚拟列(自动根据表达式产生值)

2 minute read

背景 通过增加虚拟字段,可以让数据库根据虚拟列的定义,自动填充值。 与自增,DEFAULT不同的是,虚拟列中可以从其他列的内容产生。 例如 CREATE TABLE t1 ( ..., height_cm numeric, height_in numeric GENE...

PostgreSQL 11 preview - 分页内核层优化 - 索引扫描offset优化(使用vm文件skip heap scan)

4 minute read

背景 OFFSE limit是分页常用的功能。很多人可能有过这样的感受,分页越到后面越慢。 实际上原因是由于数据库在OFFSET指定记录数之前,是需要扫过这么多的符合条件的TUPLE才能知道应该从哪里开始返回。 比如 1、索引扫描时,并不知道一个索引页有多少条有效记录(因为索引中没有版本号,需要回表才知道这...

PostgreSQL 11 preview - 索引优化。filter智能消除、分区索引智能合并

5 minute read

背景 当数据量较大时,对数据分区是一种比较不错的数据管理手段。 每个分区都有对应的边界定义,在PostgreSQL中我们可以把它理解为分区的constraint。 目前PostgreSQL在优化器的细节方面进行打磨,constraint可以被优化器利用来做一些优化的工作。 1、例如: 每个班级一个分区,你...

PostgreSQL 生成任意基数数独 - 4

1 minute read

背景 使用《PostgreSQL 生成任意基数数独 - 3》 提供的方法,可以生成有解数独。在不知道数独答案的情况下,如何暴力破解呢? 实际上可以修改一下《PostgreSQL 生成任意基数数独 - 2》 里面的随机生成数独的函数,破解数独。 破解数独函数如下 create or replace funct...

PostgreSQL 生成任意基数数独 - 3

4 minute read

背景 使用随机填充的方法,很难生成一个有解的数独。 《PostgreSQL 生成任意基数数独 - 2》 本文使用了《编程之美》中提到的另一种生成随机数独的方法,模板+映射法。 首先要生成一个模板,然后根据这个模板,我们可以旋转、正反换面,一共生成8个模板。 模板生成好之后,把1-9的数字映射进...

PostgreSQL 生成任意基数数独 - 2

2 minute read

背景 《PostgreSQL 生成任意基数数独 - 1》 提供了一种方法,计算一个未完成的数独矩阵每个像素在XYB方向上还有多少个未填充的像素。 通过XYB的值,进行各种排序,选出下一个要填充的像素,进行随机填充。 可以通过调整规则,实现不同的填充位置选择,从而达到生成可解数独的目的。 创建一个生成以N为...

[未完待续] PostgreSQL NP完全问题求近似解 例子, 最低成本集合

less than 1 minute read

背景 1、如何用最少的商家覆盖最多的用户(用户最终要求去重)? 比如总共有1亿用户,有100万家店铺,每个店铺有对应的用户群体。如何选择最少的商家,得到最大的用户群体。 2、如何用最少的商家覆盖最大的消费能力群体(消费者最终要求去重)? 3、如何圈定最少的明星,获得最多的粉丝(粉丝集计算最终要求去重)? ...

PostgreSQL 数据库多列复合索引的字段顺序选择原理

13 minute read

背景 当需要创建多列复合索引时,应该使用什么样的顺序呢? 多列复合索引的组织结构与单列字段索引结构类似,只是需要按索引内表达式指定的顺序编排。 《深入浅出PostgreSQL B-Tree索引结构》 例如 create index idx on tbl using btree (udf(c1) desc,...

PostgreSQL 那些使用临时文件的操作与跟踪

9 minute read

背景 在数据库中的一些操作,可能会用到临时文件,比如排序,HASH JOIN,中间结果存储,聚合等等。 为了提高数据库的执行效率,一些操作可能会使用内存代替临时存储,仅仅当内存不足时使用临时文件。 通过work_mem可以设置会话Query使用的临时内存的阈值,当然一个Query中如果使用了大量并行的排序等操...

[未完待续] PostgreSQL Oracle 兼容性之 - sys.anydata

1 minute read

背景 Oracle里面有一个类型sys.anydata,它可以存任意类型。 这个有点是一个协议的里面包了一层协议。或者说是一个容器,在这个容器里存了任意其他类型。 它有什么好处?实际上数据库是强类型的应用,而且通常也是这么来应用的,一般一个列定义一种类型。 然而sys.anydata允许你存任意类型。 t...

[转载] [嵌入式开发]Linux性能分析——上下文切换

2 minute read

背景 原文 http://www.cnblogs.com/pheye/p/4830058.html 一、从一个问题说起 相信很多人在玩手机还是PC时,都曾碰到过这样一种情况,安装的软件多了系统性能就变慢了,但是去查看CPU利用率一直都低于10%,内存也很充足。我在近期的开发工作中就碰到了类似的情况,不同的是,...

PostgreSQL rotate table 自动清理调度 - 约束,触发器

1 minute read

背景 时序场景,这个需求很常见: 1、自动清理过期的历史数据,并且要保证清理速度够快,不产生WAL日志。 要么DROP,要么truncate。 2、我们知道PG支持分区表,如果是通过分区的方法来实现,最好不过了,但是需要不停的创建分区,这个目前pg_pathman能够满足自动创建分区。但是自动删除分区还是不...

PostgreSQL checkpoint 相关参数优化设置与解释

1 minute read

背景 数据库的检查点相关参数如何配置,能让数据库运行更加顺滑? 内存、磁盘能力如何搭配,能发挥更好的性能? OS的参数如何设置,能尽可能的降低大内存机器带来的IO风暴问题? 数据库检查点设置 假设服务器内存是512GB。磁盘顺序、随机写吞吐是2 GB/s。 1、经验值 shared_buffers = ...

PostgreSQL 垃圾版本引入的索引扫描性能下降诊断

3 minute read

背景 首先介绍几个背景知识,由于这些背景知识的存在,所以在某些情况下索引扫描的性能可能会出现一些问题或抖动。 导致性能下降,CPU开销增加,应用程序访问产生更多的连接等连锁反应。 1、当记录被删除,更新时,PostgreSQL目前的存储引擎会在原HEAP PAGE中保留老的记录版本,如果是UPDATE会写入一...

PostgreSQL 全文检索 - 词频统计

3 minute read

背景 TF(Term Frequency 词频)/IDF(Inverse Document Frequency 逆向文本频率)是文本分析中常见的术语。 《PostgreSQL结合余弦、线性相关算法 在文本、图片、数组相似 等领域的应用 - 1 文本(关键词)分析理论基础 - TF(Term Frequency ...

PostgreSQL 多查询条件,多个索引的选择算法与问题诊断方法

3 minute read

背景 当一个SQL中涉及多个条件,并且多个条件有多种索引可选时,数据库优化器是如何选择使用哪个索引的? 例如 有一张表,有2个字段,单列一个索引,双列一个复合索引. 建表。 postgres=# create table tbl(id int, gid int); CREATE TABLE ...

阿里云 RDS PostgreSQL 隐藏开关 - hash to btree, unlogged to logged

less than 1 minute read

背景 为了保护用户数据的可靠性,阿里云RDS PostgreSQL做了一些保护机制。 1、例如PostgreSQL 10版本以前, HASH索引是不写WAL日志的,所以如果你使用了hash index,当数据库崩溃后,HASH INDEX是dirty的,走HASH INDEX SCAN可能导致数据不一致。 又...

PostgreSQL Oracle 兼容性之 - 消息队列 DBMS_AQ

less than 1 minute read

背景 数据库支持消息队列的功能,利用消息队列可以实现异步广播,结合流计算实现异常数据推送等。 Oracle中,通过dbms_aq这个包支持消息队列。在PPAS中,有对应的包,兼容Oracle。 在PostgreSQL中,使用listen, notify同样能够支持消息队列的功能。在对应的驱动中有相应的介绍。包...

PostgreSQL 多值类型(如数组),元素值全局唯一 - 约束如何实现

4 minute read

背景 《PostgreSQL 11 preview - 支持 数组外键约束》 在PostgreSQL中,应用可以非常方便使用多值类型,比如数组、全文检索、范围类型等。 对于多值类型的操作也越来越方便,比如查询相交、包含可以使用索引,更新、替换、APPEND的操作也都有对应的UDF和OP来支撑。 可能应用会有...

PostgreSQL 类微博FEED系统 - 设计与性能指标

3 minute read

背景 类微博系统,最频繁用到的功能: A,D,E用户关注B用户。 B用户推送消息。 A,D,E用户接收消息。 A,D,E用户消费消息。涉及消费排序算法。 之前写过一篇《三体高可用PCC大赛 - facebook\微博 like场景 - 数据库设计与性能压测》 LIKE相关...

PostgreSQL 社交类好友关系系统实践 - 正反向关系查询加速

3 minute read

背景 关系系统在很多设计类应用中非常常见,例如查询你有哪些好友,你是哪些人的好友。 又比如我LIKE了哪些人,哪些人LIKE了我。 比如在之前的”PCC大赛 - facebook\微博 like场景”,也是类似的场景。 《三体高可用PCC大赛 - facebook\微博 like场景 - 数据库设计与性能压...

PostgreSQL 通过分割heap数据文件分拆表的hacking方法

2 minute read

背景 为什么要将一张大表拆成若干张小表?前面的文档给出了原因 《PostgreSQL 并行vacuum patch - 暨为什么需要并行vacuum或分区表》 《HTAP数据库 PostgreSQL 场景与性能测试之 45 - (OLTP) 数据量与性能的线性关系(10亿+无衰减), 暨单表多大需要分区》 ...

PostgreSQL ADHoc(任意字段组合)查询 与 字典化 (rum索引加速) - 实践与方案1

8 minute read

背景 业务背景 某系统数据量: 20亿行左右,64个字段,原始数据多为字符串类型。(大多数字段的唯一值有限) 需求: 1. 查询,任意字段组合查询,求聚合值。 2. 查询并发,1000左右查询并发,每次查询响应时间要求100ms以内。 3. 写入、更新,要求延迟1秒内。 高峰时写入、更新可达20万行/...

PostgreSQL 全局ID分配(数据字典化)服务 设计实践

5 minute read

背景 设计一个全局ID分配服务,要求: 功能性要求 1. 输入字符串 返回 ID i. 已经存在系统中的字符串返回原ID 【严格要求】 ii. 新字符串分配新ID 递增分配 2. 输入ID 返回字符串 3. 每个Topic一个ID序列 4. Topic可以动态增删 5. 支持hsf调...

PostgreSQL 覆盖 Oracle 18c 重大新特性

8 minute read

背景 Oracle 18c 发布了诸多新特性,其中大部分Oracle 18c的重大特性,在早期版本的PostgreSQL数据库已支持。 如下 一、开发特性 1 图式搜索 Oracle 18c SQL-Based Property Graph Query and Analytics https://do...

PostgreSQL raster(栅格数据) st_value 优化举例

less than 1 minute read

背景 栅格数据是由点阵组成的图像化数据,点阵具备空间属性(边界)。点阵由像素组成,所以每个像素也具备空间属性,同时每个像素内填充数值,数值可以代表温度、灰度、颜色系数、属性、湿度等等。 每个栅格中可以有多个波段,每个波段可以代表一个图层,多个波段可以组合叠加计算。 使用栅格数据,可以实现具...

PostgreSQL 11 preview - 支持 数组外键约束

6 minute read

背景 通常,数据库的外键约束是一种一行对一行的约束,然而,在某些场景中,可能要求一行匹配多行的约束。例如: 1、表1:商品表,商品ID为主键 2、表2:用户购买的商品列表,商品ID数组 要求表2数组内的每一个元素都在商品表ID字段中存在,同时要求在删除或更新商品表的商品ID时,可以影响到外键。 Postg...

PostgreSQL 对称加密、非对称加密用法介绍

4 minute read

背景 对称加密方法,指加密和解密使用同一把密钥的方法。优势是加密速度快,缺陷是密钥只有一把,安全性较低。 非对称加密方法,指加密和解密用到一对钥匙,一把为私钥,一把为公钥。通常的用法是公钥用于加密,私钥用于解密。优势是更加安全,你自己只要保护好私钥,就可以保证别人给你发的数据无法被篡改、窃听。缺陷是加解密效率比...

[转载] 对称加密与非对称加密

3 minute read

背景 转载: http://www.cnblogs.com/jfzhu/p/4020928.html 原文 (一)对称加密(Symmetric Cryptography) 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)...

PostgreSQL 11 preview - Surjective indexes - 索引HOT增强(表达式)update评估

4 minute read

背景 PostgreSQL 11马上要提交的一个PATCH,可以更亲和的使用HOT,大幅增强表达式索引的更新性能。 背景技术是HOT,当更新某一条记录时,如果被索引的字段值没有变化,同时被更新记录的新版本与老版本在同一个HEAP PAGE中,那么索引不需要增加冗余ENTRY。从而发生HOT更新。 ...

PostgreSQL 多个数组聚合为一维数组加速(array_agg)

1 minute read

背景 多个数组聚合为一维数组,求PC。业务背景见: 《PostgreSQL APP海量FEED LOG实时质量统计CASE(含percentile_disc)》 由于PostgreSQL内置的聚合函数array_agg支持的数组聚合实际上是将多个数组聚合为多维数组。并不是一维数组。 例如: postgr...

PostgreSQL 店铺运营实践 - JSON[]数组 内部标签数据等值、范围检索100倍+加速示例 (含,单值+多值列合成)

8 minute read

背景 PostgreSQL的数组、JSON等数据类型,给业务方带来了很多便利。但与此同时,优化也会变得更加的烧脑。 比如我们的业务方可能在数据库中存储了一些商品的信息,同时每个商品上会有若干的标签,每个标签使用一个JSON来表示。 数据结构就会变这样: create table js( gid in...

PostgreSQL UDF实现tsvector(全文检索), array(数组)多值字段与scalar(单值字段)类型的整合索引(类分区索引) - 单值与多值类型复合查询性能提速100倍+ 案例 (含,单值+多值列合成)

5 minute read

背景 在应用程序中,特别是使用PostgreSQL多值列(数组、全文检索、JSON)类型的业务中,除了多值列有查询需求,单值列也有查询需求。 那么当两种查询并行存在时,数据库会根据COST选择单列或多列组合索引。但是性能并不能达到极致,只是简化用户的索引设计而已。 例如 create table tbl(g...

PostgreSQL 如何判断idle in transaction的事务中有没有东西要提交

2 minute read

背景 如何判断idle in transaction的事务中有没有东西要提交? 比如在一些情况下,你可能发现数据库中很多idle in transaction的事务,可能是一些僵尸事务,也可能是一些应用框架引起的,连接建立后就开启一个事务,实际上里面啥也没有。 postgres=# select pid, s...

分区表锁粒度差异 - pg_pathman VS native partition table

3 minute read

背景 PostgreSQL 内置分区相比pg_pathman分区插件性能要差一大截: 《PostgreSQL 10 内置分区 vs pg_pathman perf profiling》 主要原因: 1、与优化器有关,内置分区表,plan\bind时需要分析所有子表,所以子表越多,性能会越差。例如下面这个CA...

PostgreSQL APP海量FEED LOG实时质量统计CASE(含percentile_disc) - 含rotate 分区表

15 minute read

背景 服务质量监控是精细化质量管理的重要环节: 例如实时统计FEED LOG在某些分组在某些固定区间(分钟、5分钟、10分钟)的水位值,avg, sum, count等。 本文将介绍一个CASE,某个服务的实时质量监控。 多个点值以数组的形式,批量合并写入。例如2500个点,一批写入。 为了实现高效率的统...

PostgreSQL 相似搜索分布式架构设计与实践 - dblink异步调用与多机并行(远程 游标+记录 UDF实例)

4 minute read

背景 背景请参考如下: 《PostgreSQL 相似搜索设计与性能 - 地址、QA、POI等文本 毫秒级相似搜索实践》 当需要进行相似搜索的数据量大于单机处理能力时,我们需要水平拆分来提高搜索能力。 或者可以使用阿里云的PolarDB for PG的产品(类似ORACLE RAC,支持增加计算节点)。比水平...

PostgreSQL 11 preview - 新功能, 分区表全局索引管理

5 minute read

背景 PostgreSQL 10开始引入了原生支持的分区表,支持了range, list分区。 PostgreSQL 11对分区表的功能进行了增强,首先增加了hash分区表。其次,增加了分区表全局索引管理(PostgreSQL 10 分区表的主表上不支持索引,如果要建索引,不得不在每个分区上去定义,不太方便的。...

PostgreSQL 11 preview - 并行排序、并行索引 (性能线性暴增) 单实例100亿TOP-K仅40秒

14 minute read

背景 在OLAP场景,排序是一个非常重要的功能。也是衡量数据库是否适合OLAP场景的一个重要指标。例如这些场景: 1、求TOP-K,例如在对数据进行分组后,取出每个分组的TOP-K。 2、求中位数,要求对数据排序,并取出处于中间水位的值。 3、数据柱状图,需要对数据进行排序,并按记录均匀分割成若干BUCKE...

PostgreSQL 11 preview - 分区表智能并行JOIN (已类似MPP架构,性能暴增)

22 minute read

背景 PostgreSQL 10开始引入了内置分区表功能,当分区表与分区表发生JOIN时,大家想象一下,分区和分区能直接一对一JOIN,而跳过与其他分区JOIN吗? 实际上我们在单表上,通过HASH可以达到类似的目的,即分片与分片JOIN,这样可以把JOIN的数据集合变小,同时能使用并行: 《PostgreS...

PostgreSQL 相似搜索设计与性能 - 地址、QA、POI等文本 毫秒级相似搜索实践

17 minute read

背景 在现实生活中,很多地方会用到相似搜索,例如 1、打车,要去某个地方,我们输入的目的地可能和数据库里面存的并不完全一致。所以只能通过相似搜索来实现。 2、搜索问题,同样的道理,我们搜的问题可能和存的问题不完全一致。只能通过相似搜索来匹配。 3、搜索兴趣点,等。 实际上PostgreSQL就可以支持相似...

PostgreSQL in 与 = any 的SQL语法异同与性能优化

6 minute read

背景 数据库SQL也算一门比较神奇的语言了,比如很多需求可以有不同的SQL来实现: 我之前有输出过一个IN的测试,这里面实际上也涉及到多个语法,实现同一个功能点。测试CASE是1亿 in 100万的多种写法的性能差异。 《HTAP数据库 PostgreSQL 场景与性能测试之 25 - (OLTP) IN ,...

PostgreSQL 时序数据库插件 timescaleDB 部署实践(含例子 纽约TAXI数据透视分析) - PostGIS + timescaleDB => PG时空数据库

12 minute read

背景 现实社会中,很多业务产生的数据具有时序数据属性(在时间维度上顺序写入,同时包括大量时间区间查询统计的需求)。 例如业务的FEED数据,物联网产生的时序数据(如气象传感器、车辆轨迹、等),金融行业的实时数据等等。 PostgreSQL的UDF和BRIN(块级索引)很适合时序数据的处理。具体有以下的两个例子...

Greenplum 连接池实践

less than 1 minute read

背景 连接池在数据库应用中是非常重要的一种组件。 虽然空闲连接不干什么,但是由于每个连接有自己的relcache缓存空间,被访问过的对象,都会占用一定的缓存空间(访问的对象越多,内存占用越多)。因此即使连接空闲,实际上依旧占用了SOCKET,以及一定的内存空间。 某个业务长连接的问题(也是relcache的霸...

PostgreSQL Oracle 兼容性之 - rownum

3 minute read

背景 Oracle ROWNUM是一个虚拟列,每输出一行递增1。 Oracle rownum 通常被用于LIMIT输出记录数。 SELECT ROWNUM, empno, ename, job FROM emp WHERE ROWNUM < 5 ORDER BY ename; rownum...

PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素

1 minute read

背景 PG的数组类型,被广泛应用于 画像系统 , 标签系统。 在一些业务重建中,对数组内容的定义往往包含了多重含义,例如即包含了标签本身,又包含了标签的属性(例如 标签值:权值,时间 等)。 那么如何能高效的进行标签的检索,同时又过滤出符合标签加权值的记录呢? 例子 1、建表 create table t...

PostgreSQL 全文检索之 - 位置匹配 过滤语法(例如 ‘速度 <1> 激情’)

3 minute read

背景 PostgreSQL 的全文检索功能非常的丰富,除了我们说的开放式的parser,字典。同时还支持ranking算法(内置以及扩展)。 那么实际上在搜索的需求中,还有一类位置过滤的需求,例如“速度与激情”这个词,分词后是有位置信息的,我们期望搜到的是“速度”和“激情”之间间隔一个的情况,提高精准度。 P...

学习 PostgreSQL Frontend/Backend protocol (通信协议)

2 minute read

背景 理解PostgreSQL的通信协议可以更好的开发类似SQL代理,SQL中间件,SQL防火墙,连接池等软件。 学习资料与软件 《PostgreSQL 读写分离代理 - Crunchy Proxy(base on golang)》 Postgres on the wire - A look at the P...

PostgreSQL 10 自定义并行计算聚合函数的原理与实践 - (含array_agg合并多个数组为单个一元数组的例子)

4 minute read

背景 PostgreSQL 9.6开始就支持并行计算了,意味着聚合、扫描、排序、JOIN等都开始支持并行计算。对于聚合操作来说,并行计算与非并行计算是有差异的。 例如avg聚合,对一张表进行计算时,一个任务中操作和多个并行任务操作,算法是不一样的。 PostgreSQL提供了一套标准的接口,可以支持聚合函数的...

PostgreSQL bitmap scan的IO放大的原理解释和优化

1 minute read

背景 PostgreSQL 支持9种索引接口: 《PostgreSQL 9种索引的原理和应用场景》 每一种索引的结构,适合的数据类型,适合的查询场景都不一样。 对于多值类型(例如 K-V,数组、全文检索 类型),我们可以选择GIN倒排索引接口,GIN使用的扫描方法是bitmap scan的扫描方法。 实际...

用PostgreSQL 处理 指纹 数据

2 minute read

背景 pgafis是一个插件,支持存储指纹特征值,同时将指纹特征比对算法作为UDF编写到了数据库中,安装这个插件依赖指纹比对算法库。 https://www.nist.gov/services-resources/software/nist-biometric-image-software-nbis http...

PostgreSQL 模糊查询 与 正则匹配 性能差异与SQL优化建议

2 minute read

背景 PostgreSQL通过 pg_trgm插件,可以支持正则表达式、LIKE 前后模糊查询。 (要支持中文的话,必须确保lc_ctype <> C) 《中文模糊查询性能优化 by PostgreSQL trgm》 从语义上来讲,以下两个查询的语义是一样的。 select * from te...

如何将谷歌地球(google earth) 的数据导入 PostgreSQL

less than 1 minute read

背景 KML(Keyhole Markup Language) 是一种文件格式,用于在地球浏览器(例如 Google 地球、Google 地图和 Google 地图移动版)中显示地理数据。KML 使用包含嵌套的元素和属性的结构(基于标记),并符合 XML 标准。 由于KML已经加入OGC标准,所以作为OGC的成...

OSM(OpenStreetMap) poi、路网 数据导入 PostgreSQL

less than 1 minute read

背景 从OpenStreetMap下载地图数据,使用osm2pgsql可以将数据导入PostgreSQL数据库,结合PostGIS插件,实现POI的业务。 如果要提取POI(兴趣点)数据,可以使用osmosis工具,处理OSM导出的文件。 https://github.com/openstreetmap/os...

PostgreSQL freeze 风暴导致的IOPS飙升 - 事后追溯

1 minute read

背景 在使用PG 9.6以前的版本时,freeze带来的IOPS影响较大,体现在数据文件读写、WAL日志大量产生。 原因是9.6以前的版本,当表的年龄达到一定的阈值后(全局参数或表级参数控制),会触发freeze的动作,扫描全表,同时有可能(如果BLOCK被FREEZE的话)产生WAL(越大的表,带来的IO越大...

[转载]MySQL和PostgreSQL的常用语法差异

less than 1 minute read

背景 作者:凌络 在去年的DBMS评比中,PostgreSQL夺冠,PostgreSQL一直保持上升姿态,越来越多的客户选择使用PostgreSQL,还有一部分客户从MySQL迁往PostgreSQL,那PostgreSQL和MySQL对于开发者来说的差异在哪里呢?末学对比了下语法差异,不一样的地方用红色标记了...

[转载]MySQL和PostgreSQL的数据类型对比

less than 1 minute read

背景 作者:凌络 在去年的DBMS评比中,PostgreSQL夺冠,PostgreSQL一直保持上升姿态,越来越多的客户选择使用PostgreSQL,还有一部分客户从MySQL迁往PostgreSQL,那PostgreSQL和MySQL对于开发者来说的差异在哪里呢?我们先看下数据类型。 数据类型 看着不方...

PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) SQL防火墙使用(白名单管理、防SQL注入、防DDL等)

8 minute read

背景 数据库SQL防火墙是一个安全加强功能,通常被用于防止或减轻数据库被攻击后,泄露数据或者数据被破坏带来的损失。 包括: 1、防止SQL注入。 2、防止业务访问无需访问的对象。 3、防止业务执行DDL。 4、防止业务执行不带WHERE条件的DML。 5、防止业务执行不带WHERE条件或者WHERE条...

电商订单 + 物流信息对称补齐案例 - A, B表,到达时间交叉,增量JOIN补全C数据

2 minute read

背景 在电商平台中,分销是非常普遍的现象,你在淘宝上买的东西,很可能并不是商家本身发货的,和你对接的商家,也许只是一个分销商。 因此一个物流信息,可能涉及到多个订单。 物流、订单表的到达时间可能不完全一致,所以在某一时刻,肯有订单,但是没有物流信息。或者有物流但是没有订单记录。 如果A表代表订单表,B表...

PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) 索引推荐功能使用

2 minute read

背景 PostgreSQL商用版本EnterpriseDB,内置了索引推荐功能,原理与这里描述类似。 《PostgreSQL SQL自动优化案例 - 极简,自动推荐索引》 目前仅支持BTREE索引的(单列或多列)推荐,(有一些限制,暂时不支持继承表的推荐,暂时不支持表达式索引的推荐)。 索引推荐用法 1、创...

PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) HTAP功能之资源隔离管理 - CPU与刷脏资源组管理

2 minute read

背景 随着硬件发展,单机的能力越来越强,单个数据库可能服务于多个业务,或者服务于混合场景。例如即有分析型也有在线事务型处理(HTAP)。 资源隔离管理成为非常重要的需求。 对于Linux的用户,使用cgroup可以用来隔离进程的网络、CPU、IO、内存等。PostgreSQL为进程模型,使用cgroup可以实...

PostgreSQL SQL自动优化案例 - 极简,自动推荐索引

2 minute read

背景 SQL自动优化是数据库的高级特性,其中包括SQL 自动rewrite,自动推荐索引,自动优化执行计划 等。 1、自动优化执行计划 目前postgrespro在做这块 https://postgrespro.com/roadmap/56513 Machine learning Query plann...

PostgreSQL SQL filter (SQL 成本 语义过滤器) - SQL成本防火墙

less than 1 minute read

背景 SQL防火墙,或SQL过滤器,在一些特定的场合可能会比较有用。 例如限制某些用户执行可能会耗费很多资源的SQL,限制用户执行SELECT以外的SQL(尽管SELECT不能保证对数据不产生修改,例如SELECT FUNCTION)。 PostgreSQL 提供了一些HOOK可以用来开发此类功能插件。 p...

PostgreSQL on Docker部署是的shm配置注意

less than 1 minute read

背景 如果你使用docker启动PG时,遇到类似这样的问题,可能你需要看看docker的/dev/shm是不是不够大。 "ERROR: could not resize shared memory segment "/PostgreSQL.388782411" to 50438144 bytes: No spa...

强制数据分布与导出prefix - 阿里云pg, hdb pg oss快速数据规整外部表导出实践案例

2 minute read

背景 批量数据导出在数据分析、数据圈选、广告系统、数据清洗系统、数据规整系统中是一个比较常见的需求,例如: 1、导出任务流。 2、广告系统,圈选人群。 3、数据清洗并导出。 4、数据按某些规则分类,规整并输出到不同的文件。 通常数据库的导出功能相对来说比较单一,例如可以导出query的结果,导出表,导出...

SQL流式案例 - 旋转门压缩(前后计算相关滑窗处理例子)

less than 1 minute read

背景 在流计算应用中,保持窗口和数据可重算(设置起点重新开始算)并覆盖已有计算结果。是两个比较特殊但又很有用的需求。 例如流数据来自多个业务线,数据在现实中的发生有先后逻辑,然而由于系统的问题可能有数据到达差异,例如先发生的事情,数据反而后到达,(比如说订单,先下单,后付款,在发货,这是多个业务线产生的数据,...

PostgreSQL 秒杀4种方法 - 增加 批量流式加减库存 方法

3 minute read

背景 秒杀,即对同一个商品,消减库存。 带来的数据库问题是热点行,由于数据库最细粒度的锁通常是行锁,同一行同一时刻只能被一个事务更新,其他事务如果要更新同一行,会等待行级排它锁。 PostgreSQL中有几种方法来处理秒杀: 1、暴力,直接更新 2、skip locked,跳过被锁的行,直接返回,防止会话...

PostgreSQL 大学选课相关性应用实践

1 minute read

背景 大学生选课,一门课程可同时有若干学生选修,一个学生可能同时选多门课程,学生和课程的关系是多对多的关系。 1、如何找出每一门课程相关的课程(即这门课程的学生,还选了其他一些什么课程?)同时要求按相关性排序。 2、如何找出每一门课程相关的课程(即这门课程的学生,还选了其他一些什么课程?这些课程的学生又选了一...

PostgreSQL json 任意位置 append 功能实现

less than 1 minute read

背景 在JSON的任意位置,插入或append一段。目前PG内置函数不支持,需要复杂的SQL。 目前支持的内置操作符和函数如下: https://www.postgresql.org/docs/current/static/functions-json.html 现在有一个这样的需求,在对应某个PATH的位...

航空公司数据库设计

6 minute read

背景 通过学习航空公司数据库设计,学习PostgreSQL的使用。 这个DEMO来自postgrespro: https://postgrespro.com/docs/postgrespro/10/demodb-bookings.html 加载航空公司数据 可以任选一个数据集,使用pg_restore还...

传统分库分表(sharding)的缺陷与破解之法

less than 1 minute read

背景 随着互联网的发展,数据爆炸性的增长,数据库逐渐成为了很多业务的绊脚石,很多业务也哭着喊着要上分布式数据库。 但是,传统的分库分表(sharding)带来的问题较多,得不偿失 传统分库分表问题 1、 扩容不方便(需要重分布数据) 2、 分布键变更很麻烦 3、 分布键选择(架构设计)需要谨慎,甚至...

PostgreSQL 3D City 应用

3 minute read

背景 空间应用在城市规划建设中,在发挥越来越重要的作用! PostGIS是一个开源的PostgreSQL空间数据库插件,遵循OGC的SQL协定设计,应用广泛。 PostGIS is an open source software program that adds support for geog...

PostgreSQL 图式搜索(graph search)实践 - 百亿级图谱,毫秒响应

14 minute read

背景 图式搜索是PostgreSQL在(包括流计算、全文检索、图式搜索、K-V存储、图像搜索、指纹搜索、空间数据、时序数据、推荐等)诸多特性中的一个。 采用CTE语法,可以很方便的实现图式搜索(N度搜索、最短路径、点、边属性等)。 其中图式搜索中的:层级深度,是否循环,路径,都是可表述的。 例子 创...

[转载]易上手的数据挖掘、可视化与机器学习工具: Orange介绍

less than 1 minute read

背景 可视化分析会是一个让枯燥的数据说话的快捷途径,降低可视化分析门槛,同时又保留它的编程能力,是非常重要的。 如今数据种类越来越多,除了常见的数值、文本,还有数组、K-V、图像、空间数据、波、基因 等等。对可视化分析软件的要求也越来越高。 原文 http://blog.just4fun.site/Ora...

Back to Top ↑

2017

PostgreSQL 实时位置跟踪+轨迹分析系统实践 - 单机顶千亿轨迹/天

3 minute read

背景 随着移动设备的普及,越来越多的业务具备了时空属性,例如快递,试试跟踪包裹、快递员位置。例如实体,具备了空间属性。 例如餐饮配送,送货员位置属性。例如车辆,实时位置。等等。 其中两大需求包括: 1、对象位置实时跟踪,例如实时查询某个位点附近、或某个多边形区域内的送货员。 2、对象位置轨迹记录和分析。结...

Greenplum hash分布算法

1 minute read

背景 Greenplum,如果从master节点写入数据的话,写入性能实际上是比较差的,但是我们可以直接连数据节点来写入: 《让greenplum的oltp性能飞起来》 这种用法需要客户端从master获取gp_segment_configuration,同时需要获取表的分布键,同时需要使用cdbhash算法...

PostgreSQL 时序数据案例 - 时间流逝, 自动压缩(时间粒度老化), 同比环比

4 minute read

背景 时序数据库一个重要的特性是时间流逝压缩,例如1天前压缩为5分钟一个点,7天前压缩为30分钟一个点。 PostgreSQL 压缩算法可定制。例如简单的平均值、最大值、最小值压缩,或者基于旋转门压缩算法的压缩。 《[未完待续] SQL流式案例 - 旋转门压缩(前后计算相关滑窗处理例子)》 《旋转门数据压缩...

惊天性能!单RDS PostgreSQL实例 支撑 2000亿 - 实时标签透视案例 (含dblink异步并行调用)

5 minute read

背景 20亿用户,每个用户1000个标签,基于任意标签组合圈选、透视(业务上的需求是一次最多计算100个标签的组合)。 相当于要处理2000亿记录。 1、实时求标签组合的记录数。(即满足标签组合的用户有多少) 2、用户ID。(级满足标签组合的用户ID。) 要求实时响应。 通常你肯定会想,这个至少需要上百...

超时流式处理 - 没有消息流入的数据异常监控

2 minute read

背景 流计算有个特点,数据流式写入,流式计算。 但是有一种情况,可能无法覆盖。例如电商中的 收货超时,退款处理超时 事件的流式监控。因为数据都不会再写进来了,所以也无法触发流式计算。 这些问题如何流式预警呢? 可以用超时时间+调度的方式,当然这里面有PostgreSQL的独门秘籍: 1、CTE,语法灵活。...

PostgreSQL pgbench : 冒号处理

1 minute read

背景 pgbench 的自定义测试脚本中,冒号有特殊的含义,可以用于变量名的前面,表示这个位置使用变?刻婊弧? /*---------- * Join arguments with whitespace separators. Arguments starting wit...

PostgreSQL Oracle 兼容性之 - Partition By Outer Join实现稠化报表

6 minute read

背景 背景介绍:借用Oracle的一篇例子: http://blog.sina.com.cn/s/blog_4cef5c7b01016lm5.html 在数据库表中,存储的数据经常是稀疏数据(sparse data),而不是稠密数据(dense data)。 先来了解一下什么是稀疏数据,比如一个产品销售情况...

PostgreSQL 高并发任务分配系统 实践

2 minute read

背景 给任务分配线程ID,或让线程去抢占任务执行,是任务分配系统中的基本需求。 目的是能够快速的消耗掉所有的任务,同又要保证两点: 1、所有任务都被领取。 2、每个任务只能被一个线程领取。 3、每个线程同一时间只能领取一个任务。 实际上在数据库中, 就是一个高并发的,实时更新系统,设计时要尽量避免冲突,...

Greenplum merge insert 用法与性能 (insert on conflict) - 2

5 minute read

背景 《Greenplum merge insert 用法与性能 (insert on conflict)》 这一篇写的是批量的合并写(有则更新,无则插入)。 在Greenplum开放了segment节点的写后,可以采用传统的方法来实现,不需要批量操作。 DEMO Greenplum暂时不支持insert ...

Greenplum merge insert 用法与性能 (insert on conflict) - 1

7 minute read

背景 PostgreSQL insert on conflict语法非常强大,支持合并写入(当违反某唯一约束时,冲突则更新,不冲突则写入),同时支持流式计算。 流计算例子链接: 《PostgreSQL 流式统计 - insert on conflict 实现 流式 UV(distinct), min, max...

Greenplum 点查(按PK查询)性能与提升空间

less than 1 minute read

背景 点查,基于PK的查询或者OLTP类查询,实际上并不是GPDB 擅长的,GPDB擅长的是海量的OLAP。 不过在企业、政府等窗口服务类业务,并发实际上并不高,如果GPDB的点查性能达到一定的性能时,实际上也能满足这类场景的需求。 测试 下面是一组测试,造10亿条测试数据,按PK查询。 create ta...

Greenplum 统计信息收集参数 - 暨统计信息不准引入的broadcast motion一例

3 minute read

背景 数据库执行计划的好坏,与数据库的SQL优化器息息相关。Greenplum有两套优化器,legacy query optimizer 与 ORCA。 这两个优化器都是CBO优化器,都需要依赖统计信息,如果统计信息不准确,可能生成的执行计划就不准确。 例如我们有一个这样的QUERY,发现怎么跑都跑不出来。 ...

PostgreSQL 设置单条SQL的执行超时 - 防雪崩

less than 1 minute read

背景 设置单条SQL的执行超时,防雪崩。 通常来说可以在SQL发起前设置事务级超时参数,SQL执行结束,重置。(如果SQL异常退出,会自动重置事务级参数) 例子 begin; ...... set local statement_time='100ms'; select count(*) fro...

多流实时聚合 - 记录级实时快照 - JSON聚合与json全文检索的功能应用

4 minute read

背景 这个需求是这样的,数据在写入时,以上一条记录作为基础,将当前写入的记录与上一条记录合并,然后作为新的记录写进去。 从而每一条记录都携带了之前所有记录的内容。 当然这里指的是每个维度各自的快照,并不是一张表所有记录的快照。 例如,一笔电商订单,可能经过若干个系统(每个系统产生的属性可能都不一样,多个系统...

人、机客户服务质量 - 实时透视分析 - (多股数据流上下文相关实时分析,窗口保持)

6 minute read

背景 通常一个服务型的产品,面向很多用户时,都会提供多种服务渠道: 电话、WEB、人工客服。机器人客服。 如何从各个维度(问题分类、地区分类。。。。)了解问题的 : 解决率、解决时长柱状图、一次解决率(例如电话机器人、转人工、转机器人等,如果多次流转说明一次解决率太低)。 这个透视分析,可以作为检验客户...

PostgreSQL 业务数据质量 实时监控 实践

4 minute read

背景 当业务系统越来越庞大后,各个业务线的数据对接会越来越频繁,但是也会引入一个问题。 数据质量。 例如上游是否去掉了一些字段,或者上游数据是否及时触达,又或者上游数据本身是否出现了问题。 通过业务数据质量监控,可以发现这些问题。 而PostgreSQL内置的统计信息能力,已经满足了大部分业务数据质量实时...

如何根据行号高效率的清除过期数据 - 非分区表,数据老化实践

1 minute read

背景 数据按时间维度老化,删除或转移,是很多业务都有的需求。 例如业务的FEED数据,CDN的日志数据,物联网的跟踪数据等,有时间维度,可能再有状态值(标记最终状态)。 阿里云RDS PG, HDB PG都对接了OSS存储,可以在OSS中存储冷数据。 我们可以将老化数据直接删除,也可以将老化数据删除并写...

Recheck Cond filter IOCPU放大 原理与优化CASE - 含 超级大表 不包含(反选) SQL优化

3 minute read

背景 在阅读本文之前,先提几个问题: 1、用了索引是不是就不需要访问表了? 2、用了索引是不是就不需要进行二次判断了? 第一个问题,只有一种情况用了索引是不需要访问表的,Index Only Scan,并且对应堆表行号对应的HEAP块中没有不可见TUPLE(访问表的VM文件得到)。否则都需要回表,访问堆表的...

PostgreSQL - 鱼与熊掌可兼得 - 多副本0丢失与高性能兼得 - 事务级异步、同步开关

less than 1 minute read

背景 大多数的数据库属于IO密集型应用,特别是写繁忙的TP系统,例如账户系统。 为了保证数据的可靠性,事务提交时,需要确保事务产生的REDO落到持久化的存储中。 为了提高响应时间,除了数据库软件本身的优化,例如分组提交(降低IO频次)。还可以通过购买高IOPS能力的硬件来实现RT时延的降低。 当然,将来硬盘...

PostgreSQL - 全文检索内置及自定义ranking算法介绍 与案例

1 minute read

背景 《用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询》 《排序算法》这个章节实际上介绍了PostgreSQL的ranking算法。 tsvector将文档分为4层结构:标题、作者、摘要、内容。对这四个层级,用户可以设定对应的weight,用于ran...

PostgreSQL 用 CTE语法 + 继承 实现拆分大表

1 minute read

背景 业务设计初期可能不会考虑到表将来会有多大,或者由于数据日积月累,单表会变得越来越大。 后面在考虑分区的话,应该怎么将单表切换成分区表呢? 这里可以用到PostgreSQL的CTE语法,以及继承功能,还有内置的分区表功能。 例子 具体步骤 1、创建分区表 2、创建继承关系,分区表继承自需要拆分的表 ...

PostgreSQL 逻辑订阅 - DDL 订阅 实现方法

4 minute read

背景 逻辑订阅是PostgreSQL 10内置的功能,通过逻辑订阅,可以实现部分数据的同步要求。例如可以做到行级、表级、库级的订阅。 《使用PostgreSQL逻辑订阅实现multi-master》 《PostgreSQL 逻辑订阅 - 给业务架构带来了什么希望?》 《PostgreSQL 10.0 pre...

PostgreSQL Oracle兼容性 - substrb - orafce substrb 适配 Oracle substrb

1 minute read

背景 在orafce提供的substrb中,当截断到某个多字节字符时,如果字符被中间截断,会导致乱码。 为了兼容oracle substrb,不截断多字节字符,可以在orafce包的substrb基础之上再写一个plpgsql函数来代替。 兼容oracle substrb 下面是阿里云提供的方法。 crea...

Greenplum explain analyze 解读 + 深度明细开关 - 珍藏级

14 minute read

背景 解读Greenplum 的explain analyze输出。同时介绍两个深度明细开关explain_memory_verbosity , gp_enable_explain_allstat 。 例如,我们的一个QUERY是什么地方有瓶颈,是网络瓶颈还是CPU瓶颈,都可以从里面打印的时间观之一二。 ...

GIS术语 - POI、AOI、LOI、路径、轨迹

less than 1 minute read

背景 poi Point of interesting. 可以翻译为兴趣点,就是在地图上任何非地理意义的有意义的点:比如商店,酒吧,加油站,医院,车站等。不属于poi的是有地理意义的坐标:城市,河流,山峰 兴趣点(POI,Point of interest),兴趣点是我们就是导航软件商收录的信息点,比如说XX...

PostgreSQL 10 on ECS 实施 流复制备库镜像+自动快照备份+自动备份验证+自动清理备份与归档 - 珍藏级

21 minute read

背景 介绍在阿里云ECS环境中,实现一个非常简单,但是可用性和可靠性满足一般企业要求的PostgreSQL环境。 包括: 1、随ECS自动启动数据库 2、包括一个延迟毫秒以内的物理流复制备库 3、包括自动的秒级快照备份,可以将数据库恢复到过去的任意时间点 4、包括自动备份集有效性验证 5、包括自动清理...

PostgreSQL、Greenplum 滑动窗口 分析SQL 实践

5 minute read

背景 滑动窗口分析是数据分析中比较常见的需求,例如需要分析每一天的最近7天内的UV、PV、sum, count, avg, min, max等。 因为每一条记录的最近7天的数据都不一样,不能直接GROUP BY,而需要使用 帧 的技术,得到当前行最近7行的数据,并进行统计。 使用的是PostgreSQL的...

一个端口代理软件 - inlab balance

less than 1 minute read

背景 有些时候,可能需要访问一些没有公网或者不可直接到达的服务器。 例如,你能访问A主机,但是不能访问B主机。如果A主机能访问B主机,那么你就可以在A主机加一个端口代理,从而访问到B主机。 或者如果你可以使用反向代理的方法: 《使用 ssh -R 建立反向/远程TCP端口转发代理》 下面介绍一下端口代理的...

PostgreSQL手机行业经营分析、决策系统设计 - 实时圈选、透视、估算

8 minute read

背景 经营分析、决策支持是现代企业的一个让数据发挥有效价值的分析型系统。 在各个行业中随处可见,例如共享充电宝中,协助销售了解实时的设备租赁情况,销售业绩。在电商中,协助小二和商户发掘目标用户群体。金融行业中,协助输出国民的存款、消费、贷款的画像。 PostgreSQL, Greenplum都是非常适合于经营...

[未完待续] 数据库生命周期管理

less than 1 minute read

背景 数据库选型 云端生态系统设计 TP、AP、流、图、时序、空间、搜索、系统架构设计 冷热存储设计 安全系统设计 审计系统设计 监控系统设计 网络设计 硬件评估与规划 benchmark 部署 读写分离设计 LB设计 sharding MPP HA multi-master设计 备份 时间点恢复 闪回 容灾 异...

PostgreSQL multipolygon 空间索引查询过滤精简优化 - IO,CPU放大优化

2 minute read

背景 在PostgreSQL中,目前对于空间对象的索引,采用的是GiST索引方法,空间树结构如下,每个ENTRY都是一个BOX: 如果对象是多边形,那么在索引结构中,会存储这个多边形的bound box。 那么对于非box类型,一定是会出现空间放大的。 另一方面,如果输入条件是个多边形,那么同样会将...

PostgreSQL 传统 hash 分区方法和性能

5 minute read

背景 除了传统的基于trigger和rule的分区,PostgreSQL 10开始已经内置了分区功能(目前仅支持list和range),使用pg_pathman则支持hash分区。 从性能角度,目前最好的还是pg_pathman分区。 但是,传统的分区手段,依旧是最灵活的,在其他方法都不奏效时,可以考虑传统方...

PostgreSQL distinct 与 Greenplum distinct 的实现与优化

17 minute read

背景 求distinct是业务的一个普遍需求,例如每天有多少用户,每个省份有多少用户,每天有多少类目的用户等。 select date,count(dinstinct user) from tbl group by date; select date, province, count(distinct...

PostgreSQL 索引虚拟列 - 表达式索引 - JOIN提速

3 minute read

背景 CASE: 使用虚拟索引,响应时间从2.3秒下降到0.3毫秒 业务系统在设计时,为了减少数据冗余,提升可读性,通常需要将不同的数据放到不同的表。 在查询时,通过多表JOIN来补齐需要查询或在过滤的内容。 比如这样的例子: 有两张表,分别有1千万和100万数据,当用户查询时,需要补齐那100万表中的某个...

乱序写入导致的索引膨胀(B-tree, GIN, GiST皆如此)

1 minute read

背景 有些场景,用户会发现重建索引,索引比原来更小。 通常这种情况是索引字段乱序写入,导致索引频繁分裂,使得索引页并不是百分百填满。膨胀使然。 B-Tree索引 由于索引页中的数据是有序的,因此在乱序写入时,索引页可能出现分裂,分裂多了,空洞就会多起来(一页里面没有填满)。 例子 1、先建索引,乱序写入。...

PostgreSQL 如何快速构建 海量 逼真 测试数据

3 minute read

背景 为了测试或验证需要,通常需要快速的构建测试数据。 PostgreSQL提供了一些非常有用的功能,可以帮助用户快速的构建测试数据。 有趣的功能 1、SRF 返回多条记录的函数。例如 ...

PostgreSQL 11 preview - compress method 接口 - 暨开放接口系列

10 minute read

背景 PostgreSQL是一款扩展能力极强的数据库,这也是PG可以深入各个垂直行业的原因。 PostgreSQL的开放式接口 已有非常多跟进自定义接口扩展出来的插件。 下面是自定义接口对应的文档。 1、自定义函数 https://www.postgresql.org/docs/10/static/xfu...

PostgreSQL 异步消息实践 - Feed系统实时监测与响应(如 电商主动服务) - 分钟级到毫秒级的实现

9 minute read

背景 在很多业务系统中,为了定位问题、运营需要、分析需要或者其他需求,会在业务中设置埋点,记录用户的行为在业务系统中产生的日志,也叫FEED日志。 比如订单系统、在业务系统中环环相扣,从购物车、下单、付款、发货,收货(还有纠纷、退款等等),一笔订单通常会产生若干相关联的记录。 每个环节产生的属性可能是不一样的...

PostgreSQL 电商小需求 - 凑单商品的筛选

less than 1 minute read

背景 电商的促销活动非常多,规则可能比较复杂,要薅羊毛的话,数学可能要比较好才行。因此也出现了大量的导购网站,比如SMZDM。 但是实际上电商里面也有类似的应用,可以智能的分析买家的需求,根据买家的需求、已有的券、购物车,向用户推荐凑单品。 凑单的需求,本质上是多个字段组合搜索的需求。 1、购物车总金额 ...

PostgreSQL Oracle 兼容性之 - rowid (CREATE TABLE WITH OIDS)

1 minute read

背景 Oracle的数据中,通过ROWID可以定位到一条记录,当记录没有发生行迁移时,ROWID是不变的,因此即使不使用PK,也能很好的定位到一条记录。 PostgreSQL中,也有行号,CTID,由BLOCK_ID和ITEM_ID组成,即哪个数据块的哪条记录。 但是PostgreSQL的引擎为多版本引擎,因...

HTAP数据库 PostgreSQL 场景与性能测试之 47 - (OLTP) 空间应用 - 高并发空间位置更新、多属性KNN搜索并测(含空间索引)末端配送、新零售类项目

20 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

[未完待续] HTAP数据库 PostgreSQL 场景与性能测试之 44 - (OLTP) 空间应用 - 空间包含查询(输入多边形 包含 表内空间对象)

1 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 32 - (OLTP) 高吞吐数据进出(堆存、行扫、无需索引) - 阅后即焚(JSON + 函数流式计算)

2 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 31 - (OLTP) 高吞吐数据进出(堆存、行扫、无需索引) - 阅后即焚(读写大吞吐并测)

2 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 28 - (OLTP) 高并发点更新

1 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 25 - (OLTP) IN , EXISTS 查询

6 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 23 - (OLAP) 并行计算

3 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 21 - (OLTP+OLAP) 排序、建索引

3 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 17 - (OLTP) 数组相似查询

2 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 3 - (OLAP) 大表JOIN统计查询

1 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 2 - (OLTP) 多表JOIN

2 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 1 - (OLTP) 点查

1 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

PostgreSQL 中英文混合分词特殊规则(中文单字、英文单词) - 中英分明

less than 1 minute read

背景 某个业务系统有一个这样的要求: 分词后,要求,英文以单词形式出现,中文(多字节字符)以单字符形式出现。 这样的需求,需要如何来实现呢? 自定义分词规则UDF 切词的一些隐含参数,请参考: 《使用阿里云PostgreSQL zhparser时不可不知的几个参数》 要出现单字,我们需要这样来设置,对于...

PostgreSQL 多字段任意组合搜索的性能

3 minute read

背景 PostgreSQL 多字段,任意组合搜索,有三种优化手段: 1、gin索引(支持任意字段组合的查询) 《宝剑赠英雄 - 任意组合字段等效查询, 探探PostgreSQL多列展开式B树 (GIN)》 2、bloom索引(支持任意只读组合的等值查询) 《PostgreSQL 9.6 黑科技 bloom...

PostgreSQL pg_stat_reset清除track_counts的隐患

4 minute read

背景 PostgreSQL数据库的statstic模块有一些计数器,用于统计每个表被插入、更新、删除的记录数。 通过这些视图,可以查看计数器统计到的一些计数: postgres=# \dv pg_stat* List of relations S...

PostgreSQL 电子围栏的应用场景和性能(大疆、共享设备、菜鸟。。。)

less than 1 minute read

背景 电子围栏,这个在GIS应用中非常常见的词。在很多业务场景中都可以使用: 电子围栏的常见手段是圈出一块,或者一些多边形。当被监控对象在多边形内或者多边形外时(根据业务模型),作为一个判断条件,触发一些业务规则。 1、禁飞区 玩大疆无人机的话,你一定要知道哪里是禁飞区,否则可能违法被抓,但是你可能并不知道...

PostgreSQL 虚拟 虚假 索引(hypothetical index) - HypoPG

1 minute read

背景 DBA实际上是一种比较稀缺的资源,很多企业甚至没有DBA,或者SA、开发人员兼职DBA,对于一般的使用者,对数据库了解程度有限,特别是在SQL优化方面的知识更加有限。 最常用也是奏效较快的SQL优化手段,通常是加索引,这也是我从很多开发者交流后得知的,很多人的概念是,SQL慢,加索引嘛。 但是加索引有没...

PostgreSQL 统计信息pg_statistic格式及导入导出dump_stat - 兼容Oracle

14 minute read

背景 《PostgreSQL 规格评估 - 微观、宏观、精准 多视角估算数据库性能(选型、做预算不求人)》 EXPLAIN是PG数据库用于输出SQL执行计划的语法, 1、生成的执行计划中包含COST一项。 如果校准了成本因子,COST可以和SQL实际执行时间对其。因子校对的方法如下,实际上每一种硬件,我们只...

PostgreSQL 10 新特性 - identity column (serial, 自增)

3 minute read

背景 自增列是数据库的一个常用功能,PostgreSQL的自增列在10的版本出来前,有两种非常简单的方法来实现: 1、serial类型,自动创建一个序列,同时将列设置为INT,默认值设置为nextval(‘序列’)。 create table test(id serial, info text); ...

最受开发者欢迎的HTAP数据库PostgreSQL 10特性

3 minute read

背景 作为一款HTAP数据库(同时支持 “OLTP高并发在线事务处理” 与 “OLAP在线分析” 业务场景),PostgreSQL 10的哪些特性是开发人员、DBA、架构师都喜欢的呢? 多核并行增强 9.6的版本支持如下并行: Sequential scans Aggregates Hash and ...

MySQL准实时同步到PostgreSQL, Greenplum的方案之一 - rds_dbsync

3 minute read

背景 rds_dbsync是阿里云数据库内核组开源的一个数据实时同步工具。 可以解析MySQL的binlog,或者PostgreSQL的WAL日志,实现增量的实时同步。同时支持全量不落地迁移功能。 rds_dbsync功能介绍 1、全量不落地迁移(从mysql到pgsql,从pgsql到pgsql,从mys...

debezium - 数据实时捕获和传输管道(CDC)

less than 1 minute read

背景 在业务系统中,会涉及到多个数据源的数据流转,例如在线系统的数据流转到分析系统、流计算系统、搜索引擎、缓存系统、事件处理系统等。 为了实现这一目的,CDC系统应运而生,CDC系统用于捕获上游数据的实时变化(已提交的数据),写入消息队列(例如KAFKA)持久化。下游系统,消费消息队列的数据。从而实现实时的数据...

PostgreSQL 整型除法要注意

2 minute read

背景 整型除以整型,正常情况下当然得到的应该也是整型。数据库也是这么干的。 但是在数据库应用中,通常业务的需求是得到NUMERIC,不能直接把小数干掉。 数据库的行为给用户带来了诸多不便,例如1除以2,如果是整型除法会得到0,然而用户可能要的是0.5。 那么怎么处理呢? 1、建议用户使用float8, m...

Linux 批量依赖库拷贝(ldd)

3 minute read

背景 如何将程序依赖的动态库拷贝到指定的目录? 例子 1、通过LDD查看依赖的动态库。 # ldd postgres linux-vdso.so.1 => (0x00007ffcfc324000) libpthread.so.0 => /lib64/lib...

PostgreSQL Oracle 兼容性之 - timestamp + numeric

2 minute read

背景 Oracle里面支持时间戳与数字的加减,数字默认单位为天。 PostgreSQL 支持时间戳与interval类型进行加减。日期支持与整型做加减。 为了兼容Oracle(时间戳与数字加减),我们可以复写操作符来实现时间戳与数字的加减。 复写操作符 1、自定义几个函数,用于时间戳与数字的加减。 pos...

Linux page allocation failure 的问题处理 - zone_reclaim_mode

3 minute read

背景 Linux内核分配失败,现象: 内存使用一定量后,HANG。 dmesg中可能会有类似这样的错误,系统HANG住,无法连接,需要重启解决。 page allocation failure Oct 24 11:27:42 kernel: : [21289.479063] pytho...

[转] 快速计算Distinct Count

2 minute read

背景 本文转发自技术世界,原文链接 http://www.jasongj.com/2015/03/15/count_distinct/ 正文 UV vs. PV 在互联网中,经常需要计算UV和PV。所谓PV即Page View,网页被打开多少次(YouTube等视频网站非常重视视频的点击率,即被播放多少次,也即...

在PostgreSQL中使用 plpythonu 调用系统命令

1 minute read

背景 有些时候,为了方便调度,可能需要在数据库中执行一些系统命令。 例如清理OSS对象存储,查看磁盘使用量等。 使用plpythonu,可以简便的调用系统命令。 例子 1、执行命令,返回命令的返回值。 create or replace function exec_cmd1(cmd text) retu...

多国语言字符串的加密、全文检索、模糊查询的支持

2 minute read

背景 PostgreSQL中的全文检索和模糊查询是很好实现的。 通过pg_trgm插件,可以实现模糊查询(前、后、全模糊),近似查询,正则表达式查询的索引加速。 通过中文分词插件(pg_jieba, pg_scws, zhparser),可以实现中文分词,其他语种的分词,参考对应的插件。 但是,如果要让数据...

Greenplum, PostgreSQL 数据实时订阅的几种方式

less than 1 minute read

背景 通常在一个企业中,对一份数据可能更有多个业务系统需要对其进行处理。 《从人类河流文明 洞察 数据流动的重要性》 因此数据是流动的,通常会通过消息队列来完成这样的工作。不过呢,这样要求消息队列是最上游。 当无法将消息队列放到最上游时,例如数据先到了数据库,再订阅给其他业务线,怎么办呢? 就比如这里的R...

PostGIS 距离计算建议 - 投影 与 球 坐标系, geometry 与 geography 类型

2 minute read

背景 PostGIS中有两种常用的空间类型geometry和geography,这两种数据类型有什么差异,应该如何选择? 对于GIS来说,首先是坐标系,有两种:一种是球坐标(地理坐标),另一种是平面坐标(投影坐标)。 球坐标通常用于计算,平面坐标通常用于展示(也可以计算)。 投影坐标是从球坐标投影后展开得来...

Greenplum 类型一致性使用注意 - 索引条件、JOIN的类型一致性限制

5 minute read

背景 在查询时,有很多用户会犯浑,发现建立了索引,但是查询偏偏不走索引。 怎么不走索引啊? 这里做容易混淆的是类型的差异,例如字段类型为字符串,但是输入的是INT类型,这样就可能不走索引。(除非创建了自动的CAST,自动进行类型转换) 查询的输入类型与索引的类型一致是非常有必要的。 例子 1、建表(使用变...

Greenplum 点查询的优化(分布键)

2 minute read

背景 Greenplum是分布式数据库,在建表时,可以指定随机分布、或按指定字段或多个字段进行分布。 因此在做点查时,Greenplum可以根据WHERE条件来判断是需要在所有节点查询,还是只需要到若干节点查询。 假设tbl按id分布,那么下面几种情况应该到哪个节点查询呢: -- 到单个节点查询 sel...

PostgreSQL DISTINCT 和 DISTINCT ON 语法的使用

4 minute read

背景 本文介绍一下distinct的几种用法。 https://www.postgresql.org/docs/10/static/queries-select-lists.html#queries-distinct 1、返回唯一值 After the select list has been proces...

[未完待续] PostgreSQLGreenplum Customer视角TODO

6 minute read

背景 https://wiki.postgresql.org/wiki/Todo PostgreSQL 一、内置HA 1、多副本自动选主、自动HA 2、单副本HA 二、sharding 1. 物理流复制备库,支持对外部表执行DML操作,因为它不修改本地数据,没有风险。 此法,可以用于sharding库的中...

Greenplum 模糊查询 实践

2 minute read

背景 文本搜索的需求分为: 1、全匹配,如: select * from table where column = 'xxxx'; 2、后模糊,如: select * from table where column like 'xxxx%'; 3、前模糊,如: select * from ...

PostgreSQL 生成随机身份证ID

less than 1 minute read

背景 生成随机身份证号。 规则 前1、2位数字表示:所在省(直辖市、自治区)的代码; 第3、4位数字表示:所在地级市(自治州)的代码; 第5、6位数字表示:所在区(县、自治县、县级市)的代码; 第7 - 14位数字表示:出生年、月、日; 第15、16位数字表示:所在地的派出所的代码; 第17位数字表示...

PostgreSQL 10 内置分区 vs pg_pathman perf profiling

9 minute read

背景 PostgreSQL 10内置分区的性能不如pg_pathman分区插件的性能。有非常大的优化空间,那么是什么导致了分区的性能问题呢? 编译PostgreSQL 10.0 1、编译、打开debug CFLAGS="-g -ggdb -fno-omit-frame-pointer" ./configure...

PostgreSQL 如何让 列存(外部列存) 并行起来

11 minute read

背景 PostgreSQL 10已经实现了大部分操作的并行计算,例如(全表扫描,索引扫描,位图扫描,哈希JOIN,哈希聚合,分组聚合,排序,建索引等)。 对于外部表,要实现并行扫描,PostgreSQL有什么方法呢? PostgreSQL不仅支持单个对象的并行计算,还支持多个对象的并行访问。多个对象的并行访问...

HTAP数据库(OLTP+OLAP) - sharding 和 共享分布式存储 数据库架构 优缺点

less than 1 minute read

背景 随着互联网的发展,数据爆炸性的增长,数据库逐渐成为了很多业务的绊脚石,很多业务也哭着喊着要上分布式数据库(个人认为大部分是高估了自己的业务)。 分布式数据库又分很多流派,比如重点要说的sharding和共享分布式存储的架构,它们有着什么样的优缺点呢? sharding vs 共享分布式存储 数据库架构 ...

PostgreSQL 自定义自动类型转换(CAST)

5 minute read

背景 PostgreSQL是一个强类型数据库,因此你输入的变量、常量是什么类型,是强绑定的,例如 在调用操作符时,需要通过操作符边上的数据类型,选择对应的操作符。 在调用函数时,需要根据输入的类型,选择对应的函数。 如果类型不匹配,就会报操作符不存在,或者函数不存在的错误。 postgres=# sele...

PostgreSQL Oracle 兼容性 - order by INT(select位置 position)

1 minute read

背景 在一些Oracle的用户中,会问到是否支持order by INT这样的查询语法。它是什么意思呢?实际上就是按查询子句的第几个表达式进行排序。 https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10002.htm ORDE...

PostgreSQL Oracle 兼容性 - synonym 匿名

less than 1 minute read

背景 Oracle 的一个功能,支持对其他对象建立别名(匿名:synonym),它有什么用呢? 比如某些业务系统中,代码中写死了要访问的对象是在哪个用户下的。当迁移时,如果遇到用户名冲突,我们可能会选择将对象同步到其他用户下。那么问题来了,程序也要改动,如果是很老的程序,估计找不到人来做这件事情。用synony...

PostgreSQL flashback(闪回) 功能实现与介绍

14 minute read

背景 闪回的需求往往是救命的需求,因为通常情况下数据库正常运行是不需要闪回的,往往是出现了误操作,被攻击,被注入后,数据库的数据被删除或恶意纂改并且纂改的事务已提交,也就是说纂改已经被持久化了。 这种情况下需要闪回来救命,回到被破坏前的状态。 闪回的目标分为两种: DML闪回和DDL闪回。 DML闪回指对...

PostgreSQL 实践 - 内容社区(如论坛)图式搜索应用

4 minute read

背景 通常一个内容社区网站可能需要记录这么一些数据: 文章,用户,标签。 还有三者之间的关系,包括,文章的标签,用户阅读了文章,用户收藏了文章,用户关注了某用户,用户是某篇文章的作者。 最终要实现毫无人道的查询,例如: 阅读了此篇文章的人还在阅读什么其他文章,和我爱好相近的人都有哪些等等等等。 其中文章数...

PostgreSQL 空间st_contains,st_within空间包含搜索优化 - 降IO和降CPU(bound box) (多边形GiST优化)

5 minute read

背景 点面判断、按面圈选点或其他对象,是GIS几何应用中非常典型的需求。 在PostgreSQL中通过建立GiST索引可以加速这类判断,然而,建立索引就够了吗? 很多时候建立索引是不够的,性能没有到达巅峰,如果要更低的延迟,更少的CPU开销,还有什么优化手段呢? 实际上我以前写过一篇类似的文章,讲的是BTr...

PostgreSQL 独立事件相关性分析 二 - 人车拟合

2 minute read

背景 独立事件相关性分析是一件很有意思的事情,例如 探探软件的擦肩而过功能点,在不同时空与你擦肩而过的人。 舆情分析。 商品最佳销售组合。 安全系统中的人车拟合,对时空数据进行处理,用于司机、乘客、车辆的拟合。 人车拟合 1、建立表结构 人 create table u_pos ( id i...

[未完待续] PostgreSQL NVM Logging

less than 1 minute read

背景 https://www.pgcon.org/2016/schedule/attachments/430_Non-volatile_Memory_Logging.pdf 《Non-volatile Memory (NVM) Logging》 digoal’s 大量PostgreSQL文章入口

[未完待续] PostgreSQL FDW 开发DEMO

less than 1 minute read

背景 https://www.pgcon.org/2016/schedule/attachments/418_pgfdw_and_writable_fdw 《FDWs – how to use and write》 digoal’s 大量PostgreSQL文章入口

[未完待续] PostgreSQL 培训

less than 1 minute read

背景 http://etutorials.org/SQL/Postgresql/Part+I+General+PostgreSQL+Use/ https://pgexperts.com/services/training/ https://www.2ndquadrant.com/en/training/co...

如何评估一款数据库产品 - 18项火眼金睛

less than 1 minute read

背景 不论你是投资方、还是CTO或者架构师,如果你需要在非常核心的场合选择一款数据库产品,或者你要投资一个数据库产品或团队,本文一定会为你提供一个很好的指导。 现在的数据库分类在dbranking上已经分得很细: https://db-engines.com/en/ranking Complete rank...

PostgreSQL 在铁老大订单系统中的schemaless设计和性能压测

7 minute read

背景 数据的流动孕育数据生态,在很多大型系统中,业务系统之间的数据流动是很常见的事情。 例如铁大哥的订单数据的流动,可能带动很多围绕订单的业务需求。比如说订单查询: 1、按用户查询,返回用户30天内的所有订单。 2、按坐席和乘车日期查询,返回这个坐席的售出记录,看看有没有退票、有没有中途票可以加塞等。 以...

PostgreSQL 10 PostGIS 兼容性 FIX

2 minute read

背景 PostGIS 的PG 10有一点兼容性问题: 创建extension时报错如下: ERROR: set-returning functions are not allowed in CASE LINE 6: split_part((...

PostgreSQL Oracle 兼容性 之 USERENV

3 minute read

背景 USERENV 是Oracle 用来获取当前会话变量的函数。官方是这么介绍的: https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions184.htm#SQLRF06117 Describes the current session...

PostgreSQL Oracle 兼容性 之 NUMTODSINTERVAL

less than 1 minute read

背景 NUMTODSINTERVAL 是Oracle数字转时间间隔类型的函数。 例子: SELECT NUMTODSINTERVAL(100, 'day') FROM dual; SELECT NUMTODSINTERVAL(100, 'HOUR') FROM dual; SELECT N...

PostgreSQL 空间、多维 序列 生成方法

6 minute read

背景 数据库的一维序列是很好理解的东西,就是在一个维度上自增。 那么二维、多维序列怎么理解呢?显然就是在多个维度上齐头并进的自增咯。 二维序列 以二维序列为例,应该是这样增长的: 0,0 0,1 1,0 1,1 1,2 2,1 2,2 ... 那么如何生成以上二维序列呢?...

PostgreSQL 事件触发器应用 - DDL审计记录 + 异步通知(notify)

9 minute read

背景 DDL语句的审计是非常重要的,目前PG的DDL审计记录在日志文件中。不便于查看。 为了让DDL事件记录到表中,方便查看,我们可以通过事件触发器来达到这个效果。 结合PostgreSQL的notify, listen的消息通道功能,在DDL执行后可以立即通知到监听对应CHANNEL的程序。 事件触发器审...

PostgreSQL汉字转拼音的函数

1 minute read

背景 在有些应用中,可能会有对拼音搜索、拼音首字母搜索、中文搜索共存的需求。在PostgreSQL中如何实现这个需求呢? 关键是函数转拼音和首字母,方法很简单,将映射关系存入数据库。创建一个函数来转换。 《PostgreSQL汉字转拼音或拼音首字母的应用》 映射文件请到以上文章的末尾下载。 方法 1、创建...

经营、销售分析系统DB设计之PostgreSQL, Greenplum - 共享充电宝 案例实践

21 minute read

背景 共享充电宝、共享单车、共享雨伞,共享女朋友^|^,共享汽车,。。。 共享经济最近几年发展确实非常迅猛。 共享必定涉及被共享对象的管理、会员的管理等,实际上也属于一种物联网系统。 本文以共享充电宝的场景为例,分享一下共享充电宝的经营分析、销售管理系统的后台数据库的设计。(老板关心的是整体销售的业绩,以及各...

PostgreSQL Oracle兼容性之 session_id

1 minute read

背景 数据库有会话的概念,用于区分每一个会话。会话ID是会话的唯一标识。 PostgreSQL的基于进程的模型,每个连接会分配一个backend process,因此使用process id也可以作为会话ID来使用。 postgres=# select pg_backend_pid(); pg_back...

PostgreSQL GUC 参数级别介绍

17 minute read

背景 在添加GUC参数时,需要注意你添加的参数属于什么类别的参数。 例如如果你想让普通用户能随时修改它,那么你需要将参数级别设置为PGC_USERSET。如果你想让超级用户能在线修改它,那么你需要将它设置为PGC_SUSET。如果你想让它能够在修改配置参数并通过信号生效,那么需要设置为PGC_SIGHUP。 ...

PostgreSQL 规格评估 - 微观、宏观、精准 多视角估算数据库性能(选型、做预算不求人)

14 minute read

背景 在提预算时必不可少的环境是评估需要多少硬件。 通常会要求业务方提供一些数据,例如用户数、PV、UV等。但是这种评估纯靠经验,方法非常的粗糙也不准确。 那么到底如何评估需要多少硬件、或者说需要什么样规格的硬件来支撑你未来的业务呢? 对于PostgreSQL这个数据库产品来说,我介绍一下三种评估方法: ...

空间 时间 对象 圈人 + 透视 - 暨PostgreSQL 10与Greenplum的对比和选择

18 minute read

背景 通常一个人的常驻地可能会包括:家、儿女家、双方父母家、情人、异性伴侣家、公司、商圈若干等。 通过对这些数据的运营,可以实现很多业务需求。例如: 1、寻人 《海量用户实时定位和圈人 - 团圆社会公益系统(位置寻人\圈人)》 2、线下广告投放人群圈选,选址,商圈人群画像。 《数据寻龙点穴(空间聚集分析...

画像圈人 + 人群行为透视

3 minute read

背景 本文讲的是这样的场景:画像圈人和人群行为透视的结合。 数据量 标签数 5W+ 用户数 10W+ 用户行为数据 10亿+ 业务目标:根据标签圈出用户群体,对这些用户的行为进行透视分析。 第一步,圈人 第一步是圈出用户群体,如果这一步的数据量非常庞大,则可以参考如下...

如何用一个回形针换一栋别墅 - openBarter (古人的物物交换市场) 类撮合交易系统

1 minute read

背景 很久以前有一则这样的新闻:一个男孩用一个回形针,换回了一套别墅,他是怎么做到的呢? 先不管他是怎么做到的,这让我联想到了古人物物交换的场景,没错古人还没有发明货币之前,都是通过物物交换的方式来得到其他人的东西的。(但是这样效率实在太低了)。另外,现在的证券交易也与之类似,只是更加的简化了的交换系统。 ...

海量用户实时定位和圈人 - 团圆社会公益系统(位置寻人圈人)

3 minute read

背景 老人、儿童是最容易走丢的人群,一定要看好老人和小孩,但是万一走丢了怎么办呢? 阿里有一个公益系统,团圆,这个系统是用来帮助发布走丢人群信息的,公安通过发布的走丢人的照片,最后一次的位置信息,向社会发布。 通过公益平台的合作伙伴(例如运营商、购物软件等)可以向最后一次走丢人士出现的位置附近的人推送寻人启事...

PostGIS 点面叠加视觉判断输出

1 minute read

背景 在新零售、快递等行业,有大量的点数据(例如包裹位置、快递员位置、仓库位置等),同时有大量的面数据(如小区,商圈,写字楼等)。 如何判断实时的正在配送的包裹落在哪个面呢?并且将之联系起来。 这个从视觉角度来思考,非常简单。 例如有一个地图,将其划分为若干个面(例如前面提到的小区)。 然后有一些小点...

Greenplum vacuum ao表和heap表的区别

less than 1 minute read

背景 在Greenplum中删除、更新数据记录时,会产生新的tuple版本,老的版本通过行头部标记:为已删除以及被哪个事务删除的。 因此频繁的更新后,或者批量的删除数据后,需要回收那些旧的版本。 通过vacuum、vacuum full、alter table redistribute命令,可以回收垃圾。 ...

透过postgrespro看PostgreSQL的附加功能

4 minute read

背景 Postgrespro是俄罗斯的一家数据库公司,创始人OLEG是PostgreSQL社区的核心成员之一,一名在俄罗斯莫斯科国立大学,斯特恩伯格天文研究所做科学研究的天文学家。同时也担任Postgres Professional公司的首席执行官。也是一位登顶过珠峰的人。 这里是他的专访 https:/...

PostgreSQL、Greenplum 日常监控 和 维护任务 - 最佳实践

21 minute read

背景 Greenplum的日常监控点、评判标准,日常维护任务。 展示图层 由于一台主机可能跑多个实例,建议分层展示。 另外,即使是ON ECS虚拟机(一个虚拟机一个实例一对一的形态)的产品形态,实际上也建议分层展示,以示通用性。 主机级图层 1、全局 2、以集群分组 展示图形 1、饼图(正常、警告、严...

PostgreSQL 连接串URI配置(libpq兼容配置)

1 minute read

背景 连接数据库是最基本的操作之一,PostgreSQL libpq支持URI的连接模式,格式如下: postgresql://[user[:password]@][netloc][:port][,...][/dbname][?param1=value1&...] 例子 postgresql:...

秒级任意维度分析1TB级大表 - 通过采样估值满足高效TOP N等统计分析需求

9 minute read

背景 估值计算是统计学的常用手段。因为数据量庞大,求精确数值需要耗费巨大的资源,而统计分析并不要求完全精确的数据,因此估值计算是一种折中的方法,广泛应用于统计分析场景。 PostgreSQL是一个功能强大的数据库,在估值统计方面,提供了很多方法。 1、PostgreSQL中,求估计的UV,增量UV等(即cou...

地理坐标系(球面坐标系)和投影坐标系(平面坐标系)

less than 1 minute read

背景 《PostGIS 坐标转换(SRID)的边界问题引发的背景知识 - ST_Transform》 一文,介绍了使用某个坐标系时,计算国内某个点到某个点的距离出现了负数。 背景知识和坐标系有关。 什么是地理坐标系,什么是投影坐标系? 参考此文: http://www.cnblogs.com/jetz/...

PostgreSQL vs Greenplum Hash outer join hash表的选择

5 minute read

背景 数据分析、大表JOIN、多表JOIN时,哈希JOIN是比较好的提速手段。 hash join会首先扫描其中的一张表(包括需要输出的字段),根据JOIN列生成哈希表。然后扫描另一张表。 hash join介绍 https://www.postgresql.org/docs/10/static/planne...

PostgreSQL 黑科技 - 空间聚集存储, 内窥GIN, GiST, SP-GiST索引

6 minute read

背景 单身汉的房间可能是这样的,凌乱得很。 可能会有人表示不服,不是应该这样的吗? 实际上大多数情况下数据库存储也可能是这样的,数据凌乱。索引的目的是在凌乱的数据中找到目标数据,但是从凌乱的数据中按索引顺序扫描一批数据,会有什么后果呢: 没错,IO放大,我在以前的文章中有详细介绍过其原理。 《...

PostgreSQL 10 黑科技 - 自定义统计信息

4 minute read

背景 PostgreSQL和Oracle一样,优化器是基于成本的估算。 成本估算中很重要的一个环节是估计每个执行节点返回的记录数。 例如两张表JOIN的时候,如果走HASH JOIN那么需要选择记录数少的那个作为哈希表。 又比如求多个字段的group by,评估返回多少条记录给上层节点。 对于基于单列统计...

PostgreSQL cube 插件 - 多维空间对象

6 minute read

背景 CUBE是一个多维数据类型,支持两种多维类型:多维POINT、区间(左下+右上)。以及这些几何对象的几何特性搜索和计算(方位搜索、距离计算),这些搜索都支持GiST索引。 我们甚至可以将多个字段合并成多维POINT,实现对大量数据的高效空间聚集、空间计算。 语法 Ex...

音视图(泛内容)网站透视分析 DB设计 - 阿里云(RDS、HybridDB) for PostgreSQL最佳实践

10 minute read

背景 日常生活中,人们使用最多的除了社交类网站、购物网站,估计就是音频、视频、图文信息类内容网站了。 视频网站,已经渗透到各种终端,除了喜闻乐见的手机,还包括移动终端、电脑、盒子、电视、投影仪等。有设备属性、会员属性、渠道属性等。 内容运营是非常重要的环节,而透视则是运营的重要武器。 业务需求 1、生成设...

泛电网系统 海量实时计算+OLTP+OLAP DB设计 - 阿里云(RDS、HybridDB) for PostgreSQL最佳实践

2 minute read

背景 电网系统是一个关系民生,又非常典型的传统系统,虽然传统,量可不小。在互联网化(物联网化)的今天,有很多值得借鉴和思考的点供给其他相关系统参考。 每个省份大概有亿级户电表,最大的地市可能有千万户级别。 以往我们电费是怎么交的呢?我们小区是两个月交一次,也就是说先消费,再付款的方式。这么说起来电网真的是很仁...

通过空间思想理解GiST索引的构造

1 minute read

背景 可以支持空间检索的GiST索引的数据结果到底是什么样的呢? 本文为以下两篇文档的增补: 《Greenplum 空间(GIS)数据检索 B-Tree & GiST 索引实践 - 阿里云HybridDB for PostgreSQL最佳实践》 《PostGIS空间索引(GiST、BRIN、R-Tr...

Greenplum 空间(GIS)数据检索 b-tree & GiST 索引实践 - 阿里云HybridDB for PostgreSQL最佳实践

4 minute read

背景 气象数据、地震数据、室内定位、室外定位、手机、车联网、还有我们最喜欢的“左划不喜欢、右划喜欢”,越来越多的位置属性的数据。将来会越来越多。 基于GIS的数据分析、OLTP业务也越来越受到决策者的青睐,例如商场的选址决策,O2O的广告营销等。有很多基于多边形、时间、用户对象属性过滤的需求。 阿里云Hybr...

PostgreSQL BRIN索引的pages_per_range选项优化与内核代码优化思考

8 minute read

背景 BRIN是PostgreSQL 9.5新增的块级索引接口,存储了被索引字段在块级别的边界值(最大值、最小值)以及其他统计信息。 当需要对某个字段进行检索时,需要扫描整个BRIN索引(这个是BRIN索引内核层面将来值得优化的点)。然后跳过不符合条件的HEAP PAGE,扫描复合条件的HEAP PAGE。实现...

PostgreSQL 增量备份集的有效恢复位点

5 minute read

背景 PostgreSQL支持PITR即时间点恢复,为了支持时间点恢复,至少需要一次全量备份,然后需要归档日志。 这句话描述可能不够清晰,至少需要哪些归档日志,全量备份的时间点有没有要求呢? 本文要解答这个问题。 什么是全量备份 全量备份指的是对数据库的$PGDATA以及所有表空间文件(包括全局数据文件、事...

时序业务,求最新值(从7秒到7毫秒的优化之旅) - 阿里云RDS PostgreSQL最佳实践

5 minute read

背景 在很多场景中,都会有数据合并、清洗的需求。 例如: 1、记录了表的变更明细(insert,update,delete),需要合并明细,从明细中快速取到每个PK的最新值。 2、有很多传感器,不断的在上报数据,要快速的取出每个传感器的最新状态。 对于这类需求,可以使用窗口查询,但是如何加速,如何快速的取...

万亿级电商广告 - brin黑科技带你(最低成本)玩转毫秒级圈人(视觉挖掘姊妹篇) - 阿里云RDS PostgreSQL, HybridDB for PostgreSQL最佳实践

3 minute read

背景 单机支持一万亿(100TB级)数据的毫秒级圈人,怎么做到?拥有PostgreSQL即可。 本文的应用场景来自电商的按条件圈人的广告业务。我在另外两篇文档中,分别使用了 空间数据库的视觉挖掘特性、PostgreSQL的GIN倒排索引 两种方法来实现毫秒级别的圈人。 如下: 《视觉挖掘与PostGIS空间...

Greenplum segment级锁问题排查方法 - 阿里云HybridDB for PostgreSQL最佳实践

5 minute read

背景 Greenplum(GPDB)是一个分布式数据库,分布式数据库的锁管理比单机更加复杂。例如在加锁时,需要对所有节点加锁(包括MASTER和所有的SEGMENT节点),在释放锁时,则需要释放所有节点的锁。 如果在释放过程中,MASTER的锁释放了,而SEGMENT锁没有释放,会造成什么问题呢? 不用说,会...

Greenplum 内存与负载管理(resource queue)最佳实践

2 minute read

背景 Greenplum是一个重计算和重资源的MPP数据库,可谓有多少资源就能消耗多少资源,带来的好处是处理速度变快了,坏处就是容易用超。 CPU、网络、硬盘用超的话,关系不大,因为大不了就是到硬件瓶颈,但是内存用超的话会带来较大的负面影响,例如操作系统OOM用户进程,导致数据库崩溃等。 如果要达到非常强壮的...

数据寻龙点穴(空间聚集分析) - 阿里云RDS PostgreSQL最佳实践

less than 1 minute read

背景 最近鬼吹灯热播,胡八一的《十六字阴阳风水秘术》到底是什么武功秘籍?寻龙点穴又是什么?别问我,不知道。 PS:以下截取自互联网。 寻龙点穴是风水学术语。古人说:三年寻龙,十年点穴。意思就是说,学会寻龙脉要很长的时间,但要懂得点穴,并且点得准则难上加难,甚至须要用“十年”时间。 但是,若没正确方法,就是...

PostGIS空间索引(GiST、BRIN、R-Tree)选择、优化 - 阿里云RDS PostgreSQL最佳实践

8 minute read

背景 空间数据的搜索需求通常包括: 1、平面、三维、多维对象 几何相交、不相交、相邻。 2、平面、三维、多维对象的方位判断(相交或严格在左边、右边、上边、下边),类似数值的大于、小于、大于等于、小于等于。 3、平面、三维、多维对象 包含 另一个对象 4、平面、三维、多维对象 等于 另一个对象 5、平面、...

Greenplum 列存储加字段现象 - AO列存储未使用相对偏移

1 minute read

背景 Greenplum的Append only table支持更新、删除。通过什么支持呢?bitmap文件,标记被删除的行。 因此在更新,删除后,数据可能膨胀。 另一方面,列存储每列一个文件,同一行通过偏移对应起来。例如INT8的两个字段,通过偏移很快能找到某一行的A列对应的B列。 接下来谈谈加字段,在加...

Greenplum 行存、列存,堆表、AO表的原理和选择

8 minute read

背景 Greenplum支持行存和列存,支持堆表和AO表,那么他们有什么不同,如何选择呢? 行存和列存的原理 1、行存,以行为形式组织存储,一行是一个tuple,存在一起。当需要读取某列时,需要将这列前面的所有列都进行deform,所以访问第一列和访问最后一列的成本实际上是不一样的。 在这篇文档中,有defo...

PostgreSQL 单列组合查询优化 - 多个多边形查询优化

2 minute read

背景 在某些空间数据查询需求中,有一些这样的请求,例如查找与某些多边形中的任意一个相交的空间对象。 比如在菜鸟、新零售的业务中,查询某几个商场多边形,或者某几个小区多边形内覆盖的点。 SQL写法可能是这样的 select geo_point,* from table where ST_Within(geo_...

Greenplum 列存表(AO表)的膨胀、垃圾检查与空间收缩(含修改分布键)

5 minute read

背景 Greenplum支持行存储(堆存储)与AO存储,堆存储的垃圾回收和膨胀检测方法请参考: 《如何检测、清理Greenplum膨胀、垃圾 - 阿里云HybridDB for PG最佳实践》 对于AO存储,虽然是appendonly,但实际上GP是支持DELETE和UPDATE的,被删除或更新的行,通过BI...

手工清理 cgroup中的page cache

less than 1 minute read

背景 原文 http://blogs.360.cn/360xitong/2013/05/02/mem-cgroup%E7%9B%AE%E5%BD%95%E6%97%A0%E6%B3%95%E6%B8%85%E7%90%86%E9%97%AE%E9%A2%98%E5%88%86%E6%9E%90/ Cgroup...

如何检测、清理Greenplum膨胀、垃圾(含修改分布键) - 阿里云HybridDB for PG最佳实践

8 minute read

背景 Greenplum通过多版本支持数据的删除和更新的并发和回滚,在删除数据时(使用DELETE删除),对记录的头部xmax值进行标记。在删除记录时,对记录的头部进行标记,同时插入新的版本。 这一就会导致一个问题,如果用户经常删除和插入或更新数据,表和索引都会膨胀。 PostgreSQL是通过HOT技术以及...

解读2017-08-10发布的几个安全漏洞

4 minute read

背景 PostgreSQL 社区于08-10发布了新版本,修复了三个安全漏洞。 https://www.postgresql.org/about/news/1772/ CVE-2017-7546: Empty password accepted in some authentication method...

PostgreSQL on ECS多云盘的部署、快照备份和恢复

11 minute read

背景 随着阿里云云盘的发展,云盘的性能已经越来越好了。IOPS可以做到十万以上,读写吞吐也超过1GB/s了。相信随着网络的发展,SSD云盘IOPS突破40万,读写吞吐突破4GB/s也不远了。 不过这里的IOPS和吞吐是指并发的IO能力,单次IO的延迟与本地还是不能比(将来RDMA网络也许能解决这个问题)。 P...

解密上帝之手 - 阿里云HDB for PostgreSQL数据库metascan特性(存储级、块级、batch级过滤与数据编排)

10 minute read

背景 数据也有生辰八字,你信吗?列与列之间,行与行之间,元素与元素之间如何相生相克?查询慢?不要信什么这都是上天注定的,如何给数据改运?看完本文,你也可以做到。 一份天赋,九份努力。缘分天注定。命由天定。又有说我命由我不由天的。看样子中国古人对先天注定的东西研究还挺透彻,看的还挺开,但是也有通过后天努力,或...

PostGIS 空间数据学习建议

2 minute read

背景 我写过一些GIS的案例和文档,但是为了测试方便,文中大量使用了内置的几何point类型,并非GIS类型。 包括一些空间函数、空间数据的构建使用可能不是特别规范。 收到来自PostgreSQL社区GIS领域朋友的建议,为了防止给学习GIS的同学带来误导,请参考如下建议。 感谢这位朋友。 相关文章 《...

PostgreSQL SQL防火墙

4 minute read

背景 SQL注入通常是业务层做的事情,例如使用绑定变量,使用关键字过滤等手段,避免被SQL注入。 另一方面,数据库也有类似的功能,例如SQL防火墙。 PostgreSQL内置了很多的HOOK,这些HOOK可以方便开发者加入一些功能,例如在SQL parser阶段的HOOK,可以加入一些SQL统计,SQL篡改,...

PostgreSQL 读写分离代理 - Crunchy Proxy(base on golang)

5 minute read

背景 数据库管理员有几个非常常见的问题需要解决:连接池、HA、容灾、读写分离、sharding、MPP、备份、恢复。 1、虽然很多框架都支持本地连接池,但是别忘了APP大多数是无状态的,通常在搞活动前还可能扩容,增加APP的组数,为了防止雪崩或者连接不足,建议中间还可以加一层连接池。例如pgpool, pgbo...

[招聘] [探探] PostgreSQL DBA

less than 1 minute read

招聘 中高级PostgreSQL DBA 公司名称 探探 公司人数 公司简介 https://tantanapp.com/ 公司网站 https://tantanapp.com/ 坐标 北京,朝阳 职位 中高级PostgreSQL DBA 岗位描述 配合产品、开发团队进行数据库设计和调优,对数据库整...

记录动态格式化输出(ToB日志转换业务) - 阿里云RDS PostgreSQL, HybridDB for PostgreSQL最佳实践

6 minute read

背景 有一些业务需要将数据归类动态的输出,比如一些公共日志服务,所有用户的日志都被统一的按格式记录到一起,但是每个最终用户关心的字段都不一样,甚至每个用户对数据转换的需求都不一样。 比如这个业务: 《日增量万亿+级 实时分析、数据规整 - 阿里云HybridDB for PostgreSQL最佳实践》 ...

菜鸟末端轨迹 - 电子围栏(解密支撑每天251亿个包裹的数据库) - 阿里云RDS PostgreSQL最佳实践

6 minute read

背景 菜鸟末端轨迹项目中涉及的一个关键需求,面面判断。 在数据库中存储了一些多边形记录,约几百万到千万条记录,例如一个小区,在地图上是一个多边形。 不同的快递公司,会有各自不同的多边形划分方法(每个网点负责的片区(多边形),每个快递员负责的片区(多边形))。 用户在寄件时,根据用户的位置,查找对应快递公司负...

(新零售)商户网格化(基于位置GIS)运营 - 阿里云RDS PostgreSQL、HybridDB for PostgreSQL最佳实践

11 minute read

背景 伟大的马老师说: “纯电商时代很快会结束,未来的十年、二十年,没有电子商务这一说,只有新零售这一说,也就是说线上线下和物流必须结合在一起,才能诞生真正的新零售” 线上是指云平台,线下是指销售门店或生产商,新物流消灭库存,减少囤货量。 电子商务平台消失是指,现有的电商平台分散,每个人都有自己的电商平台,...

plpgsql 编程 - JSON数组循环

less than 1 minute read

背景 PostgreSQL的plpgsql编程语言和Oracle PL/SQL编程语言类似,是功能很强大的数据库编程语言。 JSON是PG支持的非结构化类型,那么如何在PLPGSQL中LOOP JSON数组呢? https://www.postgresql.org/docs/9.6/static/plpgs...

[招聘] [鲁邦通] PostgreSQL DBA

less than 1 minute read

招聘 PostgreSQL DBA 公司名称 鲁邦通 公司人数 公司简介 http://www.robustel.com.cn/about/corporate-porfile/ 公司网站 http://www.robustel.com.cn/ 坐标 广州 职位 PostgreSQL DBA 岗位描述...

[招聘] [HelloBike] PostgreSQL DBA

less than 1 minute read

招聘 PostgreSQL DBA https://m.lagou.com/jobs/2903568.html?source=weixin&m=1&from=singlemessage&isappinstalled=0 公司名称 hellobike 公司人数 公司简介 关于我们 ...

小微贷款、天使投资(风控助手)业务数据库设计(图式搜索图谱分析) - 阿里云RDS PostgreSQL, HybridDB for PostgreSQL最佳实践

4 minute read

背景 贷款是银行的主营业务之一,但是并不是只有银行能提供贷款,实际上资金雄厚的公司都有能力提供贷款(比如保险行业、资源垄断型企业等)。 除了放贷,我们常说的天使投资、A轮B轮啥的,也是类似的场景,凭什么投你,背后如何决策也需要决策系统的支撑。 与贷款相反的是吸金类业务,比如我们现在发现越来越多的理财产...

医疗大健康行业案例(老人健康实时监测和预警) - 阿里云RDS PostgreSQL最佳实践

4 minute read

背景 人的身体和机器差不多,随着年龄的增长,器官逐渐老化,毛病也会越来越多,注意保养是一方面,另一方面也需要注意实时的监测和发出预警,在问题萌芽状态就解决掉。 以往我们检查身体得去医院或专业的体检机构,很麻烦,随着科技的进步,一些健康指标的监测变得更加方便,例如手环也是一个普及很快的监控检测终端(目前已能够检测...

打造云端流计算、在线业务、数据分析的业务数据闭环 - 阿里云RDS、HybridDB for PostgreSQL最佳实践

3 minute read

背景 水的流动汇成江河大海,孕育生命,形成大自然生态。数据流动,推进社会进步,拓展业务边界。 《从人类河流文明 洞察 数据流动的重要性》 以某淘系业务案例展开,看看用户如何利用阿里云RDS PostgreSQL,HybridDB for PostgreSQL,海量对象存储OSS,打造一个从流计算到在线业务,再...

机票业务性能优化案例 - 阿里云RDS PostgreSQL最佳实践

4 minute read

背景 机票业务的某个模块,数据量10亿+,写、更新、删除量较低。根据KEY查询一些数据,每次查询返回1万条左右的记录。 就是这样简单的需求,业务方发现读成为了巨大的瓶颈,每次返回1万条,100个并发请求,每秒就是100万条(500MB左右),主要的瓶颈: 1、网络是个较大的开销。 2、不同KEY的数据可能是...

全文检索 不包含 优化 - 阿里云RDS PostgreSQL最佳实践

5 minute read

背景 PostgreSQL内置了GIN索引,支持全文检索,支持数组检索等多值数据类型的检索。 在全文检索中,不包含某个关键字能用到索引吗? 实际上GIN是倒排索引,不包含某个关键字的查询,实际上是跳过主tree上面的TOKEN的扫描。 只要被跳过的TOKEN包含了大量数据,那么就是划算的。PostgreSQ...

Greenplum 性能评估公式 - 阿里云HybridDB for PostgreSQL最佳实践

3 minute read

背景 通常评估一个数据库的性能,可以选择工业标准测试,或者根据业务模型,建模进行测试。 例如PostgreSQL pgbench支持的tpc-b测试,以及自定义模型测试。 benchmarksql支持的tpc-c测试。 gp_tpch支持的tpc-h测试等等。 参考文档如下 《TPC-H测试 - Pos...

阿里云RDS金融数据库(三节点版) - 案例篇

less than 1 minute read

背景 土豆哪里去挖? 土豆郊区去挖。 一挖一麻袋? 一挖一麻袋。 挖掘机不仅是城市建设的必备法宝,居然也是挖土豆利器。 但是科技行业一定不喜欢挖掘机,经常会听说xx互联网软件故障提到“光纤被挖断”,导致XX机房故障几数时。 这和数据库有什么关系呢?当然有,一些企业在业务层面可能做到了多机房,多活的...

时间、空间、对象多维属性 海量数据任意多维 高效检索 - 阿里云RDS PostgreSQL最佳实践

14 minute read

背景 人类或者其他对象的活动产生了海量的时间、空间数据,如果有科技能实现回到过去,过去的世界状态会是什么样的? 实际上这个需求在数据库中也存在。 对象数据分类 一类为静止数据(相对静止,比如建筑物),一类为动态数据(比如人类活动,物联网传感器的活动)。 搜索需求分类 1、时空快照数据搜索 我们可以这样...

车联网案例,轨迹清洗 - 阿里云RDS PostgreSQL最佳实践 - 窗口函数

3 minute read

背景 车联网中一个非常典型的场景是采集车辆的行驶轨迹,通常来说车辆的轨迹并不会实时上报,可能会堆积若干条轨迹记录,或者间隔多少时间上报一次。 一个典型的数据结构如下 (car_id, pos geometry, crt_time timestamp) 车辆在行驶,行驶过程中会遇到堵车,红绿灯,那么上报...

分区索引的应用和实践 - 阿里云RDS PostgreSQL最佳实践

1 minute read

背景 当表很大时,大家可能会想到分区表的概念,例如用户表,按用户ID哈希或者范围分区,拆成很多表。 又比如行为数据表,可以按时间分区,拆成很多表。 拆表的好处: 1、可以将表放到不同的表空间,表空间和块设备挂钩,例如历史数据访问量低,数据量大,可以放到机械盘所在的表空间。而活跃数据则可以放到SSD对应的表空...

云端海量任务调度数据库最佳实践 - 阿里云RDS PostgreSQL案例

3 minute read

背景 任务调度系统中的任务状态管理,通常会用到数据库来存储任务调度的过程状态,控制任务的锁等。 《advisory lock 实现高并发非堵塞式 业务锁》 如果是小量任务,是挺好实现的,但是每小时处理几十亿或者几亿的任务,如何设计这样的任务状态管理数据库呢? 挑战 对于一个面向多个用户的任务调度平台(例如云...

advisory lock 实现高并发非堵塞式 业务锁

5 minute read

背景 某些业务会利用数据库来作为一种可靠的锁,例如任务调度系统,或者其他需要可靠的锁机制的系统。 通常他们可能会使用数据库的一条记录来实现锁的SLOT和状态信息。 例如 create table lock_test ( tid int primary key, -- 任务ID state...

SRID (空间引用识别号, 坐标系)

1 minute read

背景 转自互联网 http://www.baike.com/wiki/srid http://www.cnblogs.com/jackdong/archive/2010/12/20/1911558.html https://en.wikipedia.org/wiki/Geographic_coordinat...

人分九等,数有阶梯 - PostgreSQL 阶品(颗粒)分析函数width_bucket, kmean应用

9 minute read

背景 从古至今,现实社会中,到处充满了等级划分,例如东汉史学家、文学家班固《汉书》《古今人表》把人分九等。九品量表”之中,分为上(上智).中(中人).下(下愚)三等。在每个等级中又分为:上上.上中.上下,中上.中中.中下,以及下上.下中和下下三等。 现代的一些见解: 第一等:圣人。已参破红尘却仍然悲天悯人,已...

TPC-H测试 - PostgreSQL 10 vs Deepgreen(Greenplum)

4 minute read

背景 通常一家企业除了有在线业务处理的数据库、也会有数据分析型的数据库。 很长一段时间以来,数据库产品也是分场景设计的,例如MySQL就是非常典型的TP型数据库。Greenplum则是非常典型的AP型数据库。 Oracle介于两者之间,具备典型TP型数据库的能力,同时还具备小型的数据分析的能力(例如通过并行查...

Oracle业务适合用PostgreSQL去O的一些评判标准

5 minute read

背景 从功能、性能、SQL兼容性几个方面,输出一些Oracle业务适合用PostgreSQL替代的一些指标。 功能指标 如果业务中用到了这些特性,则非常适合使用PostgreSQL。 1、业务使用的数据类型中出现 IP地址、GIS、数组、范围、全文检索、大对象、字节流、比特流、枚举、几何、自定义复合、UUI...

阿里云RDS金融数据库(三节点版) - 性能篇

8 minute read

背景 终于到了性能篇,三节点同时满足了企业对数据库的可用性、可靠性的要求,那么性能如何呢? 提到性能测试,我有几点一定要说明一下,很多朋友对性能的理解可能有偏差,那么如何评判性能的好坏呢? 1、首先要明确测试的环境,包括数据库主机(主要包括CPU、内存、网卡,如果你的数据库能用上FPGA、GPU的计算能力,还...

PostgreSQL unknown事务的处理方法

less than 1 minute read

背景 数据库的事务是原子操作,要么成功,要么失败。但是实际上在客户端的视角,可能有第三种状态:unknown状态。 当客户端提交事务结束(rollback , commit , prepare xact , rollback pxact , commit pxact)的请求后,数据库收到请求,数据库可能执行失败...

一张表有且只有一条记录(续) - 支持插入,并且更新、删除都只作用在最后一条记录上, 查询也只时间最大的记录。

3 minute read

背景 之前写过一篇文档,介绍如何控制某张表有且只有一条记录。 《如何实现一张表有且只有一条记录 implement PostgreSQL table have one and only one row》 接下来这个需求与之类似,一张表好像有且只有一条记录,要求这样: 1、支持插入、更新、删除、查询操作, ...

PostgreSQL 10 流式物理、逻辑主从 最佳实践

6 minute read

背景 流复制起源 PostgreSQL 自从2010年推出的9.0版本开始,支持流式物理复制,用户可以通过流式复制,构建只读备库(主备物理复制,块级别一致)。流式物理复制可以做到极低的延迟(通常在1毫秒以内)。 同步流复制 2011年推出的9.1版本,支持同步复制,当时只支持一个同步流复制备节点(例如配置了3个...

阿里云RDS金融数据库(三节点版) - 理论篇

2 minute read

背景 《阿里云RDS金融数据库(三节点版) - 背景篇》说明了为什么需要推出金融级数据库的三节点版本,以及三节点引入的一个世界难题 - 拜占庭将军问题。 Lamport 在论文 《The Part-Time Parliament》中提出了一种算法Paxos,并使用了大量的数学公式论证了通过Paxos算法解决拜占...

影响或控制PostgreSQL垃圾回收的参数或因素

3 minute read

背景 哪些参数或因素将影响或控制PostgreSQL的垃圾回收呢? 参数 全局参数 1、控制VACUUM命令的睡眠时间,当vacuum的阶段性COST大于vacuum_cost_limit时,睡眠一段时间后继续。 vacuum_cost_delay = 0 # 0-100...

阿里云RDS金融数据库(三节点版) - 背景篇

less than 1 minute read

背景 提到金融级数据库,大家可能不约而同的会想到Oracle,DB2等商业数据库。但是随着开源数据库的发展,开源数据库正在逐渐成为数据库产业的核心,比如MySQL、PostgreSQL数据库 ,已经深入阿里、平安科技、苏宁、高德、国家电网(还有很多)的核心。可以看到,不管是MySQL还是PostgreSQL,有越...

[转载]Raft 为什么是更易理解的分布式一致性算法

1 minute read

背景 原文地址 http://www.cnblogs.com/mindwind/p/5231986.html 原文写得很赞,很好理解,不过有一些细节(例如幂等,例如和数据库结合可能需要考虑的点)我做了一些简单补充。 正文 一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前。 拜占...

大规模数据存储集群数据存放的设计,分布式shardid的生成 - 如何指定范围随机数, 分组随机数

2 minute read

背景 在一些分布式数据库系统中,通常会有多个数据节点,用户的数据分布策略通常有一致性哈希、按列哈希、随机分布等。 除了随机分布,其他的分布方法数据和数据节点是一对一的关系。 上当节点数变得特别特别多的时候,数据如果依旧按照全局进行哈希分布,可能会带来一个问题,例如节点数到达1万个,一张1亿的表,会分布到1万个...

从人类河流文明 洞察 数据流动的重要性

less than 1 minute read

背景 人类社会文明源起于河流文化,人类社会发展积淀河流文化,河流文化生命推动社会发展。 河流文化作为一种人类的文化、文明类型,被人们认知已经经历了很长的历史时期,人们把其称为“大河文明”,尼罗河、幼发拉底河、和底格里斯河流域的两河文明、印度河文明、黄河文明。 这些大河文明与人类文明息息相关,是人类文明的源泉...

PostgreSQL 金融类账务流水数据快照分析 案例分享

3 minute read

背景 在金融行业中,或者一些含有支付业务,往来对账业务,虚拟货币业务等业务的场景中,账户系统的变更流水是一份很大的数据。 为什么需要这份流水呢?直接保留账户的最终状态不就好了吗? 实际上流水数据就是日志数据,它记录了用户的每一笔账户变动,流水数据可以作为审计数据,也可以用于数据分析,还可用于数据的追溯(例如交...

PostgreSQL 海量时序数据(任意滑动窗口实时统计分析) - 传感器、人群、物体等对象跟踪

6 minute read

背景 在现实生活中,经常会有聚集分析的需求。 例如: 某个商场,每个时间点,商场的每个商铺位置的人群驻留数量。(有技术手段可以感知人的驻留位置,当走进某个区域时,将写入一条记录,表示你进入了这个区域,离开时记录一条离开的记录,如果长时间不动,则定时写心跳记录)。 某个网游,每个时间点,在线人数。(上线时写一...

PostgreSQL 10 GIN索引 锁优化

17 minute read

背景 PostgreSQL gin索引接口常被用于多值列的检索,例如全文检索类型、数组类型。 有兴趣了解更多索引接口的原理和使用场景,可以参考下文。 《PostgreSQL 9种索引的原理和应用场景》 今天要说道一下PostgreSQL GIN索引的代码优化。 在说GIN代码优化前,我们先来看一个场景,以...

100TB级, 日增量1TB(100亿)的OLTP OLAP混合场景数据库设计方向

10 minute read

背景 总量100TB,日增量1TB(日增约100亿记录)左右。这样的体量应该可以覆盖目前绝大多数企业的数据库体量。 提到100TB级别,OLTP和OLAP的混合场景,大家可能会想到Oracle的一体机extradata,没错Oracle在这方面做得确实是非常棒的,但是价格也是很漂亮的。 Oracle主要通过几...

PostgreSQL FDW 伪列实现 时序数据存储自动分区 - FUNCTION pushdown

1 minute read

背景 金融、气象、物联网、互联网等行业,有特别多的时序数据,例如股票的交易数据,气象传感器的采集数据,车联网的轨迹数据,互联网的FEED数据,都具有非常强的时序属性。 时序数据如何有效的存储、方便的使用呢? 例如这样的写入 create table xx (xxx) ts interval day; ...

PostgreSQL 连接攻击(类似DDoS)

less than 1 minute read

背景 客户端请求连接数据库后,会提示客户端输入用户密码,如果客户端不输入密码,那么数据库服务端会在一个超时时间后,断开连接。 也就是说,在服务端主动断开连接前,这个连接实际上需要占用一个SLOT,也就是max_connection中的一个。 https://www.postgresql.org/docs/9....

PostgreSQLGPDB 毫秒级海量时空数据透视 典型案例分享

4 minute read

背景 随着移动终端的普及,现在有越来越多的业务数据会包含空间数据,例如手机用户的FEED信息、物联网、车联网、气象传感器的数据、动物的溯源数据,一系列跟踪数据。 这些数据具备这几个维度的属性: 1、空间 2、时间 3、业务属性,例如温度、湿度、消费额、油耗、等。 数据透视是企业BI、分析师、运营非常关心...

PostgreSQL 9种索引的原理和应用场景

19 minute read

背景 PostgreSQL 拥有众多开放特性,例如 1、开放的数据类型接口,使得PG支持超级丰富的数据类型,除了传统数据库支持的类型,还支持GIS,JSON,RANGE,IP,ISBN,图像特征值,化学,DNA等等扩展的类型,用户还可以根据实际业务扩展更多的类型。 2、开放的操作符接口,使得PG不仅仅支持常见...

PostgreSQLGPDB 毫秒级海量多维数据透视 案例分享

2 minute read

背景 典型的电商类数据透视业务,透视的语料可能会包含一些用户的标签数据:例如包含品牌的ID,销售区域的ID,品牌对应用户的ID,以及若干用户标签字段,时间字段等。 标签可能会按不同的维度进行归类,例如tag1 性别,tag2 年龄段, tag3 兴趣爱好, …。 业务方较多的需求可能是对自有品牌的用户进行透视...

使用PostgreSQL逻辑订阅实现multi-master

7 minute read

背景 很多业务要求多活,但是多活中最难搞定的实际上是数据库,大多数业务通过分流,例如将数据根据UID切分到不同的IDC,同一个UID的数据永远只会写到一个IDC中,然后通过数据复制技术,将对应的数据复制到其他的IDC。 这种形态的多活是比较安全的,即同一条记录不会被多个IDC执行DML。如果同一条记录涉及到多个...

PostGIS 坐标转换(SRID)的边界问题引发的专业知识 - ST_Transform

1 minute read

背景 某个用户在使用PostgreSQL ST_Transform转换坐标时,遇到一个边界问题(暂时不清楚是不是BUG,因为对SRID还不太了解),导致距离计算不准确。 菜鸟的舍余同学给出了专业的解答: 不是用不用26986的问题,可以先了解下26986坐标系是怎么定义的哈,为什么它计算负经度(西半球)时没问...

空间复合索引加速空间搜索

5 minute read

背景 随着移动互联网的普及,空间数据已经成为大多数企业数据的标配,例如出行、快递、等。 通常数据的查询会带位置距离搜索,同时还会伴随其他属性的过滤,其他属性的过滤:例如时间范围,区域ID的过滤,物流公司ID的过滤。 空间索引和BTREE索引在PostgreSQL中属于两种索引(PostgreSQL支持btre...

数据入库实时转换 - trigger , rule

2 minute read

背景 PostgreSQL是一个功能很强大的数据库,仅仅在数据类型、索引接口的支持方面,就远超各种开源和商业数据库。 有些用户从其他数据源迁移到PostgreSQL,或者有其他数据源来的数据,大多数是字符串、数字,到了PostgreSQL可以转换为更精准的描述(数据类型),提升性能或功能。 例如 1、经纬度...

数据库平滑switchover的要素 - 会话资源漂移

8 minute read

背景 数据库迁移、切换是很普遍的一个话题,但是大多数的方案,对用户来说都是有感知的,所以用户的体验并不好。 例如用户使用了绑定变量语句,主备角色切换后绑定变量语句没有了,会导致调用报错。 我们需要维护主库的硬件,那么可以在中间件层面,将主备数据库的角色进行平滑调换,维护好硬件,再平滑的调换回来。 数据库主备...

列存优化(shard,大小块,归整,块级索引,bitmap scan) - (大量数据实时读写)任意列搜索

2 minute read

背景 数据分析系统,决策系统的数据量通常非常庞大,属性(列)非常多,可能涉及到任意列的组合条件查询,筛选结果、聚合结果、多维分析等。 这种场景如何优化能满足实时的响应需求呢? PostgreSQL中有一些技术,可以满足此类场景。 1. 内置bitmapAnd bitmapOr,使用任意字段的索引搜索时,可以...

优化器里的概率学 - 性能抖动原理分析

1 minute read

背景 数据库的优化器大量的使用了概率学的知识,例如高频词的频率,数据分布柱状图,评估某个VALUE有多少行,评估物理存储与列的线性相关性等等。 PostgreSQL 里面的统计学知识: 《用PostgreSQL了解一些统计学术语以及计算方法和表示方法 - 1》 《PostgreSQL数据库监控中的统计学 -...

从一维编排到多维编排,从平面存储到3D存储 - 数据存储优化之路

4 minute read

背景 中华文化源远流长,比如这句古语“远水不救近火,远亲不如近邻”,在数据库的优化中亦有体现。接下来我们来揭示这个道理。 大多数数据库的存储为块存储,一个块里面可能涉及到多条记录,当用户输入查询条件进行数据检索时,即使返回的结果集较小,也可能需要扫描多个数据块,因为你不知道你要的记录落在哪些数据块里面。 例子...

索引扫描优化之 - GIN数据重组优化(按元素聚合) 想象在玩多阶魔方

less than 1 minute read

背景 前一篇文章介绍了一个场景,利用多列索引,多种索引接口(GIN\BTREE\BRIN…)以及PostgreSQL内置的bitmapAnd, bitmapOr等手段,提升广告营销实时搜索性能,同时兼顾开发工作量。 《懒人推动社会进步 - 多列聚合, gin与数据分布(选择性)》 其中在讲到GIN索引的优化时...

懒人推动社会进步 - 多列聚合, gin与数据分布(选择性)

6 minute read

背景 在广告行业,精准营销是一个较热的话题,之前写过一个案例,如何使用PostgreSQL的array类型和GIN索引实时圈人的场景。 《万亿级营销(圈人)迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计》 使用以上方法,程序需要作出一些调整(当然,如果用户原本就是PostgreSQL技术栈,...

数据保留时间窗口的使用

less than 1 minute read

背景 类似mongodb的rotate collate(设置表的上限容量、上限记录数,持续写入,自动覆盖最老的记录),PostgreSQL通过pipelinedb也能实现类似的功能。 此类功能非常适合日志数据,无需维护成本,持续写入,自动覆盖最老的记录。 pipelinedb计划会在2017-07月份转换为p...

PG多节点(quorum based), 0丢失 HA(failover,switchover)方案

2 minute read

背景 PostgreSQL 10加入了quorum based的同步复制功能,用户可以配置若干standby节点,并配置需要将WAL发送多少份才返回给客户端事务结束的消息。 ANY num_sync ( standby_name [, ...] ) 原理详见 https://www.postgre...

PostgreSQL 并行写入堆表,如何保证时序线性存储 - BRIN索引优化

5 minute read

背景 BRIN索引的原理很简单,每个数据块(或者每一段连续的数据块)记录了其中的元数据(最大值,最小值,平均值,COUNT,AVG,NULL值个数等),当每个数据块存储的数据范围错开(边界清晰)时,块级索引的效率就非常高。 例如测试表 create table test(id int, info text);...

为什么PostgreSQL是最先进的开源数据库

2 minute read

背景 打开PostgreSQL网站,你会看到这样的flag。 The world’s most advanced open source database. 那么它从何而来呢? 从个人对数据库的角度,在几个方面来分析一下 一、功能方面 1 数据处理能力 - 高级SQL特性 1、窗口查询 2、聚合...

多字段,任意组合条件查询(无需建模) - 毫秒级实时圈人 最佳实践

5 minute read

背景 你也许在一家ToB的数据分析公司,你可能设计了一张表(包括用户标识,及若干已经统计好的的属性值),你也许收集了一些用户的数据,你也许要为客户提供报表,你也许需要为客户提供任意属性值的组合查询,并快速的返回结果给用户。 这些需求应该是非常常见的ToB的数据平台公司的形态,头痛的问题无法建模,因为B端的需求无...

块级(ctid)扫描在IoT(物联网)极限写和消费读并存场景的应用

3 minute read

背景 在物联网有一个非常普遍的数据需求,就是数据的写入,另一个普遍的需求则是数据的消费(按时序读取),以及流式计算。 关于流式计算,请参考 《(流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)\金融,时序处理最佳实践》 《流计算风云再起 - PostgreSQL携PipelineDB力挺Io...

PostgreSQL UDF实现IF NOT EXISTS语法

1 minute read

背景 当对象存在时,不创建;当对象不存在时,创建。 在数据库中使用IF NOT EXISTS语法进行判断。 Syntax: CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table...

AI(OtterTune)引波澜 - AI会洗牌数据库行业吗? DBA如何转变思想

1 minute read

背景 最近AI的新闻特别多,席卷了围棋圈之后,成为了技术圈和媒体热捧的话题。 今天又一个产品借AI上头条了 - OtterTune ,一个数据库参数调优的产品,借助机器学习的技术,生成最优的数据库参数。 下面是这个产品的论文 《Automatic Database Management System Tun...

JSONB 压缩版本 ZSON

less than 1 minute read

背景 json, jsonb是PostgreSQL里面的一种schemaless数据类型,zson是兼容json,jsonb的一种压缩类型,通过训练的方式生成字典,通过字典进行压缩。 通常获得的压缩比比较客观,压缩后可以节约存储空间,节约SHARED BUFFER,提高TPS。 安装 git clone h...

采用 部分索引、表达式索引 提高搜索效率

9 minute read

背景 在现实场景中,经常有搜索的需求,例如搜索附近的店铺,搜索通常会有一些搜索的附带条件,例如搜索附近的美食类店铺,加油站等。 这里实际上涉及两类搜索需求,一类是距离,一类是属性。 如果将属性枚举掉,那么搜索时可以变成只按距离搜索。建立空间索引即可。 而如果属性无法枚举,那么需要同时搜索空间和属性,可以建立...

PostgreSQL Oracle 兼容性 之 - 数据采样与脱敏

4 minute read

背景 数据采样、脱敏是测试时常用的功能,例如使用线上业务建立测试数据库,不能把整个库脱下来,同时需要对敏感数据加密。 Oracle的例子 ``` SELECT COUNT(innerQuery.C1) FROM ( SELECT ? AS C1 FROM RM_SALE_APPORTION SAMPL...

PostgreSQL 数据去重方法大全

11 minute read

背景 去重的需求比较常见,去重也可以衍生出很多变种。例如 1. 单列去重,很好理解,就是按某列去除重复记录。保留规则(例如保留最新的,保留最旧的,或者保留某个其他字段最大的)。 2. 多列去重,按多列,去除重复记录。保留规则(例如保留最新的,保留最旧的,或者保留某个其他字段最大的)。 3. 行去重,按行,去...

PostgreSQL 的表传输功能

less than 1 minute read

背景 表传输的功能很有意思,比如一些企业会有中心数据库,边缘数据库。边缘数据库的数据需要周期性的导入到中心库进行汇总,例如每个工厂的日流水数据,每天导入到总部的中心数据库。 从边缘库导入到中心库,大家可能会想到使用ETL工具,或者是数据订阅(同步)的方式,但是大家有没有想过,这些方式都需要数据重新来一遍inse...

PostgreSQL、Greenplum 《如来神掌》 - 目录 - 珍藏级

19 minute read

背景 「剑魔独孤求败,纵横江湖三十馀载,杀尽仇寇,败尽英雄,天下更无抗手,无可柰何,惟隐居深谷,以雕为友。呜呼,生平求一敌手而不可得,诚寂寥难堪也。」 剑冢中,埋的是剑魔独孤求败毕生几个阶段中用过的几柄剑: 利剑无意;第一柄是青光闪闪的利剑,凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋。 软剑无常;第二...

PostgreSQL DBA cookbook - 目录

2 minute read

背景 一、概念 1. 物理架构 数据库进程结构介绍 数据库物理存储结构介绍 2. 逻辑架构 数据库逻辑层面的概念介绍,层次关系介绍。 3. 权限体系 介绍数据库的权限体系,以及如何赋予和释放权限。 二、安装 1. Linux 最佳部署 DBA不可不知的操作系统内核参数 2. 初始化数据库 ...

数据库的未来 - HTAP,软件、硬件、云生态的融合

2 minute read

背景 数据库经过了几十年的发展,未来的路怎么走?从硬件、软件技术的发展,结合业务的需求出发我们可以从中看出一些端倪。 一、数据类型多样化 随着技术的普及,越来越多以前需要很高的成本才能获取的数据,现在触手可及。 1. 点云(点的位置坐标+RGB+其他属性),以前只有军用领域在使用,比如《普罗米修斯》这部电影,...

17种文本相似算法与GIN索引 - pg_similarity

2 minute read

背景 文本相似算法,结合PostgreSQL的开放索引框架GIN,可以实现各种相似算法的文本高效检索。 PostgreSQL中常见的文本相似搜索插件:rum, pg_trgm, fuzzymatch, pg_similarity, smlar。 其中pg_similarity支持的算法达到了17种。 Int...

无人驾驶背后的技术 - PostGIS点云(pointcloud)应用 - 2

less than 1 minute read

背景 无人驾驶、配送机器人的业务背景,方案设计请参考: 《无人驾驶背后的技术 - PostGIS点云(pointcloud)应用》 本文针对以上文章,补充一些新鲜内容。 一、transfer table消除索引build、格式检查等无用功 在服务端存储了所有的pointcloud数据,而终端(如无人车)仅仅...

行为、审计日志 (实时索引/实时搜索)建模 - 最佳实践 2

12 minute read

背景 在很多系统中会记录用户的行为日志,行为日志包括浏览行为、社交行为、操作行为等。 典型的应用例如:数据库的SQL审计、企业内部的堡垒机(行为审计)等。 前面写了一篇最佳实践,通过PostgreSQL来存储审计日志,同时对审计日志需要检索的字段建立全文索引。 SSD机器可以达到7万/s的写入(换算成全文索...

PostgreSQL 锁等待监控 珍藏级SQL - 谁堵塞了谁

12 minute read

背景 在数据库中,通过锁以及多版本并发控制可以保护数据的一致性,例如A正在查询数据,B就无法对A访问的对象执行DDL。A正在更新某条记录,B就不能删除或更新这条记录。 锁是数据库自动管理的,同时数据库还提供了AD LOCK或者LOCK语法,允许用户自己控制锁。 例如AD lock的应用可以参考如下: 《Po...

无人驾驶背后的技术 - PostGIS点云(pointcloud)应用 - 1

9 minute read

背景 科幻电影的场景随着技术的发展,正在一步步的从荧幕变成现实。从军用到民用,比如汽车厂商、科技公司在尝试的无人驾驶,无人飞行器。 无人驾驶应用非常广泛,比如快递行业,时机成熟以后,将来可能快递员这个职业也会逐渐从社会上消失(解放快递员的双手和创造力,让更多的人参与到科技改变生活当中)。 不管是无人驾驶的汽车...

PostgrSQL 递归SQL的几个应用 - 极客与正常人的思维

3 minute read

背景 递归SQL的几个应用 递归查询,在几个场景的应用,有十全大补丸的功效。 一、求唯一值 场景 某张表,数据量在亿级别,求某稀疏列的唯一值。 create table sex (sex char(1), otherinfo text); create index idx_sex_1 on sex(...

(流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)金融,时序处理最佳实践

12 minute read

背景 越来越多的数据要求实时的分析、聚合、展示最新值、展示异常值、实时的搜索。 例如 金融数据、物联网传感器的数据、网络游戏的在线数据等等。 关于实时搜索,可以参考这篇最佳实践: 《行为、审计日志 实时索引/实时搜索 - 最佳实践》 关于海量数据的”写入、共享、存储、计算”,以及离线分析,则可以参考这...

行为、审计日志 (实时索引/实时搜索)建模 - 最佳实践 1

12 minute read

背景 在很多系统中会记录用户的行为日志,行为日志包括浏览行为、社交行为、操作行为等。 典型的应用例如:数据库的SQL审计、企业内部的堡垒机(行为审计)等。 行为、审计日志的量与业务量或者操作量有关,为了满足企业实时查询的需求,通常需要构建搜索引擎,比如使用ES或者使用PostgreSQL的全文检索功能来实现。...

DNA遗传哲学? - 数据库里schema应该属于谁?

1 minute read

背景 混沌初开 安装好PostgreSQL软件后,需要调用initdb,或者pg_ctl初始化数据库实例,初始化数据库实例时,通过bki接口(脚本),建立数据库元数据。 初始化后,数据库有了数据文件、日志文件、控制文件、CLOG、WAL等一系列数据库的文件。 同时会创建模板库template0, templ...

Greenplum 最佳实践 - 什么时候选择bitmap索引

3 minute read

背景 PostgreSQL 目前支持8种索引接口,包括B-Tree, hash, gin, gist, sp-gist, brin, rum, bloom。 Greenplum 目前支持B-Tree, GiST, bitmap三种索引接口。 用户可以根据不同的数据类型,不同的请求类型,使用不同的索引接口建立相...

PostgreSQL 异步IO (effective_io_concurrency) 实测

6 minute read

背景 异步IO的目的是充分发挥块设备的吞吐能力,让块设备处于更繁忙的工作状态(一次连续摄取更多的块),而不是等用户进程需要数据时再读取。 如果数据库并发连接(或者活跃会话)足够时,并且块设备处于繁忙状态,那么没有必要开启异步IO,因为开了也没什么用,块设备已经足够的忙了。 目前PostgreSQL的bitma...

PostgreSQL schemaless 的实现(类mongodb collection)

1 minute read

背景 使用mongodb时,并不需要先建表(collection),直接就可以往里面写,原因是collection本事就是固定的BSON结构。 所以当用户插入时,如果表不存在,建一个BSON结构的colleciton即可。 而关系数据库无法做到这一点,因为关系数据库的表结构都是事先构建,并且在写入数据时,是需...

海量数据 写入、共享、存储、计算 最佳实践

1 minute read

背景 数据是为业务服务的,业务方为了更加透彻的掌握业务本身或者使用该业务的群体,往往会收集,或者让应用埋点,收集更多的日志。 随着用户量、用户活跃度的增长,时间的积累等,数据产生的速度越来越快,数据堆积的量越来越大,数据的维度越来越多,数据类型越来越多,数据孤岛也越来越多。 日积月累,给企业IT带来诸多负担,...

PostgreSQL 10 解读

5 minute read

背景 本文参考当前的release notes以及git, committe fest编写,10还没有正式release,部分内容在正式release时可能会修改,同时会新增新的内容。 PG 10 最主要特性概述 1、支持表级逻辑订阅。多个表可以并行订阅提升订阅的整体吞吐能力。 2、支持表分区。 3、多核并...

数据库优化器原理(含动态规划、机器学习建模优化器aqo) - 如何治疗选择综合症

8 minute read

背景 RBO -> CBO -> 动态优化 经常听到这样的声音:“查询慢?加个索引吧。”,虽然话不专业,但是体现了早期基于RBO(基于规则)的优化器思维。 通常对业务不熟悉,或者对数据库不熟悉时,可能会凭自觉做出这样的判断。 RBO思维存在较大的问题,所以导致了CBO(基于成本)的出现。 再往后...

Greenplum 跨库数据JOIN需求 - dblink的使用和弊端以及解决方案

9 minute read

背景 Greenplum在许多企业中被用于数据仓库,一个企业中通常会有统一的用户管理系统,账务系统;还有许多业务线。 数据被分成两类,一类是业务相关的,一类是全公司统一的数据。 如果用户将两个部分数据分别存入不同的数据库(单个实例可以创建多个数据库),并且公共数据需要与业务数据JOIN时,你可能会想到dbli...

异步流复制模式如何保证不丢数据?

1 minute read

背景 PostgreSQL支持多种事务commit模式,以一主多备的同步流复制为例,事务的REDO信息持久化是怎样的呢? 配置synchronous_commit参数如下,以及对应的含义: local:表示REDO本地持久化。 on:表示本地持久化,以及一个备库持久化。 remote_write:表示本地...

从redo日志分析数据库的profile

1 minute read

背景 在PostgreSQL中查看TOP SQL是比较方便的,如下: 《PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)》 而从另一个角度,比如REDO文件,我们也能分析出每个时间段数据库的操作类型,分析数据库资源消耗,以及提出优化建议。 redo日志长什么样 pg_xlogdum...

PostgreSQL全角、半角互相转换

1 minute read

背景 转载原文 http://blog.qdac.cc/?p=1289 我们知道,客户许多时候录入数据时,并不注意输入法是否是全角模式,然后就造成输入的内容,有的是全角有的是半角,造成我们做分析统计时的不便,为此,编写相应的函数。当然这个过程应尽量在前台完成,但如果针对已经存在的数据,下面提供的两个函数就比较方...

如何优雅的修改被视图引用的表字段

2 minute read

背景 在修改数据库表字段的长度时,数据库提供了alter table的语法进行修改。 但是被修改的字段如果有其他引用(例如视图)时,必须先将引用的对象删除,再修改对应的字段。 例子如下 测试表 postgres=# create table test_t (id int, info text, crt_...

阿里云RDS for PostgreSQL varbitx插件与实时画像应用场景介绍

3 minute read

背景 PostgreSQL 内置的varbit, bit类型的操作函数比较简单,阿里云RDS for PostgreSQL对其进行了扩展。 支持更多的bit操作,可以覆盖更广的应用场景,例如实时用户画像推荐系统、门禁广告系统、购票系统等。 阿里云 varbitx 插件介绍 增加的函数接口如下 1. bit_...

PostgreSQL 模糊查询最佳实践 - (含单字、双字、多字模糊查询方法)

11 minute read

背景 前模糊(有前缀的模糊),后模糊(有后缀的模糊),前后模糊(无前后缀的模糊),正则匹配都属于文本搜索领域常见的需求。 PostgreSQL拥有很强的文本搜索能力,除了支持全文检索,还支持模糊查询、正则查询。内置的pg_trgm插件是一般数据库没有的,可能很多人没有听说过。同时还内置了表达式索引、GIN索引的...

PostgreSQL 中生成随机汉字

1 minute read

背景 汉字unicode编码范围 php中utf-8编码下用正则表达式匹配汉字的最终正确表达式 —— /[\x{4e00}-\x{9fa5}]/u \u4e00-\u9fa5 (中文) \x3130-\x318F (韩文) \xAC00-\xD7A3 (韩文) \u0800-\u4e00...

PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL) (包含SQL优化内容) - 珍藏级

11 minute read

背景 数据库是较大型的应用,对于繁忙的数据库,需要消耗大量的内存、CPU、IO、网络资源。 SQL优化是数据库优化的手段之一,优化什么SQL效果最佳呢?首先要了解最耗费资源的SQL,即TOP SQL。 从哪里可以了解数据库的资源都被哪些SQL消耗掉了呢? 资源分为多个维度,CPU,内存,IO等。如何能了解各...

PostgreSQL 如何实现批量更新、删除、插入

3 minute read

背景 如何一次插入多条记录? 如何一次更新多条记录? 如何一次批量删除多条记录? 批量操作可以减少数据库与应用程序的交互次数,提高数据处理的吞吐量。 批量插入 批量插入1 使用insert into … select的方法 postgres=# insert into tbl1 (id, info ,...

PostgreSQL upsert功能(insert on conflict do)的用法

6 minute read

背景 PostgreSQL 9.5 引入了一项新功能,UPSERT(insert on conflict do),当插入遇到约束错误时,直接返回,或者改为执行UPDATE。 语法如下 Command: INSERT Description: create new rows in a table ...

如何按拼音排序 - 数据库本土化特性(collate, ctype, …)

4 minute read

背景 数据库为了支持国际化,通常会涉及到collate, ctype的概念。 初始化数据库集群时,可以设置如下参数,用于设置数据库的字符串排序、字符归类方法、数值\日期\时间\货币的格式等。 LC_COLLATE String sort order ...

如何在PostgreSQL中调试plpgsql存储过程(pldebugger, pldbgapi)

3 minute read

背景 PostgreSQL支持多种存储过程语言,例如plpgsql, C, plpython, plperl, pltcl, pljava, 等等。 用户可以使用这些存储过程语言,创建对应的函数或存储过程(returns void)。 那么如何调试PostgreSQL的存储过程呢?社区提供了一个插件pldeb...

如何设置数据库的LC_COLLATE, LC_CTYPE, ENCODING, TEMPLATE

4 minute read

背景 PostgreSQL实例支持创建多个数据库,创建数据库时,可以指定模板库,并为每个数据库设置不同的字符集、本地化collate, 货币等属性。 接下来举例讲述CREATE DATABASE的具体使用方法。 一、CREATE DATABASE语法 Command: CREATE DATABASE ...

geohash vs PostGIS

3 minute read

背景 业界有几种地理位置的表示方法。 通常我们使用经纬度表示地球上的位置,PostgreSQL的PostGIS可以很好的描述这种类型,包括海拔在内。使用最为广泛,精度、功能最高的应该是PostGIS。 但是并不是所有的数据库都有这样的技术(或者实现难度的问题导致了很多数据库在初期会选择较为简单的geohash...

PostgreSQL 10.0 preview 功能增强 - 串行隔离级别 预加锁阈值可控

1 minute read

背景 PostgreSQL 串行隔离级别中一个重要的概念是预加锁,在事务结束时,检测预加锁是否冲突。 10.0增加了三个控制参数,可以控制预加锁的上限。避免内存过度使用。 1. 控制每个事务的对象预加锁数量。 max_pred_locks_per_transaction (integer) The sha...

PostgreSQL 10.0 preview 功能增强 - 更强可靠性, 过去式事务状态可查(杜绝unknown事务)

1 minute read

背景 在一些极端情况下,例如当客户端发出事务提交SQL后,客户端收到数据库返回的提交状态前,如果客户端崩溃或数据库异常,导致客户端不知道事务的最终状态到底是提交成功还是失败的。 那么怎么解决这个问题呢? 1. 一种方法是走2PC协议,先使用预提交,然后在发出commit 之前的预提交。(因为只要预提交成功,就...

PostgreSQL 10.0 preview 功能增强 - WAL一致性校验

1 minute read

背景 10.0 新增了一个DEBUG参数,用于检测recovery过程中,由于wal replay BUG或者备库的物理数据块异常导致的wal replay回放出来的块不正确的问题。 当产生脏页时,在wal记录中,可能有两种信息: 1. 只记录了数据变更的部分。 2. FULL PAGE,记录了整个数据块。...

PostgreSQL 10.0 preview 功能增强 - 增加access method CHECK接口amcheck

2 minute read

背景 一些高端存储、包括ZFS文件系统,在使用了RAID后,有块检测和异常块的修复功能。 对于数据库来说,数据的可靠性是非常重要的指标,例如: 1. 写进入是什么,读出来就应该是什么。 2. 当操作系统的collate发生变化时,索引的顺序可能与实际的collate顺序不匹配。造成不稳定现象。 3. 数据...

PostgreSQL 10.0 preview 功能增强 - libpq支持多主机连接(failover,LB)让数据库HA和应用配合更紧密

4 minute read

背景 数据库一主多备,这个词在互联网应该不陌生。但是主备切换和应用程序如何配合才能天衣无缝呢?你可能会有这样的疑问。 1. 什么类型的QUERY发给主库,什么类型的QUERY发给备库? 2. 主库和备库发生了角色切换之后,客户端连接如何配合? 业界有一些做法可以回答这两个问题。 1. 通常使用集群软件,使...

PostgreSQL 物流轨迹系统数据库需求分析与设计 - 包裹侠实时跟踪与召回

10 minute read

背景 物流行业对地理位置信息数据的处理有非常强烈的需求,例如 1. 实时跟踪快递员、货车的位置信息。对数据库的写入性能要求较高。 2. 对于当日件,需要按发货位置,实时召回附近的快递员。 3. 实时的位置信息非常庞大,为了数据分析的需求,需要保留数据,所以需要廉价的存储。例如对象存储。同时还需要和数据库或分...

PostgreSQL 时序最佳实践 - 证券交易系统数据库设计 - 阿里云RDS PostgreSQL最佳实践

25 minute read

背景 证券行业产生的数据比较多,读写非常频繁。 以股票交易为例,一共有几千只股票。一年大概有240个交易日,交易日大概是从早上10点到下午4点。 1、数据写入需求: 实时的数据写入,按查询维度的实时数据合并(比如秒数据实时写入。分钟,几分钟,。。。则实时合并)。 数据分为不同粒度的分时数据。(精确到秒...

奔跑吧,大屏 - 时间+空间 实时四维数据透视

9 minute read

背景 随着物联网的发展,数据的产生越来越快。比如马路的汽车通过数据,用户的驻留数据,水纹传感器的数据,电商的FEED数据,网约车的轨迹数据 等等。 这么多的数据,用途也不一样,有需要流式实时统计的,也有时序处理相关需求的,还有全量分析需求的。 这些都有对应的解决方案。 《流计算风云再起 - Postgr...

PostgreSQL 逻辑订阅 - 给业务架构带来了什么希望?

2 minute read

背景 逻辑订阅是PostgreSQL 10.0的新特性。 具体的原理,使用方法可以参考如下文章。 《PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践》 《PostgreSQL 10.0 preview 逻辑订阅 - pg_hba.conf变化,不再使用replication条目》...

快速入门PostgreSQL应用开发与管理 - 8 PostgreSQL 管理

28 minute read

背景 本章大纲 一、权限体系 1 逻辑结构 2 权限体系 3 schema使用 , 特别注意 4 用户 5 public 6 如何查看和解读一个对象的当前权限状态 二、索引介绍 1 索引有什么用? 2 索引的类型 3 索引合并扫描 4 表膨胀检查 5 检查膨胀 6 索引维护 三、系统配置 1 存储、文件系统规划 ...

快速入门PostgreSQL应用开发与管理 - 6 事务和锁

27 minute read

背景 本章大纲 一、什么是事务 二、单用户情况下的事务 三、多用户情况下的事务 1 PostgreSQL如何处理事务隔离? 2 多用户情况下的事务并发处理 四、锁 五、数据恢复粒度 六、数据年龄 七、事务冻结 八、垃圾回收 九、flash back query 第四章:事务和锁 https://www.post...

快速入门PostgreSQL应用开发与管理 - 5 数据定义

24 minute read

背景 本章大纲 1. 数据类型 2. 数据操作 3. 表管理 4. 视图 5. 约束 6. RLS(行安全策略) 第三章:数据定义 1. 数据类型 https://www.postgresql.org/docs/9.6/static/datatype.html 1、数值 Na...

快速入门PostgreSQL应用开发与管理 - 4 高级SQL用法

33 minute read

背景 本章大纲 1. 聚集函数 常用聚合函数 统计类的聚合函数 分组排序聚合 Hypothetical-Set聚合函数 多维分析 2. 子查询 3. union\union all\except\intersect 4. 自连接 5. 内连接 优化器如何强制连接顺序? 6. 外连接 左外连接 右外连接 全外连接 ...

快速入门PostgreSQL应用开发与管理 - 3 访问数据

20 minute read

背景 在线SQL平台 http://www.sqlfiddle.com/ 本章大纲 1. 使用PSQL 2. 使用Select语句 3. 使用游标 4. 行表达式 5. with和递归查询 6. 执行DML\DDL\DCL 7. 选择行 8. 使用序列 9. 使用默认值 10. 生成数据 11. 检查空值(N...

快速入门PostgreSQL应用开发与管理 - 2 Linux基本操作

3 minute read

背景 玩转PostgreSQL前,首先要了解的最最基本的Linux操作。 本章大纲 1. 如何访问命令行 2. 使用命令行下的工具 非编辑模式 进入编辑模式 3. 正则表达式、管道和I/O 重定向 4. 管理用户账户 5. 文件访问控制 6. 管理进程 1, 如何访问命令行 1.1 本地命令行的访问 在图形...

PostgreSQL物理备库的哪些操作或配置,可能影响主库的性能、垃圾回收、IO波动

2 minute read

背景 PostgreSQL 物理备库的哪些配置,或者哪些操作,可能影响到主库呢? 首先,简单介绍一下PostgreSQL的物理备库,物理备库就是基于PostgreSQL WAL流式复制,实时恢复的备库。物理备库在物理层面与主库完全一致,每一个数据块都一样。物理备库允许在实时恢复的同时,对外提供只读的功能。 问...

为什么啤酒和纸尿裤最搭 - 用HybridDB/PostgreSQL查询商品营销最佳组合

4 minute read

背景 购买早餐时,包子和豆浆、茶叶蛋是最佳搭档吗? 为什么纸尿裤和啤酒是最佳搭档? 这些问题在积累了一定的订单数据后,是可以挖掘出来的。这个问题实际上是4.8号PostgreSQL社区杭州区活动上,一位社区的朋友提出来的,如何使用PostgreSQL找出最佳搭配的商品。 实际上有一个专业的推荐数据库,支持多...

推荐系统分析 - 推荐算法, RecDB推荐数据库介绍

6 minute read

背景 中华文化源远流长,从古至今有很多有趣的学问。比如看风水、看相,在西方文化中有类似的比如星座学说。 这些和推荐系统有什么关系呢? 个人感觉星座学说这些学问有一定的理论基础,更多的则是也是经验的总结。 推荐系统实际上和星座学说类似,有一定的算法基础,算法则可能是来自经验的总结。 在现实场景中,可以找到很...

时序数据库有哪些特点? TimescaleDB时序数据库介绍

3 minute read

背景 随着物联网的发展,时序数据库的需求越来越多,比如水文监控、工厂的设备监控、国家安全相关的数据监控、通讯监控、金融行业指标数据、传感器数据等。 在互联网行业中,也有着非常多的时序数据,例如用户访问网站的行为轨迹,应用程序产生的日志数据等等。 时序数据有几个特点 1. 基本上都是插入,没有更新的需求。 ...

微服务配置管理

less than 1 minute read

背景 微服务的介绍,请参考 https://martinfowler.com/articles/microservices.html 不管是微服务,或者其他软件架构,docker等。APP(微服务)配置的同步,变更,下发,都是需要面对的。 例如你可以用消息队列,但是这种方式比较重,同时在APP重启后,可...

Prometheus 监控平台

less than 1 minute read

背景 What is Prometheus? Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud. Since its inception in 2012, many...

多点最优路径规划 - (商旅问题,拼车,餐饮配送,包裹配送,包裹取件,回程单)

2 minute read

背景 小长假,带着一家人出去旅行,计划好了去几个地方,如何设计旅行线路是最优的?(里面还涉及到路费,路途时间等因素)。 又比如 拼车,餐饮配送,包裹取件、配送,都包含最佳路径计算的共性在里面。 PostgreSQL 在GIS领域有这非常丰富的用户和实际案例,路径规划方面,我之前写过一篇关于包裹配送的文章 ...

invalid SRID: xxxx not found in spatial_ref_sys

1 minute read

背景 GIS数据有一定的标准来表示它的数据, ``` The OpenGIS “Simple Features Specification for SQL” defines standard GIS object types, the functions required to manipulate them...

Greenplum 自定义复合类型 数组

2 minute read

背景 如果你现在要在Greenplum中创建一个复合类型,是不会自动给你创建对应的数组类型的。(而实际上PostgreSQL 在2007年已经支持了这个功能) Greenplum需要等到5.0,才能使用上它了。 https://github.com/greenplum-db/gpdb/commit/8954a...

PostgreSQL 10.0 preview 功能增强 - BRIN 索引更新smooth化

3 minute read

背景 我们将数据存入PostgreSQL时,如果创建的是堆表,那么数据是往数据文件的末尾不断追加存储的。 为了提高数据的检索速度,可以对响应的字段创建索引,在PostgreSQL中,已有8种索引类型,分别是B-Tree,hash, gin, gist, sp-gist, brin, bloom, rum。分别对...

PostgreSQL 转义、UNICODE、与SQL注入

11 minute read

背景 通过本文,你可以了解: 1. 如何在字符串中输入特殊字符,例如回车。 2. 如何在字符串中输入单引号。 3. 转义字符是什么?用法。 4. 在SQL标准中,反斜线是转义符吗?PostgreSQL如何使用反斜线转义?书写格式如何? 5. 为什么转义单引号存在SQL注入的风险?数据库有什么参数可以控制...

PostgreSQL 10.0 preview 功能增强 - 触发器函数内置中间表

1 minute read

背景 在触发器中,如果要提取触发该事件的记录,使用OLD和NEW关键字。 OLD.* , NEW.* 提取 对于for statement after触发器,触发的记录数可能是很多的,PostgreSQL 10.0增加了一个功能,中间表。 在触发器函数中,可以使用这个中间表,中间表的数据就是触发器涉及的数...

PostgreSQL 10.0 preview sharding增强 - 支持分布式事务

4 minute read

背景 作为一个完整的分布式数据库(sharding),没有分布式事务支持是不行的。 什么是分布式事务呢?比如我们把一个数据库比作一个小朋友,每个小朋友都有100块钱,然后A小朋友给了B小朋友20块钱,这样的话应该是A剩余80块,B剩余120块。如果在交易过程中B小朋友不小心把20块弄丢了,那么会怎么样呢? 理...

潘金莲改变了历史之 - PostgreSQL舆情事件分析应用

2 minute read

背景 潘金莲改变了历史吗? 网上的段子 潘金莲撑开窗户,撑窗户滴棍子掉下去了,于是西门庆看到了,于是他们相遇了。如果潘金莲同学当时没有开窗,那么她就不会遇到西门庆。 如果没有遇到西门庆,那么她就不会被迫出轨,那样武松哥哥就不会怒发冲冠为红颜,这样他就不会奔上梁山。 武松就不会奔上梁...

PostgreSQL 10.0 preview 功能增强 - 自由定义统计信息维度

1 minute read

背景 统计信息是数据库优化器用来计算SQL plan tree中每个NODE成本的依据,目前PostgreSQL的统计信息是开源数据库中最完备的。 包括继承表、以及全局的统计信息,每个字段的NULL值个数或百分比,平均字段宽度,唯一值个数或百分比,高频词,高频词的百分比,柱状图,线性相关性,数组字段的高频元素,...

PostgreSQL 10.0 preview 性能增强 - 推出JIT开发框架(朝着HTAP迈进)

2 minute read

背景 数据库发展了几十年,出现了很多产品,有面向OLTP(在线事务处理)的,有面向OLAP(在线分析)的。 虽然两个场景各有需求特色,但是企业需要为其需求买单,因为目前很少有产品可以同时满足在线处理和在线分析的需求。 比如一家企业,通常都有业务的波峰波谷,比如游戏业务,通常波谷可能是在凌晨,因为大多数人都睡了...

PostgreSQL 10.0 preview 功能增强 - 物理备库支持逻辑订阅,订阅支持物理主备HA漂移

1 minute read

背景 逻辑复制的本质是从WAL日志中,翻译出逻辑的数据(ROW),然后同步到下游节点。实际上是一个发布和订阅的流程。 那么有两个问题, 1. 当上游节点使用了流复制搭建主备HA,并且主备发生切换时,下游节点的订阅还能继续吗? 2. 可以使用备库节点作为逻辑复制的上游节点吗?(即物理备库作为逻辑复制的发布节点...

PostgreSQL jdbc batch insert

2 minute read

背景 如何快速的将数据导入数据库? 比如ETL程序,数据还原程序,数据初始化,数据同步等场景都会有这样的诉求。 从几个方面来分析 1. 统计信息 PostgreSQL会自动统计表的统计信息,包括柱状图等。会有一定的开销,所以在做批量导入时,可以先关闭表的autovacuum. 2. 索引 构造索引,会...

PostgreSQL 10.0 preview 性能增强 - GIN索引vacuum锁降低

less than 1 minute read

背景 如果你发现你的CPU没怎么用,但是压力就是上不去,很大可能是锁等待造成的(perf可以观察),锁在数据库优化中是一个比较永恒的话题。 以往在vacuum GIN索引clean posting tree时,需要锁整个posting tree,10.0改进了这块的锁,现在只锁一个subtree。 在较大的G...

视觉挖掘与PostGIS空间数据库的完美邂逅 - 广告营销圈人

6 minute read

背景 推荐系统是广告营销平台的奶牛,其核心是精准、实时、高效。 这么多广告平台,到底谁家强?谁的核心牛逼? 1. 精准,指对用户的描述精准,通常需要基于大量的用户行为数据,经历深度学习后形成的用户画像,或称之为标签系统。 标签的准确性关系到推荐的精准度,比如你可能不会对一个正常的年轻人推荐老花眼镜(当然如果有...

PostGIS 多点几何类型 空字符构造异常CASE - parse error - invalid geometry (lwgeom_pg.c:96)

1 minute read

背景 某个业务中存储了一批用户的访问轨迹数据,(每个店铺访问的次数,包括店铺ID,访问次数:1:1, 2:1即1号店访问了1次,2号店访问了1次)。 业务方有一个需求,根据店铺的访问次数圈出一部分人群,比如A店铺访问超出多少次的,或者B店铺访问超过多少次的等。 如果让你来处理,你会使用什么技术呢? 数据结构...

PostgreSQL 10.0 preview 功能增强 - CLOG oldest XID跟踪

less than 1 minute read

背景 PostgreSQL tuple中记录的xmin,xmax事务号是uint32类型,所以是一个rotate使用的方式,需要frozen。 CLOG存储的是oldest XID之后的XID,也就是说这个XID之后的事务,都保留了事务提交的状态值,之前的CLOG可能被删除或者正在被删除。 这个patch与从...

PostgreSQL 10.0 preview 功能增强 - 逻辑复制支持并行COPY初始化数据

4 minute read

背景 PostgreSQL 已支持逻辑复制,同时对逻辑复制增加了一个初始同步的增强功能,支持通过wal receiver协议跑COPY命令(已封装在逻辑复制的内核代码中),支持多表并行。 也就是说,你可以使用PostgreSQL的逻辑复制,快速的(流式、并行)将一个实例迁移到另一个实例。 Logical re...

开放地图OpenStreetMap与PostGIS的三生三世十里桃花

2 minute read

背景 喜欢自由吗?喜欢自由的使用全球地图吗?喜欢自由的贡献、开发全球地图吗?那你一定要来了解一下风靡全球的OpenStreetMap。谷歌最强劲的对手。 openstreetmap全球统计报告 http://wiki.openstreetmap.org/wiki/Stats#Registered_users_...

2011年功力的德哥教你两天撸通PostgreSQL - 入门、开发、原理、管理、调优

less than 1 minute read

背景 很多人抱怨我写的入门文档太少,实际上几年前做过很多入门的培训,PPT也很全,听过我讲的朋友戏称这份PPT足够出一本标准教材了(达到了380页之多)。 PostgreSQL的入门教材还有很多,书籍也很多,如果您真的钟爱我写的文章的话,那就不要错过本文了,当时是2011年,PostgreSQL社区是一个很有爱...

PostgreSQL 递归查询CASE - 树型路径分组输出

5 minute read

背景 PostgreSQL的递归查询可以解决很多树形结构,路径查询等问题。 结合PostgreSQL plpgsql编程,可以实现更加复杂的问题,比如接下来这个CASE。 用户要求输出每个末端路径涉及的所有的记录。 例子 创建测试表,插入路径数据. create table test(id seria...

MySQL不适合去O(Oracle)的原因分析

1 minute read

背景 去O从互联网逐渐蔓延到传统企业,但是MySQL适合传统企业吗?来听听某些传统用户的心声。 某些传统企业也想学互联网去O的思路,复制互联网的去O神话,但是他们自己调研了一下MySQL之后,发现这种想法并不科学。 这些弊端在PostgreSQL中并不存在,还增加了许多特性可以帮助企业降低开发量。这几年PG在...

数据库三十六计 - PostgreSQL 三十六计(下)

5 minute read

背景 PostgreSQL 三十六计 - 下 25. 数据库端编程,处理复杂业务逻辑。 在传统企业、电商、运营商等涉及用户交互、或者多个系统交互的业务场景中,通常一个事务涉及到很复杂的业务逻辑,需要保证数据的一致性,同时还需要与数据库多次交互。 比如银行开户,涉及的业务系统多,逻辑复杂。在传统企业中,通常也使用...

数据库三十六计 - PostgreSQL 三十六计(中)

1 minute read

背景 PostgreSQL 三十六计 - 中 13. 金融风控、公安刑侦、社会关系、人脉分析 等业务场景,高效实现图式数据搜索。 利用PostgreSQL函数编程,异步消息,复杂JOIN,递归查询,一对多关系存储等手段,解决高效的图式数据查询需求。 1. 猎头挖人 作为IT人士或者猎头、HR,对Linked...

数据库三十六计 - PostgreSQL 三十六计(上)

2 minute read

背景 PostgreSQL 三十六计 - 上 1. 任意字段组合查询有高招。 在业务中,任意字段组合查询的需求越来越多,也就是俗称的ADHoc查询。例如前端人机交互,根本不知道用户会对哪些字段进行检索,任意字段组合搜索、透视。为了达到查询加速效果,传统数据库需要对每一种查询组合建立多字段复合索引,导致索引非常多...

PostgreSQL 数据rotate用法介绍 - 按时间覆盖历史数据

2 minute read

背景 在某些业务场景中,数据有冷热之分,例如业务只关心最近一天、一周或者一个月的数据。对于历史的数据可以丢弃。 比如某些指标的监控场景,保留一周的监控数据,历史的都可以丢弃。 如何丢弃历史数据?或者说如何实现rotate? 1. 使用delete, 删除7天前的数据。 delete from table ...

PostgreSQL 10.0 preview 性能增强 - Write Amplification Reduction Method (WARM)消除某些情况下的INDEX写放大

4 minute read

背景 目前,PostgreSQL的MVCC是多版本来实现的,当更新数据时,产生新的版本。(社区正在着手增加基于回滚段的存储引擎) 由于索引存储的是KEY+CTID(行号),当tuple的新版本与旧版本不在同一个数据块(BLOCK)的时候,索引也要随之变化,当新版本在同一个块里面时,则发生HOT UPDATE,索...

PostgreSQL 10.0 preview 功能增强 - 后台运行(pg_background)

6 minute read

背景 当用户在管理数据库时,如果要在交互式界面跑一些QUERY,但是不知道QUERY要运行多久,担心网络问题或者其他问题导致终端断开,QUERY执行情况不明的话。就需要后台运行这个功能了。 后台运行在LINUX中也很常见,比如 nohup ls -la / >/tmp/result 2>&...

PostgreSQL 末尾数据块损坏(如pg_type pg_attribute) case

2 minute read

背景 某些用户遇到的一些问题,报读数据块错误。 ERROR: colud not read block 15 in file "base/16386/12741": read only 0 of 8192 bytes 大概的意识是,第15个数据块,没有正确的读出数据,数据为0字节。 第一反应是数据块坏...

PostgreSQL create extension with schema pg_catalog的权限异常case

less than 1 minute read

背景 pg_catalog这个schema是PostgreSQL默认的元数据schema,所有的元数据都在这里. 另一方面,pg_catalog这个schema默认就在搜索路径search_path里面,并且是删除不掉的,而且它的优先级排在所有schema的前面。 比如有两个重名的pg_class分别在这两个...

PostgreSQL 10.0 preview 功能增强 - 回滚范围可精细控制(事务、语句级)

3 minute read

背景 数据库的原子操作单位是事务,那么在一个事务中的SQL,正常情况下,应该是这样的:要么全部提交,要么全部回滚。 为了保证持久性,数据库还有一个概念,事务日志,每当事务提交时,都需要确保REDO持久化(REDO的写IO会比较多,IO延迟直接关系到tps吞吐量,特别是小事务)。 因此,有些业务,为了提高整体的...

PostgreSQL update tbl1 from tbl2 一对多的注意事项(到底匹配哪条)

1 minute read

背景 首先A表和B表需要有关联的列, 关联之后A表和B表应该是多对一或者一对一的关系, 一对一的话,很好理解。 如果是一对多会怎么样呢? 任何数据库都会给你一个不确定的答案(与执行计划数据的扫描方法有关) 测试如下 : sar=> create table a (id int primary key,...

PostgreSQL 10.0 preview 多核并行增强 - 控制集群并行度

2 minute read

背景 PostgreSQL 9.6引入多核并行,一条SQL可以使用多个CPU核,提升SQL性能。 但是多核并行一定不要滥用,因为CPU资源有限,如果单个QUERY把CPU都用光了,其他QUERY就会因为缺乏CPU资源造成性能抖动。 9.6刚出来的时候,可以控制单个gather的并行度,比如全表扫描,扫描节点算...

PostgreSQL 10.0 preview 性能增强 - mergesort(Gather merge)

6 minute read

背景 在数据库中,经常会有多个节点append,然后sort的情况。 例如一张表有10个分区,查询所有分区,并按某列排序输出,常规的做法是所有的记录append,然后sort。 PostgreSQL 10.0 将支持append node的并行计算,也就是说所有的分区表可以并行的sort,然后返回,此时就可以...

PostgreSQL 10.0 preview 性能增强 - CLOG group commit

4 minute read

背景 clog是PostgreSQL的事务提交状态日志,每个事务对应2个BIT,当事务频繁(小事务)结束时,可能出现CLOGControlLock 冲突的问题。 虽然增加clog buffer可以缓解,PostgreSQL 10.0 采样clog group commit进一步降低这个冲突。 提升高并发下的T...

PostgreSQL 10.0 preview 功能增强 - OLAP增强 向量聚集索引(列存储扩展)

4 minute read

背景 未来数据库OLTP+OLAP逐渐模糊化,需求逐渐融合是一个大的趋势,如果你的数据库只支持OLTP的场景,未来可能会成为业务的绊脚石。 在这方面PostgreSQL每年发布的新版本,都给用户很大的惊喜,OLTP已经具备非常强大的竞争力(性能、功能、稳定性、成熟度、案例、跨行业应用等),而OLAP方面,新增的...

PostgreSQL 10.0 preview 功能增强 - identify column (SQL标准:T174)

less than 1 minute read

背景 identify column类似PostgreSQL的serial, (自增\减序列). identify column(s)属于SQL标准中的某个特性。 PostgreSQL 10.0将实现这一标准,虽然你已经可以使用serial来达到同样效果,不过实现这一标准,可以兼容更多的数据库。 对于从其他数...

PostgreSQL 10.0 preview 功能增强 - 分区表(list default)

1 minute read

背景 PostgreSQL 10.0将支持range,list分区表,同时hash分区处于POC阶段(同时还有一些需要改进的地方,例如优化器部分)。 如果你使用的是10.0以前的版本,可以使用pg_pathman插件实现分区,pg_pathman已经非常的完美。 PostgreSQL支持伪表作为分区,例如外部...

PostgreSQL 10.0 preview 功能增强 - 分区表(hash,range,list)

3 minute read

背景 PostgreSQL 10.0将支持range,list分区表,同时hash分区处于POC阶段(同时还有一些需要改进的地方,例如优化器部分)。 如果你使用的是10.0以前的版本,可以使用pg_pathman插件实现分区,pg_pathman已经非常的完美。 PostgreSQL支持伪表作为分区,例如外部...

PostgreSQL 10.0 preview 功能增强 - 支持EUI-64格式MAC地址类型

1 minute read

背景 PostgreSQL 是全球最先进的开源数据库,所谓先进,体现在很多方面: 支持扩展类型 支持扩展操作符 支持扩展函数 支持扩展窗口 支持扩展聚合 支持扩展采样 支持扩展扫描 支持扩展索引,内置8种索引 支持扩展访问方法 支持扩展插件 支持扩展。。。。。。 支持丰富的SQL标准 支...

PostgreSQL 10.0 preview 功能增强 - JSON 内容全文检索

less than 1 minute read

背景 PostgreSQL 10.0 支持JSON内容的全文检索了。 同样支持ts rank和phrase 索引哦。 ts rank, phrase请参考 《从难缠的模糊查询聊开 - PostgreSQL独门绝招之一 GIN , GiST , SP-GiST , RUM 索引原理与技术背景》 ``` Hi...

PostgreSQL 10.0 preview 性能增强 - 间接索引(secondary index)、二级索引

4 minute read

背景 我们知道,PostgreSQL的MVCC是多版本来实现的,当更新数据时,产生新的版本。 那么如果新版本不在同一个数据块的时候,索引也要随之变化,当新版本在同一个堆表的块里面时,则发生HOT UPDATE,不需要变更没有发生值改变的索引。 但是HOT总不能覆盖100%的更新,所以还是有索引更新的可能存在。...

PostgreSQL 10.0 preview 功能增强 - slave提前苏醒

less than 1 minute read

背景 PostgreSQL 数据库的WAL为重做日志,如果数据库CRASH,那么需要等待WAL来恢复数据库,只有当数据库恢复到一致状态时,才能将数据库唤醒(或者说此时数据库才是一致的)。 数据库被唤醒后(promote),客户就可以对数据库执行查询、增删改查的动作了。 那么如果数据库需要apply很多的WAL...

PostgreSQL 10.0 preview 流复制增强 - 支持可配置的wal send max size

less than 1 minute read

背景 以前的版本,wal sender进程使用流复制协议,将WAL信息发送给下游的wal receiver进程时,一次最多发送128KiB,是在宏中设置的。 现在允许用户设置GUC参数,来控制这个最大值。 在测试环境中设置为16MB有2倍的性能提升,可以更好的利用网络带宽,提升流复制的传输效率。 Attac...

PostgreSQL 10.0 preview sharding增强 - 支持Append节点并行

3 minute read

背景 Append节点通常出现在多个表union , union all或者查询包含多个分区的主表时。 需要对每个子表,或者每个subquery进行查询,然后在将结果合并。 PostgreSQL 10.0增加了一个并行模式即Append节点的并行,多个Append节点,可以并行的执行。、 从而大大的提升效率...

PostgreSQL 10.0 preview 优化器改进 - 不完整索引支持复合排序

3 minute read

背景 当我们在使用数据库时,排序是一个比较常见的需求,排序有几种方法,使用索引,或者访问堆表然后显示的排序。 当使用索引排序时,索引必须包含排序列,同时必须是驱动列包含排序列。 例如 order by a,b,c,那么可使用索引(a,b,c,*) 但是order by a,b,c能使用索引(a,b...

PostgreSQL 10.0 preview sharding增强 - postgres_fdw 多节点异步并行执行

2 minute read

背景 PostgreSQL 10.0的sharding增强,比如聚合函数的下推算一个。 现在又带来了一个核武器级别的增强,postgres_fdw的异步化调用。 为什么说是核武器级别的呢,比如你有16个sharding节点(对应postgres_fdw的16个库),10.0以前,如果我需要执行一个QUERY涉...

PostgreSQL 10.0 preview 功能增强 - 自动预热shared buffer (auto prewarm)

1 minute read

背景 数据库的shared buffer可以用来存储经常使用的数据块,以提升效率。通过LRU算法老化不常用的数据块。 因此在生产数据库中,SHARED BUFFER中通常是热数据。 数据库如果重启,或者发生主备切换,缓存中的热数据需要从磁盘(或者OS PAGE CACHE)重新载入数据库的shared buf...

PostgreSQL 10.0 preview 功能增强 - QUERY进度显示

1 minute read

背景 query进度的显示,有一个插件pg_query_state支持。 PostgreSQL 10.0将在内核层面增加一个这样的支持。 首先会在analye命令上尝试,但是它会设计为通用的视图,支持其他命令,诸如CREATE INDEX, VAUUM, CLUSTER等。 Hello Hackers, ...

PostgreSQL 数据文件灾难恢复 - 解析与数据dump

6 minute read

背景 俗话说常在河边站哪有不湿鞋,作为一名战斗在一线的DBA或者开发者,可能有遇到过磁盘损坏,磁盘阵列损坏,如果有备份或者备库的话,还好。 如果没有备份,或者没有备库(通常有一些小型或者创业型的企业),那么遇到磁盘损坏或者其他原因(比如掉电文件系统损坏),导致数据库的数据文件并不完整时,如何从有限的资料中找出数...

PostgreSQL 区块链条管理举例

4 minute read

背景 区块链的概念请参考 https://github.com/yeasy/blockchain_guide/blob/master/intro/what.md 截取部分如下 什么是区块链 区块链的基本原理理解起来并不难。基本概念包括: 交易(Transaction):一次操作,导致账本...

PostgreSQL 数据库巡检

1 minute read

背景 PostgreSQL数据库的巡检脚本在这里,自动生成txt格式巡检报告(包括采集项以及建议项目)。 https://github.com/digoal/pgsql_admin_script/blob/master/generate_report.sh 巡检项目前包括了如下: |++++++++++++...

PostgreSQL Windows和Linux的数据文件通用吗

3 minute read

背景 PostgreSQL是一个跨平台的数据库,比如支持WindowS, AIX , linux , freebsd等。 同时也支持不同架构例如X86,ARM等。 对于相同架构,不同平台,是否能实现文件级别的平移,甚至物理的流复制搭建STANDBY呢? 理论上从数据库的存储层面来看,如果两个平台存储结构(比...

连接PostgreSQL时,如何指定参数

less than 1 minute read

背景 连接数据库时,如何配置默认参数? libpq https://www.postgresql.org/docs/9.6/static/libpq-connect.html#LIBPQ-CONNSTRING 所有支持的连接参数都在以上链接中 KV模式 配置连接串时,可以使用KV模式,例子 host=lo...

数据透视 - 商场(如沃尔玛)选址应用

10 minute read

背景 人群透视是商业与数据结合的案例之一,比如大型商场的选址,可与分析的数据包括车流、人流量等等。 结合数据可以更深入的分析人群的组成结构,消费能力等等,给大型商场的选址带来更多的参考价值。 那么如何使用数据库透视人群数据呢? 场景构建 1. 人群属性表 记载了每个人的各个属性段落,比如收入、车龄...

PostgreSQL业务函数代码版本管理 - 自动备份存储过程、函数代码到SVNgithub…

6 minute read

背景 市面上有很多代码的版本管理软件,比如gitlab, github, svn等等。 商业数据库的编程能力较强,比如Oracle的PL/SQL,很多传统企业会将对一致性、可靠性要求非常高的业务逻辑放到数据库中,这就造成了数据库内不仅仅存储数据,也存储了部分业务代码。 PostgreSQL 作为开源界最高级的...

pidstat 统计进程、线程、进程组的资源消耗

8 minute read

背景 如果我们要查看Linux下面进程、进程组、线程的资源消耗的统计信息,可以使用pidstat,它可以收集并报告进程的统计信息。 pidstat实际上也是将/proc/pid下的统计信息统筹后展现给用户。 pidstat例子 1. 列出IO统计信息:-d 2. 列出内存使用统计,page fault:-...

PostgreSQL 备库apply延迟(delay)原理分析与诊断

4 minute read

背景 开车的同学都喜欢一马平川,最好是车道很多,车很少,开起来爽。 大家想象一下,同样的车速,6车道每秒可以通过6辆车,而1车道每秒就只能通过1辆车。 好了,我们回到IO层面,我们在使用fio测试块设备的IO能力时,可以选择多少个线程进行压测,实际可以理解为开多少车道的意思。 只要没到通道或者设备本身的...

PostgreSQL bitmapAnd, bitmapOr, bitmap index scan, bitmap heap scan

6 minute read

背景 在PostgreSQL中,多个单列索引是可以用在组合查询SQL中的,也就是说实现了bitmap scan。 比如 select * from tbl where c1=1 and c2=1 or c3=1; 用到了3列,如果这3列分别有一个索引,那么PostgreSQL会使用这三个索引的bitmap ...

PostgreSQL GIN 单列聚集索引 应用

2 minute read

背景 聚集存储比较好理解,数据按照聚集KEY存储在一个或相邻的数据块中,对聚集KEY的轨迹、行为数据检索可以大幅减少IO。 那么聚集索引呢?我们知道通常BTREE索引中存储的是KEY以及对应数据的堆表行号,每条记录一个索引条目。 而GIN索引也是树结构,只不过它对于单个KEY只存储一个条目,所有行号会存储到一...

PostgreSQL 向量化执行插件(瓦片式实现-vops) 10x提速OLAP

10 minute read

背景 在主流的OLTP数据库产品中,毫无疑问,PostgreSQL已经具备非常强大的竞争力(性能、功能、稳定性、成熟度、案例、跨行业应用等)。 《数据库选型之 - 大象十八摸 - 致 架构师、开发者》 《数据库选型思考》 《数据库界的华山论剑 tpc.org》 《PostgreSQL 前世今生》 在OL...

PostgreSQL 聚集存储 与 BRIN索引 - 高并发行为、轨迹类大吞吐数据查询场景解说

15 minute read

背景 在现实生活中,人们的各种社会活动,会产生很多的行为数据,比如购物、刷卡、打电话、开房、吃饭、玩游戏、逛网站、聊天 等等。 如果可以把它当成一个虚拟现实(AR)的游戏,我们所有的行为都被记录下来了。 又比如,某些应用软件,在征得你的同意的情况下,可能会记录你的手机行为、你的运动轨迹等等,这些数据可能会不...

PostgreSQL Oracle 兼容性之 - 函数、类型、多国语言

6 minute read

背景 PostgreSQL的FDW支持在PostgreSQL中使用外部表的方式直接访问其他数据源的数据,就如同访问本地表一样。 FDW接口是开放的,所以任何人都可以开发对应外部数据源的接口,比如oracle_fdw就是用来访问Oracle数据库的。 FDW开发接口中,代码中会包括数据的转换,函数的转换,等 ...

PostgreSQL 天文插件 - pg_sphere

4 minute read

背景 在天文或GIS领域,找出某个位置附近的对象,或者找到两张表的位置互相关的数据,是非常普遍的需求。 在PostgreSQL中有很多方法可以实现以上需求。 比如 http://skyview.gsfc.nasa.gov/xaminblog/index.php/tag/pgsphere/ Haver...

[转载]sysctl加载配置顺序问题

1 minute read

背景 原文 https://blog.tankywoo.com/2015/01/29/sysctl-load-order.html 正文 系统Gentoo, 最近遇到一个比较离奇的问题. 网关机器的sysctl运行时配置中,net.ipv4.ip_forward被改为0, 原来是1; net.ipv4.co...

PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化

4 minute read

背景 数据库是一种非常庞大的应用系统,就拿PostgreSQL来说,每个实体对象(物化视图、表、序列、索引、TOAST表、TOAST索引)都需要至少1个数据文件,还需要fsm, vm等辅助文件。 当数据库中有很多实体对象时,文件数会非常庞大,而对于Linux操作系统来说,单个进程的打开文件数是有限制的。Post...

PostgreSQL 2017 2月份 相关新闻

1 minute read

背景 PostgreSQL近几年的发展有目共睹,从GIS到物联网、流式计算、多维分析、高并发在线事务处理、服务端编程、任意数据类型的抽象处理、扩展索引方法、GPU运算能力的利用等各个方面体现了PostgreSQL的强大功能和性能。从dbranking的分值也可以得到证明,毫无疑问是2016年度发展最快的数据库。 ...

PostgreSQL、Greenplum DML合并操作 最佳实践

6 minute read

背景 在很多场景中会涉及到数据的合并,比如 1. 某业务系统的总用户有1亿,每天的活跃用户有100万,新增用户10万,每天需要将新增、活跃用户的数据(比如他们的余额变化、等等)合并到数据仓库的用户信息表。 2. 物化视图,某个表被用户不断的增、删、改。需要将这个表(基表)的某些字段或者某部分数据提取到一个物化...

数据库选型之 - 大象十八摸 - 致 架构师、开发者

6 minute read

背景 数据库对于一家企业来说,相比其他基础组件占据比较核心的位置。 有很多企业由于最初数据库选型问题,导致一错再错,甚至还有为此付出沉痛代价的。 数据库的选型一定要慎重,但是这么多数据库,该如何选择呢? 我前段时间写过一篇关于数据库选型的文章,可以参考如下 《数据库选型思考》 另外,PostgreSQL...

PostgreSQL MySQL 数据类型映射

5 minute read

背景 通常一家企业会有比较多的数据库品种,最为常见的如MySQL, PostgreSQL。 那么在不同的产品之间,如果有数据的相互同步,就涉及到类型的映射了。 对于PostgreSQL来说,可以使用PostgreSQL的mysql_fdw外部插件来实现同步,产品设计会简化很多。 而对于MySQL来说,可能就...

PostgreSQL 表和列权限(ACL)解读

3 minute read

背景 如何查看数据库中的表的相应权限,已经赋予给哪些用户了。 另外,PostgreSQL还可以针对列进行赋权,还可以适应行安全策略,所以如何查看某张表的某些列的相应权限被赋予给哪些用户了。 还有其他的对象,如视图、函数、语言等,他们的权限被赋予给哪些数据库用户了呢? 这些通过psql \dp很容易实现,但是...

[转自叶大师博文] tpcc-mysql安装、使用、结果解读

2 minute read

背景 很多的MySQL测试都是拿sysbench做的,甚至很多人认为数据库的测试都应该用sysbench来做。但实际上并非如此。 sysbench的test case偏简单,也没有建立什么测试标准,它是一个个人软件,由于MySQL的风靡使得很多人认识了sysbench。 事实上sysbench并不是数据库行业...

PostgreSQL Oracle 兼容性之 - 内核自带的兼容函数

3 minute read

背景 PostgreSQL功能上基本可以和Oracle对齐,只是一些语法或者函数名不一样,所以为了做到兼容,有一些兼容包和兼容函数的出现。 PostgreSQL自带了一些Oracle兼容函数,如果你觉得不够意思,可以通过orafce插件继续扩展PostgreSQL与Oracle的兼容性(本文不涉及orafce包...

PostgreSQL 10.0 preview 流复制增强 - 流式接收端在线压缩redo

3 minute read

背景 虽然现在磁盘已经很廉价,大多数时候不需要压缩了。 但是在一些嵌入式系统,或者一些未扩容的产品环境中,压缩还是非常有必要的。 特别是数据变化大、或者数据增量大的场景,例如物联网(IoT),每天单库可能新增TB级的增量。 比如 《PostgreSQL 如何潇洒的处理每天上百TB的数据增量》 指的就是IoT...

宝剑赠英雄 - 任意组合字段等效查询, 探探PostgreSQL多列展开式B树 (GIN)

26 minute read

背景 很多人小时候都有一个武侠梦,独孤求败更是金庸武侠小说里的一位传奇人物。 纵横江湖三十馀载,杀尽仇寇奸人,败尽英雄豪杰,天下更无抗手,无可奈何,惟隐居深谷,以雕为友。 呜呼,生平求一敌手而不可得,诚寂寥难堪也。 独孤老前辈的佩剑描写非常有意思,从使用的佩剑,可以看出一个人的武功修为。 第一柄是一柄青光闪...

PostgreSQL GIN索引实现原理

14 minute read

背景 本文参考并扩展自如下文档,修正了一些内容(大多数是由于版本不同造成的差异) 《PostgreSQL数据库内核分析》 ( 成书较早,大量内容基于8.4的代码编写 ) 以及 http://zisedeqing.blog.163.com/blog/static/95550871201621623458216...

PostgreSQL GIN multi-key search 优化

6 minute read

背景 PostgreSQL中,有一种GIN索引,被广泛应用于多值类型,例如数组,分词,同时也被应用于模糊查询等领域。 gin索引,将列(比如数组,全文检索类型)中的值拿出来,再存储到树形结构中(类似B-TREE,键值+heap行号s),对于低频值,会作为posting list直接存在树的gin的叶子节点中,而...

Gitlab从删库到恢复 - 数据库备份恢复容灾HA的靠谱姿势

1 minute read

背景 如果你是身处数据库行业的朋友,最近可能被朋友圈的各种关于 “炉石数据被删” 、 “mongoDB遭黑客勒索” 的事件刷屏。 而就在今天(2017-02-01)事情再一次升华, “gitlab 数据库的数据文件被rm -rf误删”,数据库的恢复过程和细节有直播视频,请参考gitlab的官方解释,以免以讹传讹...

聊聊between and的坑 和 神奇的解法

5 minute read

背景 曾经一位社区的兄弟跟我抱怨MySQL里面查IP地址库并发几千每秒的查询数据库就抗不住了。 于是问他要来了他们的IP地址库数据和查询用的SQL以及MySQL里面的表结构。 我也想把数据转到PostgreSQL里面做一下相对应的压力测试,看看PostgreSQL的表现。 在其他的业务中,这样的需求也是屡见...

log4j 配置

5 minute read

背景 Log4j是Apache的一个开源项目,通过使用Log4j,可以控制将应用日志信息输送到: 控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程、数据库等; 可以控制每一条日志的输出格式; 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 ...

数据库界的华山论剑 tpc.org

19 minute read

背景 飞雪连天射白鹿,笑书神侠倚碧鸳。 金庸老先生果然好功夫,武侠名著的首字串起来也是一首好湿。 在很多的武侠小说中,都有武林盟主的角色(虽然通常为反派),既然是武林,武林盟主除了综合素质,人脉,武功当然也不能差。 很多小说中武林盟主通常就是比武决出的,比如耳熟能详的华山论剑。 玩过金庸群侠传...

蜂巢的艺术与技术价值 - PostgreSQL PostGIS’s hex-grid

3 minute read

背景 人们为了更好的描述一个东西,有一种将大化小的思路,比如时钟被分为了12个区域,每个区域表示一个小时,然后每个小的区域又被划分为更小的区域表示分钟。 在GIS系统中,也有类似的思想,比如将地图划分成网格。通过编码来简化地理位置的判断(比如相交,包含,距离计算等),但是请注意使用网格带来的问题,比如精度的...

脑王水哥王昱珩惜败人工智能, 这不可能. - 图像识别到底是什么鬼

less than 1 minute read

背景 水哥王昱珩不用多介绍,在最强大脑第六期晋级赛第五场,在“微观辨水”环节中,520杯同质同量同水源的水被他一眼辨认出,Dr.魏给出9分难度分,最终王昱珩以117分晋级。 随后的中日PK赛中的“扇面识别”环节中,王昱珩选择放弃观察,最终在第一轮中国队0:1落后的情况下,战胜日本队原口证为中国队扳回1分。 ...

DBA一族九阳神功秘籍,标准和制度(含重大节假日应急预案)

2 minute read

背景 如果你是数据库这个行业的朋友,最近可能会被朋友圈的各种关于 “炉石数据被删” 、 “mongoDB遭黑客勒索” 、 “gitlab数据文件被rm -rf” 的事件刷屏。 数据库在是企业中占据非常重要的位置,发生数据库被SQL注入,数据被误删的事情,不仅仅影响业务,还可能造成用户的信息被泄露。 DBA一族...

小鸡吉吉小猪佩吉小象Pi吉(PostgreSQL) 祝大家吉祥如意,幸福安康,阖家欢乐!

1 minute read

背景 我家有只小鸡鸡,它的名字叫吉吉。 吉吉有一位铁杆鸡友大象Pi吉哥哥(PostgreSQL)。 吉吉给大伙拜年啦,祝大家鸡年吉祥,新年新气息,与好鸡友大象哥哥愉快的玩耍,鸡情四射。 故事从吉吉和好鸡友大象哥哥偶遇的那天开始。 有一天,大象哥哥摆下国际象棋擂台,邀请各路英豪前来,就这样和吉...

PostgreSQL结合余弦、线性相关算法 在文本、图片、数组相似 等领域的应用 - 1 文本(关键词)分析理论基础 - TF(Term Frequency 词频)/IDF(Inverse Document Frequency 逆向文本频率)

8 minute read

背景 很多网站有标签的功能,会根据网页自动生成标签,标签实际上就是该网页的关键词,比如一个卖手机的网页,那么标签是如何生成的呢? 在一篇文档里面,是不是出现越多的词,就越是关键词呢? 比如在中文里面的、是、我、你可能出现次数是比较多的,它们很显然不是关键词,这些属于stop word,是需要被忽略的。 ...

从电波表到数据库小程序之 - 数据库异步广播(notify/listen)

2 minute read

背景 小时候就梦想有个酷酷的电波表(虽然现在还没有拥有),不过电波表和PostgreSQL有什么关系呢?听我道来。 http://baike.baidu.com/view/1124741.htm 电波表内置高感度小型天线,接收标准电波进行自动对时,因而可以实现时间上的精准。在国际上,德国、英国、美国、日本...

从微信小程序 到 数据库小程序 , 鬼知道我经历了什么

3 minute read

背景 微信小程序最近比较火,大概以后大家都不需要安装程序了,直接在微信中调用运行。跑在微信里的小程序类似一个虚拟机或者一个Docker容器,这是腾讯要分APP store蛋糕的节奏吗? 从技术角度来看,微信小程序带来了几个好处,不需要安装软件,用户不需要进行软件的版本管理,节省了一点点手机的空间,同时还降低了流...

(AR虚拟现实)红包 技术思考 - GIS与图像识别的完美结合

2 minute read

背景 作为搞IT的小伙伴们,对虚拟现实(AR)应该并不陌生,这次带来了一个很有趣的功能,虚拟现实与藏红包结合起来。 简单介绍一下这个业务,然后我们再来思考背后的技术。 (AR虚拟现实)藏红包、找红包 玩法介绍 想象一下,你可以把你的红包藏在世界各地的任意角落,让全世界的人来找红包,是不是一件很有趣的事情。 ...

导购系统 - 电商内容去重内容筛选应用(实时识别转载盗图侵权?) - 文本、图片集、商品集、数组相似判定的优化和索引技术

10 minute read

背景 同一个热点事件,可能有很多的媒体报道。 同一篇好的文章,可能被多人转载。 一个商品、或者同一堆商品,可能会被诸多广告平台、导购平台推送。 导购网站、新闻媒体、技术论坛、搜索引擎,充斥着各种李逵、李鬼。相似甚至内容完全相同的文章或者图片集等。 不涉及利益时,这些都不是大问题。一旦涉及利益,这些问题可能...

PostgreSQL psql 安全设置数据库用户密码的方法之一

2 minute read

背景 密码有多重要就不需要多说了,但是你知道密码有多少可能泄露的渠道吗? 大多数人可能觉得在设置好密码后,保管好不被泄露就可以了。 但是你有没有想过,在设置密码的过程中就泄露了呢? 比如数据库中设置用户密码,有多少种可能泄露的渠道? 比如,我们在修改数据库用户密码时,可能经历这么长的流程才能最终将新的密码...

Linux cgroup - memory子系统讲解

11 minute read

背景 Linux是一个很好的多用户平台,但是当我们在Linux中运行多个资源耗费很大的应用(比如数据库)时,应用间的资源争抢可能就比较严重。 那么有什么好的方法可以隔离不同应用之间的资源使用呢?cgroup是一个不错的选择。 cgroup目前已支持 cpu, 网卡, memory, io, 硬件设备 的隔离,...

PostgreSQL 如何只监听unix socket?

3 minute read

背景 可能出于某些原因(例如避免数据库的本机用户跨用户通过IP地址访问,而只通过LINUX文件权限来保护数据库的连接权限等),用户只需要监听unix socket,而不期望监听任何IP(包括127.0.0.1)。 怎么做呢? 配置 配置是很简单的,只需要把listen_addresses设置为空就可以了。 ...

PostgreSQL 数据库扩展语言编程 之 plpgsql - 1

7 minute read

背景 PostgreSQL是一个开放的数据库,开发性表现在支持自定义数据类型、索引方法、索引、操作符、聚合、窗口、服务端编程语言等等。 所以我们可以看到在PostgreSQL的生态中有很多贴近业务的用法,比如在PostgreSQL中存储和处理化学分子、存储和处理图像、存储和处理基因数据、存储和处理文本(包括正则...

PostgreSQL C tutorial

16 minute read

背景 转自 http://zetcode.com/db/postgresqlc/ 正文 This is a C programming tutorial for the PostgreSQL database. It covers the basics of PostgreSQL programming wit...

PostgreSQL PHP tutorial

22 minute read

背景 转自 http://zetcode.com/db/postgresqlphp/ 正文 This is a PHP tutorial for the PostgreSQL database. It covers the basics of PostgreSQL programming with PHP. T...

PostgreSQL Ruby tutorial

13 minute read

背景 转自 http://zetcode.com/db/postgresqlruby/ 正文 This is a Ruby programming tutorial for the PostgreSQL database. It covers the basics of PostgreSQL programmi...

PostgreSQL Python tutorial

19 minute read

背景 转自 http://zetcode.com/db/postgresqlpythontutorial/ 正文 This is a Python programming tutorial for the PostgreSQL database. It covers the basics of PostgreS...

PostgreSQL Java tutorial

33 minute read

背景 转自 http://zetcode.com/db/postgresqljavatutorial/ 正文 This is a Java tutorial for the PostgreSQL database. It covers the basics of PostgreSQL programming w...

PostgreSQL 全表 全字段 模糊查询的毫秒级高效实现 - 搜索引擎颤抖了

4 minute read

背景 在一些应用程序中,可能需要对表的所有字段进行检索,有些字段可能需要精准查询,有些字段可能需要模糊查询或全文检索。 比如一些前端页面下拉框的勾选和选择。 这种需求对于应用开发人员来说,会很蛋疼,因为写SQL很麻烦,例子: 之前写过一篇文章来解决这个问题 《PostgreSQL 行级 全文检索》 使用...

PostgreSQL 在被除数=0时的小纯真和小倔强

less than 1 minute read

背景 0不能作为被除数,小学就学过的知识。 对于数据库来说,设计严谨,遵循一些基本的原则也是很有必要的。 当在数据库中除以0时,应该如何处理呢? PostgreSQL为例,它具有非常浓烈的学院派风格,你说它你能让你除以0吗? 显然不让,如下: postgres=# select 1/0; ERROR...

PostgreSQL != , <> 索引

6 minute read

背景 在数据库中不等于能不能走索引呢?理论上是不行的,但是有方法可以让不等于也走索引(虽然走索引也不一定好)。 比如使用外连接实现(需要表有PK才行,没有PK可以使用行号代替),或者使用not exists,或者使用partial index(不支持变量)。 对于返回结果集很大的场景,建议使用游标分页返回,此...

想挑战AlphaGO吗?先和PostgreSQL玩一玩?? PostgreSQL与人工智能(AI)

4 minute read

背景 想必很多朋友这几天被铺天盖地的AI战胜60位围棋高手的新闻,我们不得不承认,人工智能真的越来越强了。 http://wallstreetcn.com/node/283152 1月4日晚,随着古力认输,Master对人类顶尖高手的战绩停留在60胜0负1和,而令人尴尬的是这唯一一场和棋还是因为棋手掉线系统自...

PostgreSQL DISCARD SEQUENCES

4 minute read

背景 PostgreSQL当前版本(9.3以及9.3以下版本)DISCARD没有discard sequence的功能. 即使DISCARD ALL也不会. 9.4会不会加入这个补丁, 现在还不确定, 要看committer是否能同意将之提交. 例子 digoal=# create sequence seq_...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 9

3 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 8

6 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 7

less than 1 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 6

11 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 5

7 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 4

14 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 3

8 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 2

3 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 1

20 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

在OOM现场 谈一谈数据库内存分配, 以及审计的重要性

10 minute read

背景 数据库是比较重内存的应用软件之一,比如排序、聚合、使用较大的列、使用很长的SQL(值SQL本身的内容长度),或者传入很大的变长类型值时,都可能使得单个连接就会消耗很大的内存。 而另一方面,每个连接会消耗一定的内存,比如SYSCACHE , RELCACHE,随着访问的对象变多,如果是长连接,消耗的内存也会...

ApsaraDB的左右互搏(PgSQL+HybridDB+OSS) - 解决OLTP+OLAP混合需求

3 minute read

背景 随着IT行业在更多的传统行业渗透,我们正逐步的在进入DT时代,让数据发挥价值是企业的真正需求,否则就是一堆废的并且还持续消耗企业人力,财力的数据。 传统企业可能并不像互联网企业一样,有大量的开发人员、有大量的技术储备,通常还是以购买IT软件,或者以外包的形式在存在。 数据的核心 - 数据库,很多传统的行...

PostgreSQL 10.0 preview - 截至2017元旦装备了哪些核武器

9 minute read

背景 早上送给大家的新年大礼包,一年一个大版本是PostgreSQL社区的传统,虽然发布时间通常为秋天,还有一段时间,但是已经迫不及待地想看看2017金秋将要发布的10.0版本已经装备了哪些核武器。 放心,还会有一波又一波的feature和增强搭上开往2017金秋的列车,本文提到的可能只是其中的某一节车厢沃,P...

Back to Top ↑

2016

PostgreSQL 重复 数据清洗 优化教程

10 minute read

背景 重复数据清洗是一个比较常见的业务需求,比如有些数据库不支持唯一约束,或者程序设计之初可能没有考虑到需要在某些列上面加唯一约束,导致应用在上线一段时间后,产生了一些重复的数据。 那么重复数据的清洗需求就来了。 有哪些清洗手段,如何做到高效的清洗呢? 一个小小的应用场景,带出了10项数据库技术点,听我道来...

轻松打爆netfilter conntrack table的Greenplum SQL

1 minute read

背景 Greenplum 是一款MPP数据库,数据哈希打散存放在数据节点,当执行JOIN时,如果JOIN字段非分布键,那么数据会在数据节点之间重分布。重分布使用四阶段方法,参考如下: 《分布式DB(Greenplum)中数据倾斜的原因和解法 - 阿里云HybridDB for PostgreSQL最佳实践》 ...

netfilter内核模块知识 - 解决nf_conntrack: table full, dropping packet

9 minute read

背景 netfilter是一个Linux内核网络包管理模块。支持包过滤、规则转发、会话状态跟踪等功能。 很多人可能遇到过nf_conntrack table full, dropping packet的问题,(正常情况下不应该出这样的问题,除非是DDos攻击,把netfilter的会话跟踪表打满了),又或者应用...

Linux 时钟精度 与 PostgreSQL auto_explain (explain timing on Linux时钟开销估算)

6 minute read

背景 我们在诊断SQL的执行计划时,通常会用explain analyze,analyze有几个开关,其中一个是timing,它会帮你记录下SQL每个NODE的执行时间。 但是这部分是有一定的性能开销的,而且这个开销与操作系统的时钟获取接口有关。 有时,你会发现explain analyze的执行时间远大于真...

从天津滨海新区大爆炸、危化品监管聊聊 IT人背负的社会责任感

4 minute read

背景 缘分所致,前几天与一些来自ING行业的企业做了一次深入的交流,有感而发,写下本文。 其实技术和业务相互依赖,相互推动着各自的发展。哪一个发明不是从自嗨开始的呢,作为IT人不应该故步自封,敞开胸怀,承担更多的社会责任,一起来推动社会变革吧。 天津滨海大爆炸只是危化品事故的其中之一,看看事故后的一片狼藉...

从真假美猴王谈起 - 让套牌车、克隆x 无处遁形的技术手段思考

2 minute read

背景 西游记想必大家小时候都看过吧,其中有一集“真假美猴王”还记得吗? 假的美猴王简直是克隆的,和孙悟空一模一样。一开始菩提祖师、如来佛祖、观音菩萨、就连最亲近的师父、师兄弟都分辨不出来,最后师父使出紧箍咒的绝招才辨别出来。 打假在现实世界中的需求也非常旺盛,诸如我们看到的一些商品的防伪码验证、水印验证、...

恭迎万亿级营销(圈人)潇洒的迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计

9 minute read

背景 我们仅用了PostgreSQL的两个小特性,却解决了业务困扰已久的大问题。 推荐系统是广告营销平台的奶牛,其核心是精准、实时、高效。 这么多广告平台,到底谁家强?谁的核心牛逼? 1. 精准,指对用户的描述精准,通常需要基于大量的用户行为数据,经历深度学习后形成的用户画像,或称之为标签系统。 标签的准确...

DBA专供 冈本003系列 - 数据库安全第一,过个好年

less than 1 minute read

背景 快过年了,安全第一。先给DBA们的冈本003系列,请收好了,并提前祝大伙们过个好年。 通常数据库在是企业中占据非常重要的位置,既然这么重要,当然要保护好,否则数据库被注入,数据被误删就不好看啦,不仅仅影响业务,还可能造成用户的信息被泄露。 本文本的本意是想写PostgreSQL数据库的某些安全特性的,提...

聊一下PostgreSQL优化器 - in里面有重复值时PostgreSQL如何处理?

3 minute read

背景 比如某个业务APP收集了用户的位置信息,在数据库中会有用户去过的地方的一些行为日志数据。 现在要找出今天某些用户群体去过了哪些地方。 会发生什么呢? 一个人在某一个地点可能会上报很多条数据,同时不同的人也可能会去过同一个地点,因此同一个地名可能会有多条重复记录。 所以如果使用这样的查询,会导致IN里...

从相似度算法谈起 - Effective similarity search in PostgreSQL

5 minute read

背景 相似度分析是一个非常普遍的需求,例如根据用户提供的线索,从一堆文本数据、图片数据、视频数据中筛选一段与用户的描述相近的。 我之前写过一系列的文章来介绍,文本、图片相似度搜索的技术和使用场景。 《PostgreSQL 在视频、图片去重,图像搜索业务中的应用》 《弱水三千,只取一瓢,当图像搜索遇见Post...

一场IT民工 与 人贩子 之间的战争 - 只要人人都献出一点爱

1 minute read

背景 快过年啦,提防人贩子,小孩要带好。 有两部片子《失孤》、《亲爱的》拍得触目惊心。 很多家庭耗尽时间和金钱,找了很多年还是没有找到,最终选择了放弃。 社会中依旧还有很多爸爸妈妈还没有找到丢失的孩子,除了严打罪犯;作为IT人,我们能做什么吗 ? 为什么人贩子猖獗?如何才能让人贩子无处遁形? 这...

Linux page allocation failure 的问题处理 - lowmem_reserve_ratio

6 minute read

背景 Linux把物理内存划分为三个层次来管理:存储节点(Node)、管理区(Zone)和页面(Page)。 每一个Node,系统又将其分为多个Zone,x86架构下,node被分为ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM,而64位x86架构下有ZONE_DMA、ZONE_DMA32、...

流计算风云再起 - PostgreSQL携PipelineDB力挺IoT

6 minute read

背景 pipelinedb是基于PostgreSQL的一个流式计算数据库,纯C代码,效率极高(32c机器,单机日处理流水达到了250.56亿条)。同时它具备了PostgreSQL强大的功能基础,正在掀起一场流计算数据库制霸的腥风血雨。 在物联网(IoT)有非常广泛的应用场景,越来越多的用户开始从其他的流计算平台...

Oracle log file parallel write 等待事件分析 - PostgreSQL的WAL异曲同工

6 minute read

背景 数据库的可靠性是关系数据库的命脉之一,为了保证数据库的可靠性,重做日志是非常关键的技术,消除随机写,确保事务成功提交前,事务产生的日志都已经落盘。 因为每个变更产生的REDO都要落盘,所以REDO WRITE在某些情况下也很容易成为瓶颈,REDO WRITE也产生了很多优化技术。 Oracle log ...

分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱

22 minute read

背景 随着移动互联网的发展,数据爆炸性增长,企业对数据产生价值的渴望越来越多。 比如很多APP中会埋点(已经不是什么秘密),以此收集用户的行为数据,用户的位置变化,上了什么网站,浏览了哪些网页,和什么人聊天。 又比如汽车类的应用,汽车的轨迹,油耗,停留的时间,最喜欢去的商圈等。 金融方面,用户的付费行为,和...

PostgreSQL 10.0 preview 功能增强 - 内置分区表

13 minute read

背景 PostgreSQL 和它的LOGO大象一样,给人非常强大的安全感。 就拿它的Feature来说,一个大的feature要打磨很多年才能正式的合并到master分支。 比如并行计算的特性,从9.4就开始准备,加入了work process和dynamic shared memory的功能,奠定了多进程并...

金融风控、公安刑侦、社会关系、人脉分析等需求分析与数据库实现 - PostgreSQL图数据库场景应用

21 minute read

背景 人类是群居动物,随着人口的增长,联络方式越来越无界化,人与人,人与事件,人与时间之间形成了一张巨大的关系网络。 有许多场景就是基于这张巨大的关系网络的,比如。 1. 猎头挖人 作为IT人士或者猎头、HR,对Linkedin一定不陌生,领英网实际上就是一个维护人际关系的网站。 通过搜索你的一度人脉...

官人要杯咖啡吗? - PostgreSQL实时监测PLAN tree的执行进度 - pg_query_state

24 minute read

背景 当我们在数据库中执行一些比较大的查询,或者执行比较复杂的函数时,如果要知道执行到哪里了,预计还要多久。 怎么办呢? 有方法得到吗?当然有。 目前PostgreSQL支持的是传统的SQL执行方法,将(nonutility)语句parser后,根据parser tree生成plan tree, 然后根据pl...

PostgreSQL 从源码找出哪些操作需要超级用户权限

7 minute read

背景 在数据库中哪些操作需要超级用户的权限才能执行? 这个问题翻文档可能翻不全面,或者是已经比较难以完成的任务。 但是从源码里面是比较好找出这个答案的。 权限 例如 postgres=# select * from pg_authid; rolname | rolsuper | ro...

实时数据交换平台 - BottledWater-pg with confluent

20 minute read

背景 想必大家都在图书馆借过书,小时候有好看的书也会在小伙伴之间传阅。 借书和数据泵有点类似,一份数据通过数据泵实时的分享给订阅者。 例如在IoT的场景中,有流式分析的需求,也有存储历史数据的需求,同时还有数据挖掘的需求,搜索引擎可能也需要同一份数据,还有一些业务可能也要用到同一份数据。 但是如果把数据统统...

PostgreSQL 按拼音排序 - convert to GBK/EUC_CN coding

7 minute read

背景 国内的应用,在文本排序上基本都是按照拼音来进行排序的。 在不同的字符集中,汉字的编码可能不一样,比如UTF8和GBK,其中GBK是按拼音的顺序进行编码的,而UTF8则不是。 所以如果你的数据库使用了UTF8编码,对中文字段进行排序时,可能得到的并不是按拼音排序的结果。 在PostgreSQL中,中文按...

用PostgreSQL描绘人生的高潮、尿点、低谷 - 窗口/帧 or 斜率/导数/曲率/微积分?

19 minute read

背景 人生就像一场戏,有高潮,有尿点,有低谷。如果用曲线来描述漫漫人生路的话,怎么找出高潮、尿点、低谷呢? 其实类似的场景还有很多,比如来自传感器(比如人身上可以探测的指标就有很多)的监控数据;服务器的监控数据;温度,湿度的变化数据;等等,都可以数字化,用曲线来表示。 找高潮、尿点、低谷有什么好的方法吗? ...

用PostgreSQL找回618秒逝去的青春 - 递归收敛优化

4 minute read

背景 有一个这样的场景,一张小表A,里面存储了一些ID,大约几百个。 (比如说巡逻车辆ID,环卫车辆的ID,公交车,微公交的ID)。 另外有一张日志表B,每条记录中的ID是来自前面那张小表的,但不是每个ID都出现在这张日志表中,比如说一天可能只有几十个ID会出现在这个日志表的当天的数据中。 (比如车辆的行车...

PostgreSQL 源码性能诊断(perf profiling)指南 - 珍藏级

13 minute read

背景 数据库的性能优化是一个非常经典的话题,数据库的优化手段以及优化的角度也各不相同。 例如,可以从OS内核、网络、块设备、编译器、文件系统、SQL、数据库参数、业务逻辑、源码等各个方面去进行优化。 但是如果在优化前了解瓶颈在什么地方,可以向打鼹鼠一样,先打大的,起到事半功倍的效果。 本文将针对Linux平...

时序数据合并场景加速分析和实现 - 复合索引,窗口分组查询加速,变态递归加速

5 minute read

背景 在很多场景中,都会有数据合并的需求。 例如记录了表的变更明细(insert,update,delete),需要合并明细,从明细中快速取到每个PK的最新值。 又比如有很多传感器,不断的在上报数据,要快速的取出每个传感器的最新状态。 对于这种需求,可以使用窗口查询,但是如何加速,如何快速的取出批量数据呢?...

Linux 性能诊断 perf使用指南

37 minute read

背景 Linux在服务端已占据非常大的比例,很多业务很多服务都跑在Linux上面。 软件运行在Linux下,软件本身、以及Linux系统的性能诊断也成为热门的话题。 例如,你要如何回答这些问题 Why is the kernel on-CPU so much? What code-paths? W...

PostgreSQL 在视频、图片去重,图像搜索业务中的应用

1 minute read

背景 图像处理的业务场景比较多,例如 图像搜索、视频去重、人脸识别、美图、图片去重 等。 比如,视频去重,一些用户上传了较多的视频,同一部电影可能有不同的版本,分辨率不一样,音轨不一样,压缩比不一样。这种情况会导致服务端重复存储大量的视频。 又比如甄别黄色视频或黄色图片,鉴黄师的职业要消失了。 有什么方法可...

PostgreSQL update returning NEW OLD column value 在对账 购票 防纂改 原子操作中的妙用

1 minute read

背景 在数据库中更新记录时,有时为了对账,或者防纂改的目的,需要在更新后立即返回更新前和更新后的值。 例如以set bit为例,假设使用BIT串作为火车的每个位置,每个BIT代表一张票,0表示未售卖,1表示已售卖。 购票时,使用set bit=1的操作,为了确保不出现重复售票的问题,必须确保被set的valu...

PostgreSQL 利用编译器extension 支持int128,提升聚合性能

3 minute read

背景 PostgreSQL 9.4以及以前的版本,在INT,INT2,INT8的聚合计算中,为了保证数据不会溢出,中间结果使用numeric来存储。 numeric是PostgreSQL自己实现的一种数值类型,可以存储非常大的数值(估计是做科学计算的需求),但是牺牲了一定的性能。 为了提高聚合,特别是大数据量...

PostgreSQL 与 12306 抢火车票的思考

7 minute read

背景 马上春节了,又到了火车票的销售旺季,一票难求的问题依旧存在吗? 还记得10年前春节前买火车票得在放票前1天搬个小板凳去排队,对于热门路线,排一个晚上都有可能买不到票。 随着互联网的发展,几年前建设了12306网上购票系统,可以从电脑上买票,但是不要以为在电脑上就能买到票。 我记得12306刚推出时,经...

门禁广告销售系统需求剖析 与 PostgreSQL数据库实现

4 minute read

背景 上班打卡是一件很常见的事情,就像小时候的大宝广告,大宝天天见。 对于这种每天都要见的事物,也是广告主追逐的地盘,就好像电梯广告一样,门禁广告也悄然流行起来。 小小的门禁机,每天活跃的时间为上下班高峰,可能也就2小时左右的时间,通常广告不易过长,往往是很简短的广告,也不易放太多广告在门禁内,一般十几个已经...

PostgreSQL AWR报告(for 阿里云ApsaraDB PgSQL)

4 minute read

背景 熟悉Oracle的童鞋一定对AWR不陌生,通常要分析一个数据库在某个时间段的性能,可以从数据库的动态视图等统计信息记录中生成一份该时段的统计分析报告。 里面包含了常见的等待事件分析,TOP SQL, TOP event等。 PostgreSQL是一个功能和Oracle几乎可以媲美的开源产品,分析报告的工...

PostgreSQL 函数调试、诊断、优化 & auto_explain

4 minute read

背景 PostgreSQL的服务端编程能力比较强,不仅支持像java, R, python这种流行的编程语言,另外还内置了一个与Oracle plsql功能几乎一致的plpgsql语言。 对于开发人员来说,有了语言还不够的,调试是非常常见的需求。 所以PostgreSQL的函数语言怎么调试呢,使用pldebu...

PostgreSQL on Linux 最佳部署手册 - 珍藏级

5 minute read

背景 数据库的安装一直以来都挺复杂的,特别是Oracle,现在身边都还有安装Oracle数据库赚外快的事情。 PostgreSQL其实安装很简单,但是那仅仅是可用,并不是好用。很多用户使用默认的方法安装好数据库之后,然后测试一通性能,发现性能不行就不用了。 原因不用说,多方面没有优化的结果。 Postgre...

转载 - Linux软中断不均的调优

4 minute read

背景 原文 http://www.aichengxu.com/view/9627015 原文 Rpc程序主要是io bound程序,这里主要针对的是linux的网络的部分性能调优,对于具体的问题具体分析。

转载 - Linux用户态和内核态

less than 1 minute read

背景 原文 http://longmans1985.blog.163.com/blog/static/7060547520109262178736/ 原文 1. 用户态和内核态的概念区别 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序...

转载 - Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity)

2 minute read

背景 原文 http://www.vpsee.com/2010/07/load-balancing-with-irq-smp-affinity/ 原文 硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。...

转载 - Linux用户空间与内核空间数据传递

2 minute read

背景 原文 http://wdqfirst.blog.163.com/blog/static/113347411201182222252954/ 原文 Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换...

转载 - 用户空间与内核空间,进程上下文与中断上下文[总结]

3 minute read

背景 原文 http://www.cnblogs.com/Anker/p/3269106.html 1、前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文。 看着很熟悉,半天又说不出到底是怎么回事,有什么区别。 看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,...

PostgreSQL 数组忽略大小写匹配

less than 1 minute read

背景 一位兄弟的开发需求,要求不区分大小写,匹配数组内的字符串。 如下,这样的匹配。 postgres=# select 'a' = any(array['A','1']); ?column? ---------- f (1 row) 需要将数组内的字符串转换为小写后匹配。 ``` postgre...

聊一聊双十一背后的技术 - 毫秒分词算啥, 试试正则和相似度

11 minute read

双十一背后的技术系列文章 《聊一聊双十一背后的技术 - 物流, 动态路径规划》 《聊一聊双十一背后的技术 - 分词和搜索》 《聊一聊双十一背后的技术 - 强奸式秒杀技术实现》 背景 看刑侦剧经常有看到人物拼图,然后到图库搜索的,以前可能靠的是人肉,今天,使用PG,可以靠数据库的图形近似度搜索功能。 《弱水...

聊一聊双十一背后的技术 - 不一样的秒杀技术, 裸秒

4 minute read

双十一背后的技术系列文章 《聊一聊双十一背后的技术 - 物流, 动态路径规划》 《聊一聊双十一背后的技术 - 分词和搜索》 《聊一聊双十一背后的技术 - 不一样的秒杀技术, 裸秒》 背景 秒杀在商品交易中是一个永恒的话题,从双十一,到一票难求,比的仅仅是手快吗? 其实对于交易平台来说,面对的不仅仅是人肉,...

聊一聊双十一背后的技术 - 分词和搜索

9 minute read

背景 2016双十一刚过,大伙还在忙着收快递,我也没有闲着,总结一些双十一背后的数据库技术。 本文将要给大家分享的是 双十一背后的 搜索和分词 相关技术。 我曾经写过一些类似的话题,可以参考如下,有幸帮助不少朋友解决了一些业务场景的问题。 《PostgreSQL 全文检索加速 填补搜索引擎无法满足的功能》 ...

用好PostgreSQL role membership来管理继承组权限

4 minute read

背景 在数据库中,如果你想把A用户创建的对象权限赋予给B用户,或者其他用户。 通常我们会对需要赋权的对象使用grant的语法来赋权。 但是这种方法比较繁琐,因为需要对每个对象,每一组需要的权限进行赋权。 如果你需要整个A用户所有对象的权限,以及它将来创建的对象的所有权限,有没有好的方法呢? 没错,你一定会...

聊一聊双十一背后的技术 - 物流、动态路径规划

4 minute read

背景 每年双十一的交易额都创新高,今年也不例外,双十一几乎成了各种IT系统的大考,物流也不例外。 每次双十一快递几乎都被爆仓,但是随着技术的发展,今年,听说双十一刚过,小伙伴们的包裹都快收到了。 今天,来给大家分享一下物流与背后的数据库技术,当然我讲的还是PostgreSQL, Greenplum, Post...

用静态路由和ip forward打通虚拟机与其他宿主机

1 minute read

背景 最近我在做一些测试,用到了虚拟机环境,如图,有多台物理机,其中有一台物理机安装了几个虚拟机。 物理机之间处于同一网段,可以相互通信。 虚拟机新开了一个网段。 现在的目标是把虚拟机和其他几个物理机的网络打通。 为了不依赖网络层的改动来实现虚拟机和其他物理机网络的打通。 需要用到宿主机的ip fo...

linux 如何利用ISO搭建yum仓库

less than 1 minute read

背景 在使用Linux时,很多包有依赖关系,所以很多LINUX的发行版本都有自己的仓库管理软件,例如suse , debian, ubuntu , centos , rhel. 等等发行版本,各自有各自的软件仓库管理方法。 以CentOS为例,红帽派系的基本上都使用的是yum仓库管理手段。 使用仓库管理可以方...

linux IP 命令使用举例

4 minute read

背景 ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig、route等,使用权限为超级用户。几乎所有的Linux发行版本都支持该命令。 还包括像net namespace的管理,在docker环境中结合veth net设备打通本地和container...

Linux中如何克隆KVM虚拟机

4 minute read

背景 当需要批量部署虚拟机时,通常有几种做法,使用模板重新安装。 或者使用已有的虚拟机克隆。 使用模板安装可以参考kickstart脚本的编写方法。 《install kvm hosts use kickstart in CentOS 6 in text mode》 本文介绍一下在已经安装好的虚拟机上,克...

数据仓库架构的变迁

less than 1 minute read

背景 本文是HashData发表的关于Greenplum, HAWQ的文章,内容很丰富,向作者致敬,收藏。 HashData是原pivotal HAWQ的开发团队出去创业创办的大数据产品公司。 转自 https://segmentfault.com/a/1190000007419222?from=group...

epoll源码分析

6 minute read

背景 本文转自 http://www.cnblogs.com/debian/archive/2012/02/16/2354454.html 原文 当系统启动时,epoll进行初始化: 1 static int __init eventpoll_init(void) 2 { 3 mute...

linux下epoll如何实现高效处理

3 minute read

背景 本文转自 http://www.cnblogs.com/debian/archive/2012/02/16/2354469.html 开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。 大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百...

深层次探讨mutex与semaphore之间的区别

4 minute read

背景 本文依旧和《PostgreSQL 同步流复制锁瓶颈分析》这篇文章有关。 本文主要介绍一下Linux下面信号量(semaphore)和互斥锁(mutex)的区别。 原文地址 http://www.aichengxu.com/view/2456963 原文 看过Linux内核的同学都知道,Linux内核...

network namespace与veth pair

2 minute read

背景 在Linux虚拟化技术中,网络层面,通常除了网桥或虚拟交换机技术外。 还有一个重要的就是namespace和veth pair。 net namespace主要是隔离网络设备本身,例如在Linux 中有多个容器,每个容器对应各自的namespace,我们可以把不同的网络设备指派给不同的容器。 veth...

Linux中的spinlock和mutex

less than 1 minute read

背景 最近在压测PostgreSQL同步流复制时,遇到一个mutex锁的瓶颈问题。 具体见 《PostgreSQL 同步流复制锁瓶颈分析》 PG是以backend process睡眠,然后通过sender唤醒的方式来处理同步等待的问题。 转一篇文章,了解一下spinlock, mutex。 http:/...

在PostgreSQL中实现按拼音、汉字、拼音首字母搜索的例子

1 minute read

背景 PostgreSQL有很多特性是可以提升开发效率,提高生产力的。 在前端页面中,搜索是一个非常常用的功能,例如淘宝首页的搜索。 为了提升用户体验,用户可以按拼音首字母进行搜索,按中文单词搜索,或者按拼音的全部进行搜索。 又比如家里的电视盒子,因为没有实体键盘,按拼音首字母搜索就非常方便。 但是如...

PostgreSQL 并行计算tpc-h测试和优化分析

5 minute read

背景 PostgreSQL 9.6首次推出支持聚合、全表扫描、HASH JOIN、nestloop的并行计算。 https://www.postgresql.org/docs/9.6/static/release-9-6.html Parallel queries (Robert Haas, Amit Kap...

PostgreSQL 多租户

less than 1 minute read

背景 Oracle 12c提出了数据库多租户的概念,即PDBs(私有数据库),因为早期Oracle的设计是以schema为隔离的,schema的隔离不够彻底,原因是通过赋权就很容易获得不同SCHEMA下的数据。 PDB的设计与PostgreSQL的Database概念非常相似,所以PostgreSQL实际上很适...

Linux 内核编程基本功之内核同步与互斥锁mutex

5 minute read

背景 在使用PostgreSQL实现同步流复制时,在主节点发现有大量的mutex,导致了写并发被限制。 本文为转载文章 http://blog.csdn.net/cug_fish_2009/article/details/6126414 Pro-II、内核同步与互斥锁 1、理解互斥锁? 互斥锁的使用也是保持...

PostgreSQL 同步流复制(高并发写入)锁瓶颈分析

47 minute read

背景 PostgreSQL的同步流复制实际上是通过walsender接收到的walreceiver的LSN位点,来唤醒和释放那些需要等待WAL已被备库接收的事务的。 对同步事务来说,用户发起结束事务的请求后,产生的RECORD LSN必须要小于或等于walsender接收到的walreceiver反馈的LSN位...

PostgreSQL 流复制xlog异步send

4 minute read

背景 PostgreSQL的流复制相比大家并不陌生,但是目前PG为了保证主的高度统治地位,一切以主库为准。包括SEND WAL时,也要求主已经FLUSH才能发给备库。 这实际上会导致些许的延迟,当然这个延迟目前来看可以忽略不计,但是随着硬件的发展,将来这个模式可能就会不适应。 那么能不能让主库的WAL rec...

PostgreSQL clang vs gcc 编译

6 minute read

背景 CLANG是一个不错的编译器,本文将介绍一下使用CLANG编译以及它的优化开关,如何编译PostgreSQL,同时对比一下GCC 4.4.6版本的性能。 安装clang 安装clang,需要更高版本的gcc来进行编译。 安装gcc 找一个比较快的镜像下载源码包 https://gcc.gnu.org/...

PostgreSQL Oracle 兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁

4 minute read

背景 PostgreSQL的plpgsql服务端编程语言与Oracle数据库的pl/sql编程语言非常类似,但是对于自治事务一直没有语法层面的支持。 以往如果要支持自治事务,可以使用exception或者使用dblink来实现。 写法有点复杂,如果你想要语法层面的支持,可以试试社区放出的这个补丁,补丁还没有合...

致DBA , 开发者 , 内核开发者 , 架构师 - PostgreSQL 爱好者参考资料

2 minute read

背景 给 DBA、应用开发者、内核开发者、架构师 整理了一些PostgreSQL的相关资料。 一、TO 应用开发者 PPT 1、安装PG集群,PG SQL语言精讲,plpgsql开发语言精讲,PG 客户端、服务端管理,PG 数据库架构,PG 日常维护,PG 分布式使用,PG数据库监控,PG 性能优化。 &l...

PostgreSQL 使用 pgbench 测试 sysbench 相关case - pg_oltp_bench

9 minute read

背景 pgbench是PostgreSQL的性能测试工具,C写的,调用LIBPQ,效率非常高。pgbench也支持自定义测试脚本,支持自定义随机算法,支持自定义脚本的weight设置等等,用途非常广泛。 sysbench是一个比较流行的测试软件框架,可测试内存,CPU,数据库,存储等。测试时调LUA的脚本进行测...

PostgreSQL 透明加密(TDE,FDE) - 块级加密

6 minute read

背景 在数据库应用中,为了提高数据的安全性,可以选择很多中安全加固的方法。 例如, 1. 可以对敏感字段进行加密,可以使用服务端加密,也可以使用数据库端加密,例如pgcrypto加密插件。 服务端加解密相对来说比较安全,因为在数据库端存储的是加密后的数据,只要服务端的秘钥保护好,基本上数据都是安全的。 但...

PostgreSQL 收缩膨胀表或索引 - pg_squeeze or pg_repack

1 minute read

背景 PostgreSQL的表或索引发生膨胀后,用户可以使用vacuum full或rewrite table(如cluster)的方式重建表。 但是vacuum full或者rewrite都需要持有排它锁,会堵塞读操作。 为了减少锁冲突,社区有一个名为pg_reorg或pg_repack的插件,使用了增量的...

PostgreSQL 流行 HA 方案

less than 1 minute read

背景 数据库的HA是一个比较经典的话题,几乎所有的生产环境都会考虑给数据库部署HA。 PostgreSQL 的HA方案也很多,在我的GIT里有两个自定义的HA脚本,有兴趣的童鞋可以参考一下原理。 单个虚拟IP, 自动failover, 手动failback, 需fence设备 双虚拟IP, 自动failov...

PostgreSQL 9.6 sharding based on FDW & pg_pathman

8 minute read

背景 可以阅读以下几篇文章先回顾一下FDW,基于FDW的shared以及高效的分区插件pg_pathman。 《PostgreSQL 9.6 单元化,sharding (based on postgres_fdw) - 内核层支持前传》 《PostgreSQL 9.6 sharding + 单元化 (base...

PostgreSQL 9.5+ 高效分区表实现 - pg_pathman

41 minute read

背景 目前PostgreSQL社区版本的分区表功能比较弱,需要通过继承和触发器或RULE来实现分区表的功能,由于查询和更新涉及约束的检查、插入则涉及触发器或规则重写,导致分区功能性能较差。 商业版本EDB,以及数据仓库Greenplum都有比较好的分区支持。 去年GP开源后,阿里云RDS PostgreSQL...

基于 阿里云 RDS PostgreSQL 打造实时用户画像推荐系统(varbitx)

20 minute read

背景 用户画像在市场营销的应用重建中非常常见,已经不是什么新鲜的东西,比较流行的解决方案是给用户贴标签,根据标签的组合,圈出需要的用户。 通常画像系统会用到宽表,以及分布式的系统。 宽表的作用是存储标签,例如每列代表一个标签。 但实际上这种设计不一定是最优或唯一的设计,本文将以PostgreSQL数据库为基...

PostgreSQL 无缝自增ID的实现 - by advisory lock

3 minute read

背景 一般来说,数据库都会有序列的功能,例如PostgreSQL就支持序列。 序列是指一直增长的值,但是它有一个不好的地方,就是用掉后就不会再有了,因此对于使用者来说,可能会拿到空洞的值。 例如 ``` postgres=# create table seq_test(id serial, info tex...

MySQL 增量同步到 PostgreSQL

less than 1 minute read

背景 接触到越来越多MySQL的数据库迁移到PostgreSQL的需求,整理了一些从MySQL增量迁移到PostgreSQL的开源项目。 有一些是基于binlog的,增量效果比较好,有兴趣的童鞋可以参考一下。 有一些是比较通用的,例如结合Kafka的。 参考 1. https://github.com/xs...

PostgreSQL 全文检索加速 快到没有朋友 - RUM索引接口(潘多拉魔盒)

5 minute read

背景 全文检索,模糊查询在现实的应用中用得非常多,特别是搜索引擎。 通常我们会想到使用搜索引擎来解决,但是需要考虑数据同步到搜索引擎,以及同步延迟,更新,一致性的问题。 并且使用搜索引擎我们还得多维护一个组件。 那么有没有更好的办法呢? 答案是有的,在PostgreSQL中,有内置的全文检索数据类型,以及...

Hacking PostgreSQL

3 minute read

本文为转载文章,原文地址 http://www.cnblogs.com/Yinxinghan/p/Hacking_PostgreSQL.html 背景 这篇文章主要讲解了如何 Hacking PostgreSQL 数据库,总结了一些常用方法。 SQL 注入 大体上和 MySQL 差不多,有一些变量不一样。 ...

PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率

1 minute read

背景 通常在数据库中最小粒度的锁是行锁,当一个事务正在更新某条记录时,另一个事务如果要更新同一条记录(或者申请这一条记录的锁),则必须等待锁释放。 通常持锁的时间需要保持到事务结束,也就是说,如果一个长事务持有了某条记录的锁,其他会话要持有这条记录的锁,可能要等很久。 如果某张表的全表或者大部分记录要被更新的...

PostgreSQL DaaS设计注意 - schema与database的抉择

17 minute read

背景 市面上有一些提供DaaS服务的厂商,例如heroKu,可能有上百万的数据库服务; 又比如提供PaaS平台的服务商,数据库也会有很多,同事这些数据库可能也是模板化的,这些厂商并不一定是为每个客户都新建一个数据库集群来满足数据库的需求。 很有可能是使用数据库或者schema来隔离不同用户的。 1. 例如将...

PostgreSQL 可靠性分析 - 关于redo block原子写

14 minute read

背景 PostgreSQL 可靠性与大多数关系数据库一样,都是通过REDO来保障的。 群里有位童鞋问了一个问题,为什么PostgreSQL的REDO块大小默认是8K的,不是512字节。 这位童鞋提问的理由是,大多数的块设备扇区大小是512字节的,512字节可以保证原子写,而如果REDO的块大于512字节,可能...

PostgreSQL 9.6 内核优化 - sort 性能增强

5 minute read

背景 PostgreSQL 9.6在排序这块做了一些性能增强,前面一篇主要讲了排序算法的变更。 《PostgreSQL 9.6 内核优化 - sort性能增强(batch化quicksort代替replacement selection when work_mem small)》 本文针对另外几个SORT增强...

PostgreSQL md5 对比 MySQL - 秘钥认证

3 minute read

背景 PostgreSQL支持的认证方法很多,例如 20.3.1. Trust Authentication 20.3.2. Password Authentication 20.3.3. GSSAPI Authentication 20.3.4. SSPI Authentication 20.3.5. Ide...

PostgreSQL 9.6 内核优化 - sort性能增强(batch化quicksort代替replacement selection when work_mem small)

24 minute read

背景 排序是比较常见的业务需求,为了降低排序的CPU开销,通常会使用索引来满足排序的需求。 但是并不是所有的QUERY都能使用索引排序,或者说使用索引排序就一定高效。 例如带过滤条件的QUERY,过滤完之后再根据某些字段或表达式排序。这种QUERY的排序不一定能用上索引。 当需要实时排序时,PostgreS...

PostgreSQL 9.6 内核优化之 聚合代码优化OP复用浅析

14 minute read

背景 聚合操作指将分组的数据聚合为一个结果输出。 聚合通常用在统计应用中,例如统计分组的最大值,最小值,记录数,平均值,方差,截距,相关性。 聚合也可能被用于文本分析或者图像分析等,例如最佳相似度,行列变换,聚合为数组或JSON,图像堆叠等。 因此聚合通常需要启动值,行的处理,以及结果的格式转换3个过程。 ...

PostgreSQL 9.6 平滑fsync, write原理浅析

7 minute read

背景 汽车换挡是否平顺,通常取决于档位数,或者换挡技术。 档位数越多,换挡时感觉会约平顺,档位数较少的情况下,换挡可能会有比较明显的顿挫感觉。 数据库也一样,有些时候可能就会出现卡顿的现象,比如尖锐(堆积)的IO需求时。 本文将给大家介绍9.6在fsync, write方面的平顺性改进,减少尖锐的IO需求。...

PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别

4 minute read

背景 对于金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本。 例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本。 另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法。 9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库a...

PostgreSQL 等待事件 及 等待采样统计(pg_wait_sampling)

5 minute read

背景 PostgreSQL 9.6动态视图pg_stat_activity新增了wait_event_type, wait_event的等待事件展示。 当会话处于等待状态时,wait_event与wait_event_type非空,表示会话正在等待的类型。 根据等待信息,可以了解当前会话的状态。 将来也可以...

PostgreSQL 9.6 快照过旧 - 源码浅析

17 minute read

背景 在PostgreSQL 9.6以前,垃圾回收存在的问题。 当vacuum回收垃圾时,遇到垃圾记录的xmax大于数据库中现存的最早未提交事务xmin时,不会对其进行回收。 因此当数据库中存在很久为结束的事务时,可能会导致数据库膨胀。 PostgreSQL 9.6加入了快照过旧的功能,目的是防止过长的...

PostgreSQL 9.6 scale-up高并发增强 VS 9.5

15 minute read

背景 PostgreSQL 在向和纵向的扩展能力在开源数据库中一直处于非常领先的地位,例如今年推出的9.6,内置了sharding的功能,同时在scale-up的能力也有非常明显的提升,特别是在多核与高并发处理这块。 社区有同学在128核的机器上测试tpc-b的select only模式可以达到几百万的qps。...

PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析

10 minute read

背景 PostgreSQL的tuple(即记录)头信息中有两个字段分别为XMIN,XMAX用于标记行产生与变更的事务号,以标示记录的版本号,事务的可见性等。 这个事务号是32BIT的长度,因此PG设计了一个事务存活的最长时间是约20亿,如果超过20亿必须将这个事务置为frozen。 被置为frozen状态的记...

PostgreSQL 9.6 并行计算 在 xfs, ext4 下的表现对比

2 minute read

背景 ext4在红帽5,6的版本中作为主流的文件系统,有非常多的用户群体,也能满足大多数的应用场景需求。 XFS经过几年的发展,从红帽7开始,XFS会成为默认的文件系统。 同时XFS在高并发的场景相比EXT4有较明显的优势,前面我对单机多实例也做过测试,使用EXT4和CGROUP容易遇到IO HANG的问题,...

PostgreSQL 9.6 并行计算 优化器算法浅析 - 以及如何强制并行度

9 minute read

背景 PostgreSQL 9.6引入了多核计算的强大功能,那么它是如何决策并行计算,以及并行度的呢? 与Oracle不同,PostgreSQL 并不需要用户在SQL中使用HINT来启用并行计算,因为优化器会从成本的角度做出选择,是否使用,以及使用的并行度是多大。 优化器选择并行计算的相关参数 Postgre...

PostgreSQL 9.6 引领开源数据库攻克多核并行计算难题

13 minute read

背景 经过多年的酝酿(从支持work process到支持动态fork共享内存,再到内核层面支持并行计算),PostgreSQL 的多核并行计算功能终于在2016年发布的9.6版本中正式上线,为PG的scale up能力再次拔高一个台阶,标志着开源数据库已经攻克了并行计算的难题。 相信有很多小伙伴已经开始测试了...

PostgreSQL 单机多实例on XFS 润滑性测试

3 minute read

背景 前面一篇将EXT4 单机多实例在使用cgroup限制IOPS时,出现了IO HANG, 即使使用了data=writeback问题依旧。 从D状态的进程打印的PSTACK可以看到,问题卡在ext4上面。 详见 《PostgreSQL 9.6 检查点SYNC_FILE_RANGE 在单机多实例下的IO H...

PostgreSQL 前世今生

less than 1 minute read

PIC下载 背景 PostgreSQL是40几年陈的产品,算是关系数据库中的老大哥,但是它依旧保持着飞速的迭代和发展。这是为什么呢?...

PostgreSQL 巧妙的数据采样方法

4 minute read

背景 因为线上数据库较大,通常我们可以通过数据采样来构建测试库。 数据采样除了需要对数据进行均匀的抽取之外,还可能有一种需求是对数据进行加密,例如需要隐藏或加密一些敏感字段的信息。 PostgreSQL 9.5开始支持tablesample的语法,参考如下 https://www.postgresql.or...

PostgreSQL 主机性能测试方法 - 单机单实例

4 minute read

背景 业界有一些通用的数据库性能测试模型,可以用来测试硬件在不同测试模型下的性能表现。 参考 http://www.tpc.org/ https://github.com/oltpbenchmark/oltpbench http://oltpbenchmark.com/ 本文主要以PostgreSQL为例,...

PostgreSQL 主机性能测试方法 - 单机多实例

5 minute read

背景 业界有一些通用的数据库性能测试模型,可以用来测试硬件在不同测试模型下的性能表现。 参考 http://www.tpc.org/ https://github.com/oltpbenchmark/oltpbench http://oltpbenchmark.com/ 本文主要以PostgreSQL为例,...

PostgreSQL pgbench SQL RT 与 事务RT 浅析

2 minute read

背景 使用pgbench测试数据库性能时,在输出的报告中,可以输出事务的平均RT,以及单条SQL的平均RT。 那么这两个有什么分别呢? 每行代表一个线程,被填充了颜色的部分表示从客户端发起SQL到SQL返回的时间窗口,没有填充颜色的部分表示线程的空闲时间。 如何统计事务 平均RT : 执行的事务数/...

Oracle 并行计算 JOIN HINT

2 minute read

背景 Oracle的并行查询在处理JOIN时,可以通过调整优化器的HINT,指定优化器在处理JOIN时表的分布与关联策略。 例如,两张表JOIN时,如果是HASH或者MERGE JOIN,可以使用HASH分片,然后每个并行的计算单元处理一个数据分片,达到提高效率的目的。 又或者可以将某个较小的表进行broad...

PostgreSQL 数据库开发规范

28 minute read

背景 PostgreSQL的功能非常强大,但是要把PostgreSQL用好,开发人员是非常关键的。 下面将针对PostgreSQL数据库原理与特性,输出一份开发规范,希望可以减少大家在使用PostgreSQL数据库过程中遇到的困惑。 目标是将PostgreSQL的功能、性能发挥好,她好我也好。 Postgr...

PostgreSQL Oracle 兼容性之 - 字符编码转换 CONVERT

1 minute read

背景 参考 https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions027.htm Oracle 中,可以将一个字符串从一个编码转换为另一个编码的输出。 convert(string, 目标字符集, 源字符集) 例如 ``` SEL...

PostgreSQL Oracle 兼容性之 - COMPOSE , UNISTR , DECOMPOSE

2 minute read

背景 参考 http://www.th7.cn/db/Oracle/2011-06-30/8490.shtml 很多语言,包括英语在内,都使用沉音字符(accented character)。 因为这些字符不属于 ASCII 字符集,所以假如不查看 Unicode 值也不使用 Unicode 编辑器并将其...

PostgreSQL Oracle 兼容性之 - BIT_TO_NUM , BITAND , 比特运算 , 比特与整型互相转换

8 minute read

背景 比特类型转换为整型,整型转换为比特类型,以及整型的比特运算。 在数据分析时被经常使用,例如对多个用0和1表示的标签字段叠加,使用一个整型表示。 又或者将数字表述的标签信息转换为比特位,以获取分散的标签信息。 在Oracle中可以使用bit_to_num将多个0,1转换为number,使用bitand对...

PostgreSQL Oracle 兼容性之 - ASCIISTR

2 minute read

背景 在Oracle中有一个函数asciistr,可以将非ASCII字符转换成UTF-16编码的字符,因此转换后的字符串可以存储在只支持ASCII编码的数据库中。 ASCIISTR takes as its argument a string, or an expression that resolves to...

PostgreSQL failed IANA tz database BUG修复

less than 1 minute read

背景 PostgreSQL 可以使用IANA发布的时区数据库,但是由于IANA发布的数据库中,有些定义的时区别名并没有对应的时区。 从而导致PG在解析对应别名时会报错。 # select '2016-09-02 08:00:00 NOVST'::timestamptz; ERROR: time zone a...

PostgreSQL Oracle 兼容性之 - TZ_OFFSET

less than 1 minute read

背景 Oracle提供的TZ_OFFSET函数,目的是将时区别名转换为以UTC为标准的OFFSET。 例如 ``` SELECT TZ_OFFSET(‘US/Eastern’) FROM DUAL;

PostgreSQL Oracle 兼容性之 - NEW_TIME , SYS_EXTRACT_UTC

2 minute read

背景 如何将一个时区的本地时间,转换为另一个时区的本地时间? 在Oracle中可以使用NEW_TIME这个函数实现这个目的。 NEW_TIME(ts, tz1, tz2) NEW_TIME returns the date and time in time zone timezone2 when date ...

PostgreSQL Oracle 兼容性之 - REMAINDER

1 minute read

背景 在PostgreSQL数据库中常用的取余函数为mod,Oracle另外还提供了一个取余的函数remainder,它与mod的区别在于,mod取余时用了floor处理,而remainder使用round处理。 算法 1. mod ``` PG & Oracle mod mod(x,y) = x - ...

bcache / 如何使用bcache构建LVM,软RAID / 如何优化bcache

15 minute read

bcache 背景知识 本小章节转载自 http://www.sysnote.org/2014/06/20/bcache-analysis/ 1. 简介 bcache是linux内核块设备层cache,类似于flashcache使用ssd作为hdd的缓存方案,相比于flashcache,bcache更加灵活,支...

如何在CentOS 6.x x64系统中创建超过16TB的ext4文件系统

less than 1 minute read

背景 在使用Ext4文件系统时,发现无法创建超过16TB的文件系统。 例如我的服务器中有多块8T的盘,使用逻辑卷或者软RAID做成较大的块设备,然后使用mkfs.ext4格式化,当LVM或软RAID设备大于16TB时,出现这样的报错 # mkfs.ext4 -b 4096 /dev/md0 mke2fs 1.4...

HAWQ 集群部署 on ECS

21 minute read

背景 之前写过两篇HAWQ on CentOS 6.x, 7.x的单机部署,本文主要描述的是HAWQ on ECS的多机部署。 本文参考以下文章部署,详见如下 http://hdb.docs.pivotal.io/20/ http://www.aboutyun.com/thread-7684-1-1.ht...

facebook linkbench 测试PostgreSQL社交关系图谱场景性能

5 minute read

背景 Linkbench是facebook提供的一款数据库性能测试开源软件,它的思路是围绕社交关系图谱构建一套测试数据,然后在此基础之上对数据进行关系查询,新增关系,断开关系等操作。 Linkbench的介绍可参考 https://www.facebook.com/notes/facebook-engine...

如何从PostgreSQL json中提取数组

4 minute read

背景 在PostgreSQL中使用JSON类型时,除了能存,大家更关心的是JSON中的数据的使用,例如 1. VALUE支持哪些类型, 通过以下方法可以提取JSON最外层的VALUE的数据类型 json_typeof(json) jsonb_typeof(jsonb) 目前支持的类型如下...

如何防止数据库雪崩(泛洪 flood)

less than 1 minute read

背景 在数据库的使用过程中,一些微妙的操作,在特殊的场景中就可能导致雪崩效应。 1. 当数据库中存在未提交事务,并且未提交事务已经持有了某个表的哪怕是最小的锁时,如果此时对这个对象发起DDL操作,这个DDL操作将会堵塞接下来的其他对该对象的任意操作请求,包括读请求。 因为PG的锁等待判断是整个等待队列的冲突判...

Greenplum , HAWQ outer join与motion问题讲解

5 minute read

背景 Greenplum,HAWQ是分布式的数据库,在建表时,我们可以选择分布列,或者选择随机分布。 多个表做等值JOIN时,如果JOIN列为分布列,则不需要进行数据的重分布。 但是,如果使用的是OUTER JOIN,情况就不一样了,你可能会发现多个表进行outer join时,如果JOIN列都是HASH分布...

CentOS 7.x x64 部署 HAWQ

14 minute read

背景 在CentOS 6.x 上不管是源码或二进制部署HAWQ都有点苦逼,原因是6自带的软件版本都比较老,而HAWQ依赖的环境的版本都比较新。 《CentOS 6.x 部署HAWQ》 在7.x上部署HAWQ会轻松许多。 本文简单的讲一下在CentOS 7.x 的单机上使用源码部署HAWQ的过程。

PostgreSQL reload配置的动作反馈与源码分析

2 minute read

背景 PostgreSQL数据库的配置文件中,有一些配置项是支持reload的,但是如果配置写错了,reload时怎么知道呢? 源码分析 reload其实是通过给postmaster进程发SIGHUP信号来实现的。 通过pg_ctl或者kill或者pg_reload_conf()函数都可以发信号。 post...

CentOS 6.x x64 部署HAWQ

15 minute read

背景 HAWQ与Greenplum师出同门,都是来自pivotal的分析型数据库产品,均以PostgreSQL为基础代码。 HAWQ与Greenplum相似之处 1. 强大的SQL兼容性,SQL-92, SQL-99, SQL-2003, OLAP extension 2. ORCA查询优化器 3. MPP架...

PostgreSQL rename 代码修正风波

6 minute read

背景 PostgreSQL的数据目录,包括所有相关的文件,建议的权限是700,owner是启动数据库集群的操作系统用户。 如果权限不对,或者OWNER不对,在打开文件时可能出错,会带来安全隐患,并导致一些不必要的麻烦。 例子 比如PostgreSQL fsync_fname_ext调用,默认会以读写的方式打开...

PostgreSQL CVE-2016-5423 BUG

3 minute read

背景 PostgreSQL 的一个BUG,存在于9.5.3, 9.4.8, 9.3.13, 9.2.17, 9.1.22及以下版本。 在使用嵌套CASE WHEN语句时,如果嵌套子句中有检测条件为空时,会导致判断不准确。 如果内外检测值的类型不同,甚至有可能导致数据库crash。 https://www.p...

PostgreSQL 最佳实践 - pg_rman 数据库恢复示例 与 软件限制解说

8 minute read

背景 pg_rman备份已经讲完了,接下来讲一下数据恢复。 由于pg_rman使用了物理备份,所以恢复时,与普通物理备份的恢复原理是一样的。 需要将数据文件恢复,同时需要提供recovery.conf,在recovery.conf中指定需要恢复到哪个位置,以及如何获取XLOG归档文件等配置。 数据库恢复 p...

PostgreSQL 最佳实践 - pg_rman 以standby为源的备份浅析

4 minute read

背景 为了降低备份对数据库的性能影响,我们在有standby的情况下,可以选择从standby备份PostgreSQL。 pg_rman是一个备份工具,同样支持从standby备份数据库,但是有一些使用的注意事项。 例如需要连接主库,需要能读取归档目录,需要告诉主库和备库的连接地址,需要备库的$PGDATA等...

pg_dump一致性备份以及cache lookup failed错误的原因分析

2 minute read

背景 PostgreSQL逻辑备份,如何保证备份数据的一致性呢,例如备份的同时,数据被纂改或者有新增的数据,如何保证在全库视角,备份出来的数据是在备份开始时看到的一致数据。 一致性逻辑备份分析 可以追溯到1999年的代码,早期PostgreSQL通过serializable隔离级别来保证备份的一致性。 ht...

PostgreSQL 最佳实践 - 块级别增量备份(pg_rman baseon LSN)源码浅析与使用

12 minute read

背景 对于商业数据库来说,备份的功能一般都非常的全面。 比如Oracle,它的备份工具rman是非常强大的,很多年前就已经支持全量、增量、归档的备份模式,支持压缩等。 还支持元数据存储到数据库中,管理也非常的方便,例如保留多少归档,备份集的管理也很方便,例如要恢复到什么时间点,将此前的备份清除等等。 对于开...

Greenplum 最佳实践 - 估值插件hll的使用(以及hll分式聚合函数优化)

3 minute read

背景 在大数据分析中,通常会有一些估值的需求,例如估计某个时间段有多少新增用户,估计某个时间段有多少用户。 常用的估值算法如HyperLogLog,还有一些其他的估值算法。 可以参考 http://www.pipelinedb.com/ 我在几年前写过如何在PostgreSQL中使用HLL,请参考 ...

PostgreSQL延迟hot standby使用问题及源码浅析

1 minute read

背景 在某些场景中,用户可能需要部署延迟的数据库,比如用来应对误操作。 用户可以创建延迟2小时的standby数据库,如果在2小时内发现了误操作,可以直接使用hot standby,查看误操作前的数据,从而进行恢复。 而不需要对数据库进行PITR恢复操作。 当然这个防范左右还有更好的方法,比如使用我前面写的...

PostgreSQL 最佳实践 - 读写分离

12 minute read

背景 一直以来PostgreSQL数据库在scale up和scale out的方向都走得比较靠前,例如 单元化技术 oleg postgrespro的 PostgreSQL cluster,在分布式事务性能提升,选举算法方面的贡献非常大。 https://github.com/postgre...

PostgreSQL 最佳实践 - 水平分库(基于plproxy)

9 minute read

背景 我一直以来都比较推荐plproxy这个PostgreSQL代理软件, 因为它小巧灵活好用, 效率高. 最近朋友邀请我给他们做个分布式的方案, 所以又把plproxy翻出来了. 本文讲一讲在单节点中如何快速的部署plproxy环境. 环境 PostgreSQL 9.3.1 plproxy 2.x...

一个笛卡尔积的update from语句引发的(内存泄露?)问题

14 minute read

场景 PostgreSQL支持多表JOIN的更新操作,但是如果SQL没有写好,可能会导致出现笛卡尔积的情况。 如果是条查询语句,出现笛卡尔积时,没什么问题,大不了就是查询慢一点。 如果是条更新语句,现在看来可能代码中有内存泄露的BUG,已反馈给PG社区。 另外需要注意PostgreSQL不允许自关联的更新,...

PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)单个数据库采用多个zfs卷(如表空间)时如何一致性备份

6 minute read

背景 当我们使用了多个ZFS卷或者文件系统时,如果一个实例的多个部分,如表空间,放在了不同的zfs上,再使用基于ZFS快照的备份时,可能出现多个文件系统不一致的情况。 例如控制文件是新的,但是数据是旧的。 保物理备份的一致性检查 基于文件的物理备份,为了保证备份的一致性,在备份开始时,需要做一个检查点,同时打...

PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)备份集有效性自动校验

2 minute read

背景 前面我写过一篇关于使用ZFS的快照特性和PostgreSQL流复制来完成数据库块级别的增量PITR备份的文章。 达到可控的备份与恢复SLA。 https://yq.aliyun.com/articles/59363 本文将基于这个备份机制, 写一个自动的恢复测试脚本。 (假设快照每天一个, 并且按规...

PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)方案与实战

13 minute read

背景 在实际的生产环境中, 当数据库越来越多, 越来越大. 备份可能会成为比较大的问题, 传统的逻辑备份对于大的数据库不适用(因为备份和还原可能是比较耗时的, 而且也不能回到任意时间点, 还会造成数据库膨胀(长时间repeatable read隔离级别), 好处是可以跨平台恢复, 可选恢复表等). 而基于XL...

PostgreSQL 最佳实践 - 任意时间点恢复源码分析

6 minute read

背景 我们知道PostgreSQL是支持任意时间点恢复的,那么背后的原理是什么? 本文将对PG的时间点恢复进行详细的讲解,帮助用户理解。 本文涉及源码参考PostgreSQL 9.2.2版本. 时间点恢复涉及的参数 我们知道PostgreSQL 支持PITR, 基于时间点的恢复. 通过配置recovery....

PostgreSQL 最佳实践 - 在线增量备份与任意时间点恢复

9 minute read

背景 冷备份, 以及逻辑备份都是某一个时间点的备份, 没有增量的概念. 如果数据库在运行过程中发生故障, 使用逻辑备份只能将数据库还原到备份时刻, 无法恢复到故障发生前的那个时刻. 又或者在使用过程中由于误操作修改或删除了重要数据, 需要还原到误操作前的那个时刻怎么办呢? 使用冷备份加上有效的归档文件可以实...

PostgreSQL 最佳实践 - 冷备份与还原介绍

6 minute read

背景 PostgreSQL 冷备份, 指在数据库关机状态下对数据库的数据文件进行的备份. 这种备份在生产中并不实用, 一般生产环境都需要保证数据库7*24小时不间断运行. 冷备份需要备份的是数据库集群主目录($PGDATA), 表空间目录, 事务日志(pg_xlog)目录. 如果在参数文件中指定了其他目录或...

PostgreSQL 最佳实践 - 在线逻辑备份与恢复介绍

10 minute read

背景 PostgreSQL 逻辑备份, 指在线备份数据库数据, DDL以SQL语句形式输出, 数据则可以以SQL语句或者固定分隔符(row格式)的形式输出. 备份时不影响其他用户对备份对象的DML操作. 本文主要介绍一下PostgreSQL提供的逻辑备份工具pg_dump, pg_dumpall, 以及数据库...

德哥的PostgreSQL私房菜 - 史上最屌PG资料合集

2 minute read

背景 看完并理解这些文章,相信你会和我一样爱上PostgreSQL,并成为一名PostgreSQL的布道者。 资料不断更新中… … 沉稳的外表无法掩饰PG炙热的内心 。 扩展阅读,用心感受PostgreSQL 内核扩展 《找对业务G点, 体验酸爽 - PostgreSQL内核扩展指南》 http...

PostgreSQL 内存表

6 minute read

背景 在某些场景,要求快速的DML,并且对数据可靠性要求不是非常高。 例如游戏的会话信息,传感器上传的最新数据,运算的中间结果,等等。 例如在一个场景中,有非常多的传感器的数据要不断的被更新和查询,可以使用这种方法,每个传感器的ID哈希后分配给对应的会话,这个传感器。 上面的需求,PostgreSQL ...

冗余数据JOIN导致的慢SQL优化一例

2 minute read

背景 CASE 一个这样的查询,每个表都只有几千条数据,但是查询非常慢,几十秒不出结果。 select distinct abc.pro_col1, abc.col3 from t0 p INNER JOIN t1 abc on p.id=abc.par_col2 ...

如何评估QUERY的响应时间?

1 minute read

背景 如何评估QUERY的响应时间? 需要买什么样的硬件能满足为了业务XXX的需求? 这种问题在企业中非常常见,但是估计大多数是拍脑袋的回复,做得更好点,可能是根据业务的benchmark提供的数据,给一个拍脑袋的决定。 本文将针对数据库的QUERY展开,看看应该如何正确的评估QUERY的响应时间。 从执...

PostgreSQL 文本数据分析实践之 - 相似度分析

2 minute read

背景 在日常的生活中,我们可能会经常需要一些像相近、相仿、距离接近、性格接近等等类似这样的需求,对数据进行筛选。 这些需求PostgreSQL居然都支持,是不是很变态呢。 变态的例子 这些场景都支持索引排序和检索,否则怎么叫变态呢。 按长相相似度排序 比如最近的王宝强和马蓉的事件,估计很多人会拿宋喆的照片进...

PostgreSQL 9.6 并行计算 优化器算法浅析

10 minute read

背景 之前写过几篇 PostgreSQL 并行计算的文章,文中并没有仔细描述PostgreSQL是如何决策并行计算,以及并行度的。 开源数据库PostgreSQL攻克并行计算难题 https://yq.aliyun.com/articles/44655 PostgreSQL 并行计算 在 xf...

PostgreSQL 多路并行 xlog 设计

less than 1 minute read

背景 本文截取自《多核处理器下事务型数据库性能优化技术综述》 http://www.cnki.com.cn/Article/CJFDTotal-JSJX201509012.htm 数据库的redo记录了事务的重做信息,它最重要的功能之一是用来恢复数据库,例如当数据库crash后,需要从数据库的一致检查点开始,...

PostgreSQL雕虫小技,分组TOP性能提升44倍

3 minute read

背景 按分组取出TOP值,是非常常见的业务需求。 比如提取每位歌手的下载量TOP 10的曲目、提取每个城市纳税前10的人或企业。 传统方法 传统的方法是使用窗口查询,PostgreSQL是支持窗口查询的。 例子 测试表和测试数据,生成10000个分组,1000万条记录。 postgres=# crea...

PostgreSQL源码分析 备库查询冲突 - User was holding shared buffer pin for too long

3 minute read

背景 PostgreSQL 的基于流复制的物理备库是基于redo的物理块复制备库,允许开放只读的功能,但是需要注意,由于主库可能不断的产生redo,这些redo可能会与备库的QUERY产生冲突。 什么情况下query会堵塞、或与恢复冲突? 当以下操作产生的REDO被复制到备库,并且备库准备拿这些REDO来恢复时...

Greenplum 最佳实践 - 行存与列存的选择以及转换方法

2 minute read

背景 数据在数据库中的存储形式多种多样,比较常见的如 1. PostgreSQL的堆表,以行的形式存储,(当变成字段压缩后的长度超过数据块的四分之一时,会以TOAST的形式存储到TOAST表)。 2. MySQL innodb则是以b+tree形式存储的。 3. 在数据仓库产品中,如Greenplum,支持...

使用pg_resetxlog修复PostgreSQL控制文件的方法

13 minute read

背景 PostgreSQL 控制文件在$PGDATA/global目录下名为pg_control. 控制文件中记录了以下三部分信息 : 1. initdb时生成的静态信息 : pg_control version number: 922 Catalog version nu...

异版本pg_resetxlog后导致的控制文件差异问题处理

6 minute read

背景 数据库的redo日志损坏时,或者控制文件损坏时,可能导致数据库无法启动。 如果存放pg_xlog或者pg_control文件的块设备遇到问题,可能引发这种情况。 遇到xlog或者控制文件损坏的时候,怎么处理呢? 数据库正常关闭时会写控制文件,redo是在数据库crash后需要用来恢复数据库的,如果数据...

旋转门数据压缩算法在PostgreSQL中的实现 - 流式压缩在物联网、监控、传感器等场景的应用

4 minute read

背景 在物联网、监控、传感器、金融等应用领域,数据在时间维度上流式的产生,而且数据量非常庞大。 例如我们经常看到的性能监控视图,就是很多点在时间维度上描绘的曲线。 又比如金融行业的走势数据等等。 我们想象一下,如果每个传感器或指标每100毫秒产生1个点,一天就是864000个点。 而传感器或指标是非常...

为什么cgroup blkio不能限制分区

1 minute read

背景 在使用cgroup blkio子系统限制块设备的IOPS时,有没有遇到过这样的错误? #echo "8:1 10000" >./blkio.throttle.write_iops_device bash: echo: write error: No such device 当限制的块设...

Understanding memory

50 minute read

背景 原文 http://careers.directi.com/display/tu/Understanding+and+optimizing+Memory+utilization Understanding page frames and pages Memory in Linux is organi...

未对齐(alignment)造成SSD 写放大一例

5 minute read

背景 SSD的存储组织,决定了它在写入操作时,是以固定的单元进行写入的,所以在使用SSD时,务必要进行对齐操作。 不对齐的后果很严重,不仅仅使得性能下降,还会带来写放大。 来看一张图,例如实线分开的是SSD的写入单元,如果建立分区,或者LVM时,没有进行对齐,那么一个IO操作就可能跨SSD的写入单元,从而使得...

Linux 逻辑卷(lvm)管理的两个错误记录

less than 1 minute read

背景 在使用lvm时遇到几个问题记录一下,如你也刚好碰到,可以减少点排错时间。 1. 创建lv时报错,可能是以前这个vg的数据有问题,不过它这里有个提示。 Cannot change VG vgdata01 while PVs are missing. Consider vgreduce --re...

从PostgreSQL支持100万个连接聊起

9 minute read

背景 100万个数据库连接,绝逼疯了,常人怎么会干这种事情。 没错,数据库支持100万个连接意味着什么呢?不能用连接池吗? 除了抱着玩一玩的心态,也能了解到操作系统层的一些知识,何乐不为? 碰壁 根据我前几天写的《如何度量Kernel Resources for PostgreSQL》,我们可以评估得出,如...

PostgreSQL 表达式索引 - 语法注意事项

less than 1 minute read

背景 表达式索引是非常有用的功能之一,但是使用时语法上要注意一下,表达式需要用括号括起来 expression An expression based on one or more columns of the table. The expression usually must be written...

DBA不可不知的操作系统内核参数

19 minute read

背景 操作系统为了适应更多的硬件环境,许多初始的设置值,宽容度都很高。 如果不经调整,这些值可能无法适应HPC,或者硬件稍好些的环境。 无法发挥更好的硬件性能,甚至可能影响某些应用软件的使用,特别是数据库。 数据库关心的OS内核参数 512GB 内存为例 1. 参数 fs.aio-max-nr ...

如何度量Kernel Resources for PostgreSQL

10 minute read

背景 对于操作系统来说,数据库算是比较大型的应用,往往需要耗费大量的系统资源,特别是在内部进程间通信这块的资源。 操作系统默认的配置可能无法满足数据库对资源使用的需求。 那么应该如何根据数据库的需要,设置操作系统相关资源参数呢? PostgreSQL 对系统资源的需求计算 在讲资源分配前,大家可以参考阅读一...

search_path在PostgreSQL函数开发中的注意事项

less than 1 minute read

背景 PostgreSQL 与大多数数据库一样,通过schema,逻辑上划分对象的归属,如图。 用户还可以参考《PostgreSQL 逻辑结构 和 权限体系 介绍》 https://yq.aliyun.com/articles/41210 因为有了schema的概念,在访问数据库中的对象时,我们需要指定...

securecrt克隆会话与sshd 的 MaxSessions

less than 1 minute read

背景 使用securecrt克隆会话时,原有会话连接的session数会自增。 例如 要使用ssh连接,sshd的MaxSessions必须>=1,默认是10。 如果把MaxSessions改成2,那么对同一个ssh连接,只能克隆1个,(克隆出来的ssh连接窗可以再克隆,但是对同一个连接窗只能克隆...

论数据库redo/data存储规划与SSD写倾斜

5 minute read

背景 SSD以其良好的IOPS和读写带宽,正在逐渐取代原来的主流存储,成为企业存储市场的新宠。 在一些对存储IOPS和读写带宽需要较大的重要应用中,例如数据库,SSD的使用也越来越普遍。 但是SSD的寿命和写入量有关,如果没有规划好,可能会拉高故障率和成本。 另一方面,SSD还存在写放大的可能,例如写1字节...

固若金汤 - PostgreSQL pgcrypto加密插件

8 minute read

背景 默认情况下数据都是以明文存储在数据库中的。 如果未使用数据传输层加密手段的话, 数据一旦在传输中被截获的话就很容易泄漏数据。 本文将要介绍的是数据内容的加密。 数据内容的加密可以在数据库服务端进行加解密, 也可以在客户端进行加解密. 在数据库服务端加解密的话, 网络上传输的还是未加密的内容, 所以为...

PostgreSQL 会话级资源隔离探索

less than 1 minute read

背景 如果一个数据库对外提供的服务,或者承载的业务很多时,你首先想到的肯定是拆分数据库。 但是,拆分毕竟是有成本的,而且有时并不是所有的场景都适合拆分来解决。 如果多个业务混合在一起使用一个数据库,就容易造成资源的争抢。 那么不拆分的情况下,控制每个业务或者每个会话的资源使用呢? 如何区分来源应用 要隔离...

弱水三千,只取一瓢,当图像搜索遇见PostgreSQL(Haar wavelet)

1 minute read

背景 图片搜索是继文字搜索后又一个比较常用的搜索引擎。 市面上常见的搜索引擎有谷歌、百度、搜狗等图片搜索引擎。 http://image.baidu.com/ http://images.google.com.hk 例如在搜索引擎提供的接口中上层了一张雪人的图片,搜出来一堆和雪人近似的图片。 图片搜...

PostgreSQL 创建库时如何指定 Collate, Ctype

1 minute read

背景 初始化集群,建库,建表,建索引,sort | compare QUERY时都可以指定COLLATE。 用法参考 https://www.postgresql.org/docs/9.5/static/sql-createtable.html https://www.postgresql.org/docs...

用Valgrind检测PostgreSQL内存泄露

2 minute read

背景 Valgrind简介 Valgrind是一个开源工具集合,其中最有名的是Memcheck可用来检测C,C++程序的内存泄露,判断程序运行是否会crash或者产生不可预知的结果。 Valgrind Memcheck工具的用法 以下内容参考自Valgrind的quick start manual htt...

page fault带来的性能问题

3 minute read

背景 Linux进程如何访问内存 Linux下,进程并不是直接访问物理内存,而是通过内存管理单元(MMU)来访问内存资源。 原因后面会讲到。 为什么需要虚拟内存地址空间 假设某个进程需要4MB的空间,内存假设是1MB的,如果进程直接使用物理地址,这个进程会因为内存不足跑不起来。 既然进程不是直接访问物理内存...

PostgreSQL 如何高效解决 按任意字段分词检索的问题 - case 1

5 minute read

背景 在有些应用场景中,可能会涉及多个字段的匹配。 例如这样的场景,一张表包含了几个字段,分别为歌手,曲目,专辑名称,作曲,歌词, 。。。 用户可能要在所有的字段中以分词的方式匹配刘德华,任意字段匹配即返回TRUE。 传统的做法是每个字段建立分词索引,然后挨个匹配。 这样就导致SQL写法很冗长,而且要使...

PostgreSQL Oracle 兼容性之 - 锁定执行计划(Outline system)

2 minute read

背景 绑定SQL执行计划,大家一定会想到SQL HINT,通过HINT告诉优化器你要用什么访问方法,用什么JOIN方法,JOIN的顺序,驱动表等等。 但是SQL HINT有一定的弊端,它需要修改应用程序中的SQL语句,把SQL加上HINT。 对pg_hint_plan感兴趣的同学,可以参考我写到文档 htt...

mongoDB BI 分析利器 - PostgreSQL FDW (MongoDB Connector for BI)

4 minute read

背景 mongoDB是近几年迅速崛起的一种文档型数据库,广泛应用于对事务无要求,但是要求较好的开发灵活性,扩展弹性的领域,。 随着企业对数据挖掘需求的增加,用户可能会对存储在mongo中的数据有挖掘需求,但是mongoDB的语法较为单一,不能满足挖掘的需求。 PostgreSQL是起源于伯克利大小的一个开源数...

如何加快PostgreSQL结巴分词pg_jieba加载速度

3 minute read

背景 PostgreSQL的全文检索接口是开放API的,所以中文分词的插件也非常多,例如常用的scws分词插件,还有结巴分词的插件。 但是你在使用结巴分词插件的时候,有没有遇到这样的问题。 每个会话,第一次查询会比较慢,接下来的查询就快了。 例如 psql (9.5.3) Type "help" fo...

PostgreSQL 使用递归SQL 找出数据库对象之间的依赖关系

5 minute read

背景 在数据库中对象与对象之间存在一定的依赖关系,例如继承表之间的依赖,视图与基表的依赖,主外键的依赖,序列的依赖等等。 在删除对象时,数据库也会先检测依赖,如果有依赖,会报错,需要使用cascade删除。 另外一方面,如果需要重建表,使用重命名的方式是有一定风险的,例如依赖关系没有迁移,仅仅迁移了表是不够的...

一致性哈希在分布式数据库中的应用探索

less than 1 minute read

背景 本文大部分内容参考自 http://blog.csdn.net/cywosp/article/details/23397179 在分布式数据库中,设计数据分布算法通常需要考虑到几点 平衡性(Balance) 平衡性是指哈希的结果能够尽可能分布到所有的分片节点中去,这样可以使得...

关键时刻HINT出彩 - PG优化器的参数优化、执行计划固化CASE

7 minute read

背景 有过数据库使用经验的童鞋可曾遇到过SQL执行计划不准确,或者SQL执行计划抖动的问题。 PostgreSQL的执行计划与大多数的企业数据库是一样的,都是基于成本优化。 基于成本优化的优化器,在算法靠谱,统计信息准确的前提下,通常得到的执行计划是比较准确的。 那么什么时候执行计划可能不准确呢? ...

如何查看sshd当前配置 (gcore, gdb 的妙用)

7 minute read

背景 Linux sshd没有提供显示当前sshd的配置的接口,所以当我们需要了解它的配置时,怎么办呢? 另外我们还不知道sshd已经加载的配置文件名,这有从何下手呢? 本文将结合openssh的源码,给大家一种取得当前sshd配置的方法。 sshd将要加载哪些配置文件 调用sshd进程,并且通过strac...

Greenplum 大集群应该调整的sshd_config配置

2 minute read

背景 Greenplum是MPP数据库,所以大的集群可能涉及很多的主机以及很多的segments。 Greenplum的很多管理脚本都会涉及ssh的连接,通过SSH进行远程的管理或命令的调用。 因此如果有并发的管理任务,会建立很多的SSH会话。 但是默认情况下Linux的sshd_config配置是比较保守...

SSH服务的几个超时参数 以及 类似DDOS攻击的方法

3 minute read

背景 sshd是Linux的一个常用的网络连接的服务,通常被用来远程连接,管理服务器。 一般我们很少去配置sshd,本文要给大家分享几个sshd的参数,有超时参数,有触发拒绝连接的参数等等。 如果你哪天遇到类似的问题,也行能帮助你找到问题的根源。 sshd 空闲超时参数 man sshd_config ...

阿里云RDS for PostgreSQL用户如何定制数据库参数

4 minute read

背景 为了满足大多数用户的需求,阿里云提供的RDS PG,数据库参数是根据通用性场景设置的。 如果用户不是通用的场景,或者用户有自定义参数的需求怎么办呢? 由于数据库的参数是分级的,层级越高优先级越高,用户可以在高层级设置参数的值,以此来覆盖RDS PG设置的一些参数,达到修改参数值的目的。 Postgre...

阿里云RDS PG/PPAS(Oracle 兼容版) 用户连接规划

less than 1 minute read

背景 PostgreSQL在设计时为DBA考虑了保留连接,通过参数superuser_reserved_connections来控制,也就是说当数据库的最大连接为100时,普通用户最多能连100-superuser_reserved_connections个连接。 剩余的连接是给超级用户保留的,方便DBA连接到...

PostgreSQL 编译选项-g的影响

6 minute read

背景 PostgreSQL 的编译选项之一–enable-debug,用途编译时是给编译器一个flag,告诉编译器产生用于调试的symbols。 但是它会影响性能吗? 对于gcc编译器,支持debug模式与optimizer模式同时开启,所以性能影响比较微小,但是显而易见还是有一定的影响的 (编译器在混用模式...

Greenplum 最佳实践 - 数据分布黄金法则 - 分布列与分区的选择

6 minute read

背景 阿里云ApsaraDB for Greenplum公测以来,已经收到好多用户的公测申请。 要使用Greenplum,登陆到数据库后第一件事当然是建表,然后倒入数据开测。 大部分用户以前是使用MySQL的,并没有接触过Greenplum,语法需要适应一下。 例如MySQL中的建表语句 DROP TAB...

阿里云ApsaraDB RDS用户 - OLAP最佳实践

less than 1 minute read

背景 随着大数据分析型产品越来越丰富、细化,用户可能会看得眼花缭乱,如果对产品没有深度的理解,选错了岂不是劳民伤财? 本文将给大家分析一下RDS用户应该如何选择适合自己的大数据的分析产品,以及最佳实践方案。 用户环境分析 以最常用的服务举例,通常云用户会购买的产品如下 ECS,虚拟机 ...

Greenplum 资源隔离的原理与源码分析

6 minute read

背景 Greenplum是一个MPP的数据仓库系统,最大的优点是水平扩展,并且一个QUERY就能将硬件资源的能力发挥到极致。 但这也是被一些用户诟病的一点,因为一个的QUERY就可能占光所有的硬件资源,所以并发一多的话,query相互之间的资源争抢就比较严重。 Greenplum资源隔离的手段 Greenpl...

PostgreSQL 索引扫描offset内核优化 - case

4 minute read

背景 最近写了好几篇与offset有关的文章,上一篇是解offset质变的问题。 https://yq.aliyun.com/articles/57730 这一篇要解的是offset偏移量越大,越慢的问题。 offset偏移量很大的情况下,即使走的是索引(没有使用额外的sort),也会很慢,这是为什么呢?...

Greenplum ORCA 优化器的编译安装与使用

3 minute read

背景 ORCA 是PostgreSQL的下一代优化器,在QUERY的优化上比自带的优化器有长足的进步。 https://github.com/greenplum-db/gporca 安装ORCA cmake wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.g...

Greenplum 最佳实践 - 三张图读懂OLAP数据库在企业的正确使用姿势

less than 1 minute read

背景 很多使用数据仓库的朋友可能都有过这样的困惑,为什么数据仓库的资源经常会出现不可控,或者抢用的情况,严重的甚至影响正常的作业任务,导致不能按时输出报表或者分析结果。 这里的原因较多,最主要的原因可能还是使用姿势不对,MPP是用极资源的产品,一伙人在抢资源当然跑不好。你想想一个跑道能让多架飞机同时起飞或降落吗...

PostgreSQL 数据访问 offset 的质变 case

3 minute read

背景 offset limit是一个多么常见的需求啊,但是你知道offset的数据可能隐藏着质变吗? 如图 node有30W条数据,其中前100条是满足条件的,然后100条到20W条都是不满足条件的。 所以offset 10 limit 10非常的快。 但是offset 100 limit 10,就要...

PostgreSQL 老湿机图解平安科技遇到的垃圾回收坑

14 minute read

背景 近日收到 平安科技 海安童鞋 那里反馈的一个问题,在生产环境使用PostgreSQL的过程中,遇到的一个有点”不可思议”的问题。 一张经常被更新的表,通过主键查询这张表的记录时,发现需要扫描异常多的数据块。 本文将为你详细剖析这个问题,同时给出规避的方法,以及内核改造的方法。 文中还涉及到索引的结构解...

如何防止远程程序与RDS PG连接中断

12 minute read

背景 偶尔有用户会遇到远程程序连接RDS PG,在不做任何操作一段时间后可能中断。 其实可能是用户和RDS PG之间,某些网络设备设置了会话空闲超时,会主动中断会话。 那么有什么方法能解决这个问题呢? 运维的同学可能有这方面的经验,例如使用securecrt或者其他终端连接服务器时,可以设置这些管理工具的n...

PostgreSQL PL/Perl 钩子安全性分析

5 minute read

背景 plperl 是PostgreSQL支持的函数语言之一。 在使用plperl时,可以使用plperl提供的钩子功能,满足一些特殊场景的需求。 钩子分2种,一种是加载plperl.so库时的钩子,一种是加载perl语言解释器时的钩子。 钩子的使用有安全问题吗? 钩子用法介绍 加载plperl.so库时...

PostgreSQL Oracle 兼容性之 - PL/SQL record, table类型定义

1 minute read

背景 Oracle PL/SQL是非常强大的一门SQL编程语言,许多Oracle用户也使用它来处理一些要求延迟低且数据一致性或可靠性要求很高的业务逻辑。 PostgreSQL也有一门非常高级的内置SQL编程语言,plpgsql。与Oracle PL/SQL语法极其类似,但是还是有一些不一样的地方。 (PS:除...

连接 0.0.0.0/32 发生了什么

2 minute read

背景 根据RFC 3330, 1700 的描述, 0.0.0.0/32 可以用作当前网络的源地址。 0.0.0.0/8 - Addresses in this block refer to source hosts on "this" network. Address 0.0.0.0/32 may be...

聊一聊双十一背后的技术 - 物流, 动态路径规划

4 minute read

背景 双十一背后的技术系列文章 《聊一聊双十一背后的技术 - 分词和搜索》 每年双十一的交易额都创新高,今年也不例外,双十一几乎成了各种IT系统的大考,物流也不例外。 每次双十一快递几乎都被爆仓,但是随着技术的发展,今年,听说双十一刚过,小伙伴们的包裹差不多都收到了,今年的快递效率怎么如此之高呢? 今天,来...

PostgreSQL relcache在长连接应用中的内存霸占坑

3 minute read

背景 阿里巴巴内部的某业务在使用阿里云RDS PG时,业务线细心的DBA发现,一些长连接占据了大量的内存没有释放。后来找到了复现的方法。使用场景有些极端。 有阿里巴巴内部业务这样的老湿机陪伴的RDS PG,是很靠谱的。 PostgreSQL 缓存 除了常见的执行计划缓存、数据缓存,PostgreSQL为了提高...

PostgreSQL 内核扩展之 - 管理十亿级3D扫描数据(基于Lidar产生的point cloud数据)

7 minute read

背景 背景知识 还记得成龙演的那部《十二生肖》里用3D扫描和打印技术复制的生肖吗? 3D打印是近几年兴起的一种技术,除了存储 物体表面的位置信息,还有颜色,密度等信息 。 而3D扫描其实在军用领域很早以前就有了。 如果使用普通的数据库来存储,得把这些属性拆开来存。 而在PostgreSQL中,你完全不...

找对业务G点, 体验酸爽 - PostgreSQL内核扩展指南

1 minute read

背景 通用数据库就像带装修的房子一样,如果按数据库的功能划分,可以分为豪华装修、精装、简装。 PostgreSQL从SQL兼容性、功能、性能、稳定性等方面综合评价的话,绝对算得上豪华装修级别的,用户拎包入住就可以。 不过通用的毕竟是通用的,如果G点不对的话,再豪华的装修你也爽不起来,这是很多通用数据库的弊病,...

为什么用 PostgreSQL 绑定变量 没有 Oracle pin S 等待问题

1 minute read

背景 早上看到盖国强老师在朋友圈里分享了一篇关于软解析带来的Pin S等待的问题。 有感而发,跟大家聊一聊为什么PostgreSQL不存在这个问题。 Oracle 在Oracle中多个会话高并发的执行同一条SQL,如果使用了绑定变量的话,会产生pin s的等待事件。 原因如下(取自互联网http://www...

PostgreSQL plan cache 源码浅析 - 如何确保不会计划倾斜

3 minute read

背景 早上写了一篇文章《为什么用 PostgreSQL 绑定变量 没有 Oracle pin S 等待问题》,可以看到PostgreSQL为开发人员着想的,设计得非常人性化。 https://yq.aliyun.com/articles/55698 同时也收到了一些朋友发来的问题,有朋友问我PostgreSQ...

PostgreSQL 同步流复制原理和代码浅析

4 minute read

背景 数据库ACID中的持久化如何实现 数据库ACID里面的D,持久化。 指的是对于用户来说提交的事务,数据是可靠的,即使数据库crash了,在硬件完好的情况下,也能恢复回来。 PostgreSQL是怎么做到的呢,看一幅图,画得比较丑,凑合看吧。 假设一个事务,对数据库做了一些操作,并且产生了一些脏数据,首...

PostgreSQL merge json的正确姿势

less than 1 minute read

背景 json merge是业务常用的功能,例如网络爬虫,更新合并新爬到的内容。 PostgreSQL 9.5 对JSON的类型进行了非常大的功能增强,例如支持合并,按KEY删除,更新KEY VALUE等。 https://www.postgresql.org/docs/9.5/static/function...

在PostgreSQL中如何生成线性相关的测试数据

less than 1 minute read

背景 生成线性相关的测试数据。 同样可以用到generate_series和随机数。 例子 生成10万条随机数字。 select trunc(10000 + 1000000*random()) id from generate_series(1,100000); 根据刚才那组数据,加减5以内的...

在PostgreSQL中如何生成测试kmean算法的数据

1 minute read

背景 生成Kmeans的测试数据。 例如每10000为界,生成10个种子,每个节点以100内的随机数相加,生成一组测试数据。 postgres=# create table test(id int, rand int); CREATE TABLE postgres=# insert into ...

PostgreSQL Oracle 兼容性之 - connect by

2 minute read

背景 Oracle用户常用的功能之一connect by。 主要针对的是树形查询,例如上下级关系,家族图谱,分类,等。 用法举例 创建示例表: CREATE TABLE TBL_TEST ( ID NUMBER, NAME VARCHAR2(100 BYTE), PID NU...

Linux cgroup - cpu与cpuset子系统讲解

3 minute read

背景 Linux cgroup - cpu与cpuset子系统讲解 Linux cgroup 有两个子系统支持CPU隔离。 一个是cpu子系统,另一个是cpuset子系统。 cpu子系统根据进程设置的调度属性,选择对应的CPU资源调度方法 1. 完全公平调度 Completely Fair Scheduler...

PostgreSQL的天气预报 - 如何预测Freeze IO风暴

2 minute read

背景 还记得我写的这篇文档吗? 《PostgreSQL 大表自动 freeze 优化思路》 https://yq.aliyun.com/articles/50411 文章主要针对如何优化大表的freeze调度来减少IO风暴的问题,请注意只是减少,不是避免。 作为一名有追求的PGer,要时刻保持警惕,生于忧患...

Linux cgroup资源隔离各个击破之 - io隔离

2 minute read

背景 Linux Cgroup blkio子系统的用法. blkio子系统支持的两种IO隔离策略 1. (Completely Fair Queuing 完全公平队列)cfq io调度策略,支持按权重分配IO处理的时间片,从而达到IO在各资源组直接的调度和限制的目的,权重取值范围100-1000。 通过以下两...

B-Tree和B+Tree

1 minute read

背景 本文介绍一下索引结构b-tree, b+tree. 部分内容转载自互联网 https://en.wikipedia.org/wiki/B-tree https://en.wikipedia.org/wiki/B%2B_tree B-Tree 为了描述B-Tree,首先定义一条数据记录为一个二元组[k...

从尿检取中段谈数据库压测

less than 1 minute read

背景 想必大家都参加过一年一次的体检,在进行尿液体检的时候,医生会告诉你要留中段尿!要留中段尿!要留中段尿!重要的事情说三遍。 为什么尿液化验要取中段尿呢? 因为前段尿和后段尿容易被污染,所以在进行尿常规和尿培养检查时都建议留取中段尿。 我们在做数据库压测时,也会遇到类似的情况,比如一个持续数天的TPCC压...

Linux中进程内存RSS与cgroup内存的RSS统计 - 差异

5 minute read

背景 转载一篇关于进程内存计算和CGROUP内存计算差异的文章 http://hustcat.github.io/memory-usage-in-process-and-cgroup/ 在Linux内核,对于进程的内存使用与Cgroup的内存使用统计有一些相同和不同的地方。 进程的内存统计 一般来说,业务...

精确度量Linux下进程占用多少内存的方法

7 minute read

背景 在Linux中,要了解进程的信息,莫过于从 proc 文件系统中入手去看。 proc的详细介绍,可以参考内核文档的解读,里面有很多内容 yum install -y kernel-doc cat /usr/share/doc/kernel-doc-3.10.0/Documentation/files...

PostgreSQL on ECS 横向版本TPCB性能测试

5 minute read

背景 本文对比的是PostgreSQL 9.4, 9.5, 9.6, 以及某基于9.4的国产数据库在ECS上的性能。 硬件环境和搭配 Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz 32核 128G 内存 500G 高效本地SSD , 15000 IOPS ...

PostgreSQL ECPG ifdef include等预处理用法

2 minute read

背景 PostgreSQL 社区版本的ecpg在一些预处理的用法上和Oracle的PROC有一些不一样的地方,使用者需要注意。 例如社区版本的ecpg不支持c里面使用的#ifdef或者#ifndef这样的预处理语法,需要用其他写法来替代。 所以你如果使用#ifdef这样的写法在.pgc里面,在使用ecpg编译...

PostgreSQL 函数稳定性与constraint_excluded分区表逻辑推理过滤的CASE

2 minute read

背景 PostgreSQL 函数稳定性我在以前写过一些文章来讲解,而且在PG的优化器中,也有大量的要用函数稳定性来做出优化选择的地方。 http://www.tudou.com/programs/view/p6E3oQEsZv0/ 本文要分享的这个CASE也和函数稳定性有关,当我们在使用分区表时,Postgr...

PostgreSQL ECPG 开发 DEMO

2 minute read

背景 ECPG 是在C中嵌套SQL的一种用法。 写好pgc文件后,需要使用ecpg程序将pgc编程成C文件来使用。 详细的用法请参考 https://www.postgresql.org/docs/9.5/static/ecpg.html ecpg的用法, 以EXEC SQL开头表示后面是SQL写法...

EDB PPAS(Oracle 兼容版)的坑 不兼容PostgreSQL一例

less than 1 minute read

背景 这样一段正常的兼容ORACLE的代码,在使用社区版本的psql连接到PPAS时,执行异常 postgres=> create table about_we (id int, info text); create sequence SEQ_ABOUT_WE_ID; postgres=>...

PostgreSQL 批量权限 管理方法

4 minute read

背景 关于PostgreSQL的逻辑架构和权限体系,可以参考 《PostgreSQL 逻辑结构 和 权限体系 介绍》 本文将给大家介绍一下如何批量管理表,视图,物化视图的权限。 以及如何管理默认权限,批量赋予schema的权限。 对整个schema的对象进行权限管理 PostgreSQL 从9.0开始就提...

深入浅出PostgreSQL B-Tree索引结构

14 minute read

背景 PostgreSQL B-Tree是一种变种(high-concurrency B-tree management algorithm),算法详情请参考 src/backend/access/nbtree/README PostgreSQL 的B-Tree索引页分为几种类别 meta page ...

防止短连接耗尽你的动态TCP端口

less than 1 minute read

背景 用pgbench使用短连接压测一个PostgreSQL数据库(select 1),其他数据库亦如此。 $ vi test.sql select 1; $ export PGPASSWORD=digoal $ pgbench -M simple -C -n -r -P 1 -c 800 -...

ssh Forward X11 实现远程主机GUI在本地展示 (C/S X)

less than 1 minute read

背景 有些时候,有些程序可能需要依赖图形界面才能启动,例如安装Oracle时(其实oracle支持命令行安装),例如需要启动一个图形界面的浏览器如firefox。 作为服务端的系统,通常不会安装臃肿的图形界面。 那么如何在不安装图形界面的的情况下启动图形界面的?听起来很矛盾,但是实际上是可行的。 X Win...

PostgreSQL 最佳实践 - 逻辑增量复制(MySQL <-> PgSQL <-> PgSQL)

1 minute read

背景 alidecode是RDS PG提供的一个逻辑复制插件,使用它,可以将RDS PG通过逻辑复制的方式,把数据同步到线下的PostgreSQL。 还可以将数据从PG同步到其他的数据处理平台,例如Kafka。 同时还支持将MySQL的数据同步到PostgreSQL。(使用SQL管理函数创建逻辑复制的SLOT...

使用alidecode将RDS PG同步到线下, 或者将MySQL同步到PG

1 minute read

背景 alidecode是RDS PG提供的一个逻辑复制插件,使用它,可以将RDS PG通过逻辑复制的方式,把数据同步到线下的PostgreSQL。 同时还支持将MySQL的数据同步到PostgreSQL。 目前alidecode还没有对外开放下载,敬请期待。 下面是使用方法。 准备工作, 提交工单,开...

PostgreSQL 9.6 支持等待事件统计了

5 minute read

背景 PostgreSQL 9.6 统计信息收集进程pgstat,增加了等待事件信息的收集,并且用户可以获得backend的等待事件信息。 目前支持的等待事件分类如下 src/include/pgstat.h /* ---------- * Wait Classes * ---------- ...

[转载]用intel编译器icc编译PostgreSQL

less than 1 minute read

背景 原文 https://yq.aliyun.com/articles/52304 正文 试着换个编译器编译下Postgresql的源码,比想象的要简单的多。 1. 下载9.6的源码 从PG的git仓库下直接down下来 http://git.postgresql.org/gitweb/?p=post...

PostgreSQL 如何实现upsert与新旧数据自动分离

6 minute read

背景 很多业务也行有这样的需求,新的数据会不断的插入,并且可能会有更新。 对于更新的数据,需要记录更新前的记录到历史表。 这个需求有点类似于审计需求,即需要对记录变更前后做审计。 我以前有写过使用hstore和触发器来满足审计需求的文档,有兴趣的同学可以参考 http://blog.163.com/d...

通过ODBC连接PostgreSQL和Greenplum

1 minute read

背景 以Linux平台为例,如何通过ODBC连接PostgreSQL和Greenplum 正文 安装驱动 yum install -y unixODBC.x86_64 yum install -y postgresql-odbc.x86_64 查看驱动配置 cat /etc/odbcin...

PostgreSQL 特性分析 Plan Hint

1 minute read

背景 有一个功能,是社区官方版”永远”不考虑引入的(参见PG TODO,查找”Oracle-style”),即类似Oracle的Plan Hint。 社区开发者的理念是,引入Hint功能,会掩盖优化器本身的问题,导致缺陷不被暴露出来。 但对于我们的使用者来讲,遇到某些SQL的查询计划不好,性能出了问题,使用了...

PostgreSQL 9.6 黑科技 bloom 算法索引,一个索引支撑任意列组合查询

7 minute read

背景 在很多前端页面中,通常会让用户勾选需要的查询条件,而用户往往会在几十个查询条件中,选择任意的组合。 那么难题来了,是不是要为每列创建索引呢,或者有什么好的方法来实现任意列的选择呢? bloom filter PostgreSQL 确实是学术界和工业界的璀璨明珠,它总是喜欢将学术界的一些玩意工业化,这...

PostgreSQL 大表自动 freeze 优化思路

less than 1 minute read

背景 有没有被突发的IO惊到过,有没有见到过大量的autovacuum for prevent wrap。 本文依依解开这些头痛的问题。 1. PostgreSQL 的版本冻结是一个比较蛋疼的事情,为什么要做版本冻结呢? 因为PG的版本号是uint32的,是重复使用的,所以每隔大约20亿个事务后,必须要冻结...

PostgreSQL 标签系统 bit 位运算 查询性能

1 minute read

背景 在标签系统中,通常会有多个属性,每个属性使用一个标签标示,最简单的标签是用0和1来表示,代表true和false。 我们可以把所有的标签转换成比特位,例如系统中一共有200个标签,5000万用户。 那么我们可以通过标签的位运算来圈定特定的人群。 这样就会涉及BIT位的运算。 那么我们来看看Postg...

PostgreSQL 获取拼音首字母的函数 - 摘自互联网

4 minute read

背景 将中文转换为拼音首字母是一个比较常见的需求,比如用遥控搜索电影,对用户来说输入中文肯定很痛苦,而输入拼音首字母会方便很多。 在数据库中,我们可以在输入中文后,通过函数将其转换为拼音首字母 转换方法可以通过编码表得到,比如GBK, EUC_CN的编码是按拼音顺序来的(注意多音字),找到26个字母的边界...

PostgreSQL MySQL 兼容性之 - 读写用户的只读影子用户

2 minute read

背景 在一些企业里面,通常会在数据库中创建一些只读用户,这些只读用户可以查看某些用户的对象,但是不能修改或删除这些对象的数据。 这种用户通常可以给开发人员,运营人员使用,或者数据分析师 等角色的用户使用。 因为他们可能关注的是数据本身,并且为了防止他们误操作修改或删除线上的数据,所以限制他们的用户只有只读的权...

PostgreSQL schema,database owner 的高危注意事项

1 minute read

背景 云用户反映的一个问题,引发一系列安全思考。 以下是创建PostgreSQL schema的语法说明页的一个note: http://www.postgresql.org/docs/9.5/static/sql-createschema.html According to the SQL standar...

使用社区版本pg_dump 逻辑备份导出 EDB PPAS(Oracle 兼容版) 的风险

less than 1 minute read

背景 阿里云的PPAS产品是一个高度兼容Oracle数据库的产品,有些用户在使用的时候,会有将数据逻辑备份到本地,然后倒入到本地库的需求。 但是PPAS既兼容PostgreSQL又兼容Oracle,用户使用PostgreSQL社区自带的pg_dump导出工具也能导出PPAS的数据。 那么问题来了,使用pg_d...

PostgreSQL 逻辑结构 和 权限体系 介绍

8 minute read

背景 本文旨在帮助用户理解PostgreSQL的逻辑结构和权限体系,帮助用户快速的理解和管理数据库的权限。 逻辑结构 最上层是实例,实例中允许创建多个数据库,每个数据库中可以创建多个schema,每个schema下面可以创建多个对象。 对象包括表、物化视图、操作符、索引、视图、序列、函数、… 等等。 在...

PostgreSQL GIN索引limit慢的原因分析

2 minute read

背景 PostgreSQL GIN索引的结构如下图 : 假设这个表有2列,一列存储INT,另一列存储INT数组,最左边的表示记录的行号。 假设对INT数组建立GIN索引,那么GIN索引会记录每个数组element对应的行号,对于行号多的,会存成LIST,然后在索引中指向该list。 好了接下来分析一...

PostgreSQL Oracle 兼容性之 - add_months

1 minute read

背景 PS - 当前PG orafce, GPDB orafunc已修复这个BUG 有网友反映PostgreSQL oraface的add_months在某些日期与Oracle 的add_months不一致。 查了一下Oracle 的开发手册,add_months是这样定义的, 如果当前日期是月末,或者目标月没...

PostgreSQL 备份链路sslcompression压缩 (openssl)

less than 1 minute read

背景 通过链路压缩,提高窄带网络PostgreSQL数据库的备份性能。 需要用到PostgreSQL的SSL支持,用法请参考 《PostgreSQL 如何实现网络压缩传输或加密传输(openssl)》 流复制协议,pg_dump都支持ssl,因为它们都走libpq的调用,libpq是支持ssl的。 htt...

PostgreSQL pg_backup_start_time() CST 时区转换 问题

1 minute read

背景 PostgreSQL的物理备份方法之一 : 在使用pg_start_backup()函数新建备份点后,用户可以开始拷贝PG的数据文件。 postgres=# select pg_start_backup('a'),now(); pg_start_backup | now ...

PostgreSQL csvlog 源码分析

4 minute read

背景 PostgreSQL csvlog日志格式记录了非常多的信息,通过CSV外部表,可以使用SQL对日志进行分析。 文档中的例子: http://www.postgresql.org/docs/9.5/static/runtime-config-logging.html#RUNTIME-CONFIG-LOG...

中文模糊查询性能优化 by PostgreSQL trgm

7 minute read

背景 前模糊,后模糊,前后模糊,正则匹配都属于文本搜索领域常见的需求。 PostgreSQL在文本搜索领域除了全文检索,还有trgm是一般数据库没有的,可能很多人没有听说过。 对于前模糊和后模糊,PG则与其他数据库一样,可以使用btree来加速。后模糊可以使用反转函数的函数索引来加速。 对于前后模糊和正则匹...

论count与offset使用不当的罪名 和 分页的优化

3 minute read

背景 分页是一个非常常见的应用场景,然而恐怕没有多少人想过其优化方法。 确一味的责怪为什么数据库用count(*)计算分页数是如此的慢。 很多开发人员喜欢用count先算一下结果集的大小,然后就知道需要排多少页。 然后再从数据库取出对应的数据,并展示给用户。 问题1 count会扫一遍数据,然后取数据又...

论云数据库编程能力的重要性

2 minute read

背景 云为我们提供了便利,降低了开发和运维的成本。 但是也必须思考一个问题,我们的云组件之间的网络延迟有多大,和以前在局域网是一样的吗? (相比较局域网的服务器和服务器之间) 你可以用各种方法测试验证一下。 以往我们把数据放在数据库,数据库只提供简单的增删改查,大部分的业务逻辑放在应用服务器来完成,一个事...

PostgreSQL 可靠性和一致性 代码分析

6 minute read

背景 PostgreSQL 的数据可靠性是依赖XLOG的实现的,所有的对数据块的变更操作在write到磁盘前,一定是确保这个变更产生的REDO会先写到XLOG,并保证XLOG已落盘。 也就是说流程是这样的: 1. 首先将需要变更的块从文件读入shared buffer 2. 变更shared buffe...

PostgreSQL Oracle 兼容性之 - psql prompt like Oracle SQL*Plus

less than 1 minute read

背景 Oracle的SQL*Plus客户端支持使用promote输入变量值,然后在脚本的其他位置使用该变量值。 例如大量的dbms脚本使用了这个用法, 如statspack输入起始值。 https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12032...

如何分析D状态进程

1 minute read

背景 在使用top查看进程状态时,我们有时候会看到D状态的进程。 w: S -- Process Status The status of the task which can be one of: ’D’ = uninterruptibl...

[转载]postgresql 9.5版本之前实现upsert功能

4 minute read

背景 有没有办法实现在pg9.5版本之前实现upsert功能,整理如下 原文地址 https://yq.aliyun.com/articles/36103 正文 最近有开发人员问,有没有办法实现在pg9.5版本之前实现upsert功能,现整理如下 创建测试表,注意此处先不要主键或唯一约束 create t...

PostgreSQL 网络延迟 瓶颈定量分析

6 minute read

背景 在使用sysbench或者pgbench测试数据库性能时,连unix socket, loop address性能差异是非常大的,特别是非常小的事务,例如基于KEY的查询,或者select 1这样的简单查询。 原因是这种查询在数据库端的处理非常快,从而网络延迟在整个耗时占比上就会比较大。 还有一种场景结...

改写 sysbench oltp.lua 支持PostgreSQL绑定变量

4 minute read

背景 源码在这里 https://github.com/digoal/sysbench_lua/tree/master/lua 已经把oltp.lua改掉了,支持10条SQL,(有需要可以再自行调整)包括 但是由于sysbench不能识别execute语句,所以都算成了other query, 实际上就是这...

如何用 sysbench 并行装载 PostgreSQL 测试数据

2 minute read

背景 本文参考老唐的使用sysbench和sqlldr并行装载Oracle测试数据而成。 http://blog.osdba.net/538.html sysbench原来自带的lua数据装载脚本是使用以下方式串行装载的,速度比较慢(比单条insert快,但是比COPY慢)。 insert into tab...

PostgreSQL prepared statement和simple query的profile及性能差异

3 minute read

背景 prepared statement是非常重要的高并发SQL优化手段之一,效果也显而易见。 下面是测试,同时观察绑定和不绑定的情况下的profile。 在未使用绑定变量的时候,新增或上升了一些硬解析相关的CODE。 测试数据 postgres=# create table test(id int p...

PostgreSQL SQL log duration time 源码分析

6 minute read

背景 PostgreSQL 可以通过参数设置是否要记录SQL的执行时间,以及执行时间超过多少的SQL。 注意这里的执行时间实际上包含了网络的传输时间。 所以在遇到慢查询时,除了要排查数据库的问题,实际上还需要排查网络以及客户端的问题,因为客户端接收数据堵塞也会造成慢查询,就像我前天写的文章。 Postgre...

iperf 测试网络性能指标

7 minute read

背景 Iperf是一个网络性能测试工具, 主要应用于LINUX服务器下面。可以测量最大TCP和UDP带宽,具有多种参数和特性。 可以记录带宽,延迟抖动和数据包丢失,最大组和MTU等统计信息,通过这些信息可以发现网络问题,检查网络质量,定位网络瓶颈。Iperf在linux和windows平台均有二进制版本供自由使...

如何追溯 PostgreSQL 慢查询当时的状态

less than 1 minute read

背景 数据库出现慢查询的原因很多,例如IO等待,CPU繁忙,执行计划异常,锁等待,等等。 那么在发生慢查询后,如何能追溯慢查询当时的状态呢? 下面给大家提供一种思路, 1. 首先,我们是如何监测慢查询的 2. 监测到慢查询后,需要采集哪些信息 3. 数据库内核层面能做什么 4. 如何分析 如何实现?...

PostgreSQL 行级 全文检索

2 minute read

背景 在一些应用程序中,可能需要对表的所有字段进行检索,有些字段可能需要精准查询,有些字段可能需要模糊查询或全文检索。 比如一些前端页面下拉框的勾选和选择。 这种需求对于应用开发人员来说,会很蛋疼,因为写SQL很麻烦,例子: postgres=# create table t(phonenum text, ...

PostgreSQL 物联网黑科技 - 瘦身几百倍的索引(BRIN index)

4 minute read

背景 在数据库中用得最多的当属btree索引,除了BTREE,一般的数据库可能还支持hash, bitmap索引。 但是这些索引到了物联网,会显得太重,对性能的损耗太大。 为什么呢? 物联网有大量的数据产生和入库,入库基本都是流式的。在使用这些数据时,基本是FIFO,或者范围查询的批量数据使用风格。 bt...

PostgreSQL 流复制延迟的测试方法

2 minute read

背景 测试环境 X86 CentOS 6.x x64 32 Core 10000 MB/s 256 GB 12 SSD PostgreSQL 9.5.1 一主一备 PostgreSQL配置 postgresql.conf listen_addresses = '0.0.0.0...

Greenplum segment节点直接读写配置与性能

10 minute read

背景 《Use pgbouncer connect to GreenPlum’s segment node》 架构: 前端使用haproxy代理到后端的pgbouncer端口。 连接池使用pgbouncer,每个segment一个pgbouncer。 数据库为segment。 适合场景,随机分发表。 ...

fio测试IO性能

3 minute read

背景 FIO flexible testing of the Linux IO subsystem and schedulers 安装fio git clone https://github.com/axboe/fio cd fio ./configure --prefix=/home/dig...

如何评估Greenplum master 空间以及segment元数据占用的空间

1 minute read

背景 Greenplum master节点是用来存储元数据的,包括 : 序列,表,临时表,分区,函数,视图,类型,操作符,规则,触发器 等。 segment 上也会存储部分元数据, 序列,表,临时表,函数,视图,类型,操作符,规则,触发器 等。 master比segment更多的信息包括: 分布策略,分...

PostgreSQL 递归查询一例 - 资金累加链

less than 1 minute read

背景 云栖社区问答中,一位网友的问题: one等于上一个one加上现在的money,如何填充one字段?语句怎么写? 解法 在PostgreSQL中,可以使用递归查询满足以上业务场景的需求: 需要用到递归查询。 postgres=# create table m(id serial primary k...

PostgreSQL offset 原理,及使用注意事项

1 minute read

背景 使用PostgreSQL查询记录时,可以使用offset跳过一些记录,从跳跃点开始取后面的数据。 但是这里有一个问题是这样的: postgres=# create or replace function f() returns void as $$ declare begin raise...

GoldenGate - Oracle 实时复制到 PostgreSQL或EnterpriseDB

17 minute read

背景 Oracle GoldenGate支持种类繁多的数据库的同步,功能非常强大。 从mysql, oracle同步到PostgreSQL的又一利器。 开源的从mysql,oracle同步到PostgreSQL软件举例: https://github.com/EnterpriseDB/mysql_fdw ...

阿里云 PostgreSQL pg_hint_plan插件的用法

less than 1 minute read

背景 阿里云RDS PostgreSQL给的是介于超级用户和普通用户之间的用户权限,在使用pg_hint_plan时与超级用户有些许不同。 使用方法 使用rds_superuser登陆需要安装pg_hint_plan插件的数据库。 postgres=> \du+ ...

CentOS 6.x online change existing running process’s ulimits

1 minute read

背景 前段时间发了一篇关于CentOS 6.x ulimit配置文件变更为/etc/security/limits.d/90-nproc.conf 的文章. 但是如果你的系统中已经存在的进程的nproc是不会被变更过来的. 例如一个数据库服务器. PostgreSQL所有的backend process都是...

PostgreSQL 在3D 数据内容管理中的应用

less than 1 minute read

背景 前段时间在中华数据库大会遇到一位朋友询问关于如何使用PostgreSQL存储3D建模的数据,应用场景大概是找到最合脚的鞋子。 大概是将生产线上所有鞋子的内部空间数据化,同时将人的脚的三维数据化,存入数据库。找到脚和鞋子最匹配的组合。 这里涉及到3D数据的建模和存储,以及数据的使用。 好在Postgre...

PostgreSQL 与基友们的故事之 - Redis (无限缓存,实时标签…)

7 minute read

背景 在PostgreSQL中直接读写redis。 好处多多,可以降低应用层设计的复杂度,减少交互次数,降低RT。 应用场景举例: 1. 使用redis作为PostgreSQL的二级缓存, 提升数据库的性能。 例如在生产中有多台redis主机或集群,使用redis扩展PG的二级缓存能力,减少对IO的需求。...

PostgreSQL和Greenplum的临时表空间介绍

2 minute read

背景 PostgreSQL的临时表空间,通过参数temp_tablespaces 进行配置,PostgreSQL允许用户配置多个临时表空间。 配置多个临时表空间时,使用逗号隔开。 如果没有配置temp_tablespaces 参数,临时表空间对应的是默认的表空间。 PostgreSQL的临时表空间用来存储临...

PostgreSQL Greenplum crash 后临时表引发的BUG - 暨年龄监控的重要性

1 minute read

背景 PostgreSQL 和 Greenplum 都支持临时表。 在使用临时表时,如果数据库crash,临时表不会被自动清除,这样可能会埋下隐患,隐患爆发时是非常危险的。 问题在哪呢? 因为vacuum freeze不处理其他会话创建的临时表,仅仅处理当前会话创建的临时表。 也就是说,没有被清理的临时表...

PostgreSQL 字符串 collate 与排序、memcpy优化 - 源码分析

7 minute read

背景 事情的起因是这样的,某个用户问我为什么在GP里面查询到的’A’ > ‘a’和PostgreSQL中查询到的结果不一样,一个是false, 一个true. 但是这个原因其实和Greenplum还是PostgreSQL是没关系的。 原因的根源还是collate。 例如,在使用比较操作符时,可以指定需...

PostgreSQL 如何潇洒的处理每天上百TB的数据增量

7 minute read

背景 本文主要介绍并测试PostgreSQL 在中高端x86服务器上的数据插入速度(目标表包含一个时间字段的索引),帮助企业用户了解PostgreSQL在这类场景下的性能表现。 这类场景常见于 : 运营商网关数据,金融行业数据,产生量大,并且要求快速插入大数据库中持久化保存。 另外, 用户如果需要流式实时处...

PostgreSQL 锁等待跟踪

3 minute read

背景 PostgreSQL 在打印LONG SQL时,锁等待的时间也会算在内,并且目前在日志中没有将锁等待的时间单独打印出来。 shared_preload_libraries='auto_explain' auto_explain.log_min_duration='1s' auto_explain....

PostgreSQL Oracle 兼容性之 - PL/SQL pipelined

less than 1 minute read

背景 在Oracle中可以使用pipelined来返回多条记录。 在PostgreSQL中对应的功能是setof 表示返回多条记录。 网上的一个例子: Oracle supports pipelined functions. e.g a split function which takes in...

PostgreSQL 启动时会自动清理temporary-files directory

less than 1 minute read

背景 在使用数据库时,跑某些SQL的时候,如果work_mem内存不足会涉及一些临时空间的使用,比如排序,聚合,group by。 如果数据库突然crash了,或者某些原因未清除temp file。 数据库在重启的时候,会自动清理。 PostmasterMain(int argc, char *argv[]...

如何将阿里云RDS PgSQL恢复到本地主机中

4 minute read

背景 阿里云的RDS for PostgreSQL目前提供的备份为物理备份,备份粒度可以自己设置,最频繁的基础备份可以做到一天一次。 有了这个备份和归档日志,我们可以做到基于任意时间点(实际上是事务提交或回滚点的粒度)的恢复。 在RDS的控制台可以看到: 接下来我将演示一下如何实现以及如何设计一...

PostgreSQL 性能优化之 - 大锁与long sql/xact的蝴蝶效应(泛洪)

4 minute read

背景 在使用数据库时,某些特定的因素结合在一起,就可能引发蝴蝶效应。 导致数据库性能的急剧下降。 本文要讲的是和以下几个因素有关的: 因素1 PG的锁排队机制,即使没有获得锁,只要在锁队列中就会造成锁竞争。 session A lock1 get session B lock2 wait l...

PostgreSQL 加载动态库详解

2 minute read

背景 PostgreSQL 支持通过动态库的方式扩展PG的功能,在调用动态库涉及的函数时会自动加载这些库。 但是某些动态库可能需要预加载,例如使用了hook的动态库,或者是需要初始化共享内存,需要fork work process的动态库。 还有一些库是允许会话级加载,以及使用LOAD命令加载的,但是他们有什...

PostgreSQL MySQL 兼容性之 - 时间类型

1 minute read

背景 时间类型兼容性。 DATE MySQL DATE A date. The supported range is '1000-01-01' to '9999-12-31'. '0000-00-00' is a permitted special value (zero-date), u...

PostgreSQL Oracle 兼容性之 - sys_guid() UUID

less than 1 minute read

背景 Oracle 使用sys_guid()用来产生UUID值。 在PostgreSQL中有类似的函数,需要安装uuid-ossp插件。 如果用户不想修改代码,还是需要使用sys_guid()函数的话,可以自己写一个。 如下: postgres=# create extension "uuid-ossp"...

Kipmi0 占用100% CPU1核

2 minute read

背景 Kipmi0 占用100%单核,NICE 19,一般没什么影响。 但是也可以临时降低 echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us 降到10% 重启生效的配置,修改模块参数。 Create a file in ...

PostgreSQL promote过程 和 一主多备 时间线对接详解

less than 1 minute read

背景 PostgreSQL的physical standby数据库的promote过程,数据库会在pg_xlog目录产生3个文件。 例如将备库1 promote,它将在pg_xlog目录产生如下文件: A.partial (xlog) NEWTL_A (xlog) NEWTL.histor...

Greenplum通过gp_dist_random(‘gp_id’) 在所有节点调用某个函数

4 minute read

背景 使用greenplum时,如果需要调用一个函数,这个函数很可能就在master执行,而不会跑到segment上去执行。 例如 random()函数。 通过select random()来调用的话,不需要将这条SQL发送到segment节点,所以执行计划如下,没有gather motion的过程。 po...

PostgreSQL 百亿数据 秒级响应 正则及模糊查询

29 minute read

背景 正则匹配和模糊匹配通常是搜索引擎的特长,但是如果你使用的是 PostgreSQL 数据库照样能实现,并且性能不赖,加上分布式方案 (譬如 plproxy, pg_shard, fdw shard, pg-xc, pg-xl, greenplum),处理百亿以上数据量的正则匹配和模糊匹配效果杠杠的,同时还不失...

[转载]linux 时间戳转换, dmesg 时间转换

1 minute read

背景 原文 http://blog.csdn.net/buptapple/article/details/8568938 http://blog.csdn.net/wzb56_earl/article/details/50625705 linux时间戳转换 1. 将日期转换成时间戳 $date +%s -...

如何搭建阿里云RDS PostgreSQL数据库的逻辑备库

less than 1 minute read

背景 适用于PostgreSQL数据库之间的逻辑增量同步。 对PostgreSQL的版本要求,8.3以上即可。 最小的同步单位为行,用户可以选择表为同步对象,并且可以对表进行分组(有事务关联的表作为一个分组)。 不同的分组,可以并行订阅,消费消息。 如图: A,B,C三个表有事务关联,放到一个消息队列。...

如何搭建阿里云RDS PostgreSQL数据库的物理备库

2 minute read

背景 如何搭建阿里云RDS PostgreSQL数据库的物理备库 用户在阿里云购买了RDS PostgreSQL,如何在自己的机房或者ECS上建立备库? 关于如何构建逻辑备库,在我以前的文章有详细的讲解,所谓逻辑备库,是可以跨版本,甚至仅仅同步一部分相同步的表的备库。 https://yq.aliyun.c...

PostgreSQL 列存储引擎 susql (志铭奉献)

17 minute read

背景 susql在PostgreSQL9.5基础之上,增加了支持列存储,支持zlib压缩,支持COPY跳过异常行的功能。 可以在以下WEB下载测试。 https://github.com/susql/susql/releases 感谢志铭为PG社区的付出。 新增功能扩展语法介绍: Synopsis ...

PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践

17 minute read

背景 PostgreSQL 从2010年发布的9.0开始支持流式物理复制,从此备库可以作为只读库打开(使用的同时不堵塞实时流式恢复(自带冲突检测和处理机制)),提供给用户只读使用。 从2014年发布的9.4开始,PostgreSQL具备了流式逻辑复制的能力,有很多第三方的插件可以选择,2017年,不再需要这些插...

PostgreSQL 优化器逻辑推理能力 源码解析

16 minute read

背景 PostgreSQL 支持自定义操作符,本质上是调用函数来实现的。 同时不同的操作符有幂等,反转,NOT等相关性,数据库的优化器可以利用这些关系,对QUERY进行REWRITE,产生更好的执行计划。 优化器根据操作符进行REWRITE产生好的执行计划,其中有一项就是需要应用操作符的优化器开关,进行逻辑推...

PostgreSQL 操作符与优化器详解 - 包含(选择性、JOIN方法、等效)等内容

6 minute read

背景 PostgreSQL 支持自定义操作符,本质上是调用函数来实现的。 同时不同的操作符有幂等,反转,NOT等相关性,数据库的优化器可以利用这些关系,对QUERY进行REWRITE,产生更好的执行计划。 operator语法 语法如下: 例如创建一个求两个值的平均值的操作符: 首选要创建函数 post...

cgroup 术语和规则

1 minute read

背景 cgroup是Linux下用于隔离或管理资源使用的手段。 Redhat有比较详细的介绍。 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec...

PostgreSQL wal receiver 统计信息 patch

4 minute read

背景 之前写过一篇文档,关于如何编写一个C函数,在PostgreSQL hot standby中获取wal receiver的统计信息,以及上游节点的连接信息(conninfo)。 http://blog.163.com/digoal@126/blog/static/1638770402015744524871...

PostgreSQL Oracle 兼容性之 - WM_SYS.WM_CONCAT

less than 1 minute read

背景 先吐槽一下Oracle的wm_sys.wm_concat这个函数,为什么只能支持逗号分隔符呢?太老土了。 PostgreSQL的string_agg就做得比较只能,可以使用任意字符串作为分隔符。 Oracle行转列函数WMSYS.WM_CONCAT的使用实例demo select * from it...

EnterpriseDB & PostgreSQL RLS & Oracle VPD

3 minute read

背景 PostgreSQL 9.5的RLS用法请参照 《PostgreSQL 行安全策略 - PostgreSQL 9.5 new feature - can define row security policy for table》 EnterpriseDB的RLS用法略有差别,因为EDB主要为Oracle...

PostgreSQL Oracle 兼容性之 - 函数 自治事务 的写法和实现

4 minute read

背景 使用Oracle的用户,在函数中如果使用了自治事务的话,如果要转到PostgreSQL会遇到很棘手的问题。 因为PostgreSQL的函数是作为一个事务来处理的,要么全部提交,要么全部回滚, 除了exception,每个exception是一个子事务。 因此使用exception可以达到自治事务的目的...

PostgreSQL SQL HINT的使用(pg_hint_plan)

5 minute read

背景 PostgreSQL优化器是基于成本的 (CBO) , (当然, 如果开启了GEQO的话, 在关联表数量超过一定阈值后, 会采用GEQO, 这主要是因为在关联表太多的情况下, 穷举法可能带来巨大的PLAN开销, 所以GEQO输出的执行计划不一定是最优的) 本文要谈的和GEQO没什么关系, 主要和CBO相关...

PostgreSQL 子事务 id & command id 溢出问题分析

4 minute read

背景 PostgreSQL 需要为每个savepoint或者函数的exception section分配子事务号,递增。 即使这个exception没有被触发,也需要一个子事务号。 PushTransaction @ src/backend/access/transam/xact.c /* ...

Linux OS 系统信息采集列表

5 minute read

背景 bug或可以改进的点 crontab 取的数据不对,只取了ROOT用户的。 dmesg,processes和messages没有取到数据。 numainfo 取的信息不够,只取了编译开关,没有取当前是否使用NUMA,以及NUMA的统计信息。 release 取的路径不正确。 ulimit 取的信息...

Greenplum PostgreSQL –enable-profiling 产生gprof性能诊断代码

1 minute read

背景 为了诊断软件的性能瓶颈,在GCC编译的代码中,有-pg开关可以用来产生额外的性能诊断数据,例如每个FUNC的调用次数,时间等。 用来判断软件的性能瓶颈在什么地方最好不过了。 除此之外,我们还可以使用perf top命令来观察整个系统当时的瓶颈。

PostgreSQL pg_basebackup 并行压缩备份

less than 1 minute read

背景 在使用pg_basebackup备份数据库时,可以选择压缩或不压缩。 当我们使用非压缩格式时,如果你的块设备性能很不错,这种单进程的拷贝方式可能无法将块设备的性能发挥出来,例如现在企业级的SSD可以达到2GB/s的读写性能。而使用单进程拷贝小文件可能只能达到300MB/s,这对于备份一个比较大的数据库来说...

PostgreSQL 百亿地理位置数据 近邻查询性能

4 minute read

背景 本文主要要展示的是PostgreSQL在位置信息近邻(KNN)查询方面的性能。 测试类型point,索引类型GiST。 (PostGIS同样支持KNN查询,性能和本文的测试差不多) 测试数据量大于100亿。 测试结果 64个并发,随机选点,单次KNN查询请求的平均响应时间为0.848毫秒。 测试...

clang编译 PostgreSQL

less than 1 minute read

背景 实际测试clang 3.7.1比gcc 4.9.3编译的PostgreSQL性能略好。 测试数据参考下文末尾 《BenchmarkSQL 测试PostgreSQL 9.5.0 TPC-C 性能》 gcc安装 《gcc 更新》 llvm, clang安装 《llvm, clang》 CC=/u0...

图数据库 CayLey + PostgreSQL

2 minute read

背景 CayLey是GO语言写的一个图数据库引擎,支持RESTful API,内置查询编辑器和可视化,支持MQL和JAVASCRIPT查询接口,后端存储支持文件格式,PostgreSQL,mongodb,LevelDB,Bolt。模块化设计,扩展后端存储非常容易。 本文将以PostgreSQL为例,演示一下Ca...

perf Performance analysis tools for Linux

3 minute read

背景 perf是基于内核子系统的一个性能分析框架,包括硬件层面(cpu/pmu)和软件级的性能分析。 man perf PERF(1) perf Manual PERF(1) NAME ...

llvm, clang

less than 1 minute read

背景 gcc 《gcc 更新》 export PATH=/u02/digoal/gcc4.9.3/bin:$PATH export LD_LIBRARY_PATH=/u02/digoal/gcc4.9.3/lib64:/u02/digoal/gcc4.9.3/lib:$LD_LIBRARY_PATH ...

gcc 更新

1 minute read

背景 下载新版本 https://gcc.gnu.org/mirrors.html 解压 #tar -xvzf gcc-4.9.3.tar.gz #cd gcc-4.9.3 下载依赖包 ./contrib/download_prerequisites 安装依赖包 cd contrib...

BenchmarkSQL 测试Oracle 12c TPC-C 性能 (含个人测试结果)

13 minute read

背景 使用BenchmarkSQL测试一下Oracle 12c的TPC-C性能,同时对比一下PostgreSQL 9.5的性能。 测试机: 3 * PCI-E SSD,逻辑卷条带,XFS,数据块对齐,16核开HT,256G内存。 12c安装,配置请参考 《Linux RHEL6 x64 命令行静默安装 O...

PostgreSQL hugepage 支持

less than 1 minute read

背景 PostgreSQL启动大页支持很简单,只需要配置几个东西。 1. postgresql.conf huge_pages = on shared_buffers = 8GB # 使用8G内存 2. 操作系统 配置grub.conf,加入如下,重启系统 numa=off transp...

BenchmarkSQL 支持多个 schema

1 minute read

背景 benchmarksql 默认编译好的,还有配置都是用的benchmarksql 这个schema,如果我们想对一个数据库用多个schema来压性能,就需要开多个benchmarksql终端来压。 这里就涉及到benchmarksql需要支持多个schema,每个benchmarksql连一个schema...

BenchmarkSQL 测试PostgreSQL 9.5.0 TPC-C 性能

20 minute read

背景 Oracle 12c TPC-C 测试请参考: 《BenchmarkSQL 测试Oracle 12c TPC-C 性能》 文件系统为XFS,优化手段如下: 《PostgreSQL on xfs 性能优化 - 1》 本文在同样的硬件测试环境下对比PostgreSQL 9.5.0。 我们看看1月7号发...

EXT4 vs XFS us iozone

12 minute read

背景 之前使用PostgreSQL测试了xfs和ext4在tpc-b方面的性能,XFS完胜。 接下来使用专业的io测试软件iozone测试一下。 安装参考 《安装iozone on CentOS 7 x64》 测试case: 2G文件,单个请求8K到16MB分布,测试所有的iozone case,全程使...

PostgreSQL on XFS vs EXT4 性能

4 minute read

背景 内核版本 3.18.24 系统内存256G。 测试使用了3块PCI-E SSD。 # pvcreate /dev/dfa # pvcreate /dev/dfb # pvcreate /dev/dfc # vgcreate vgdata01 /dev/dfa /dev/dfb /d...

PostgreSQL on xfs 性能优化 - 2

6 minute read

背景 承接上一篇XFS性能优化。 《PostgreSQL on xfs 性能优化 - 1》 本文是对比XFS优化前后的PostgreSQL TPC-B性能。 配置PostgreSQL 数据库参数 listen_addresses='0.0.0.0' port=1921 max_connectio...

PostgreSQL on xfs 性能优化 - 1

5 minute read

背景 性能优化主要分4块, 1. 逻辑卷优化部分 2. XFS mkfs 优化部分 3. XFS mount 优化部分 4. xfsctl 优化部分 以上几个部分都可以通过man手册查看,了解原理和应用场景后着手优化。 man lvcreate man xfs man mkfs.xfs m...

zfs 快照增量大小 vs PostgreSQL产生的XLOG大小

6 minute read

背景 zfs快照增量 和 oracle的rman incremental backup极其类似。是其他不具备oracle rman 数据库级增量备份的数据库产品的福音,例如PostgreSQL(注意,使用pg_rman , pg_probackup都可以支持块级增量了)。 下面我们来测试一下zfs快照增量的空间...

zfs 快照发送与接收

9 minute read

背景 zfs具备将快照输出到stdout,以及从stdout接收快照的功能。 这两个功能分别通过zfs send和zfs receive命令来完成。 例子 1. zfs send 有 -n -v -P 参数时,仅仅输出统计信息,不产生数据流。统计信息输出到stdout。 没有 -n -v -P 参数时,...

Back to Top ↑

2015

PostgreSQL OLTP on ZFS 性能优化

10 minute read

背景 环境 PostgreSQL 9.5 rc1 数据块大小为8KB CentOS 6.x x64 zfsonlinux 3*aliflash 256G内存 32核 Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz ...

PostgreSQL 金融行业高可用和容灾解决方案

less than 1 minute read

背景 金融行业高度依赖共享存储来解决高可用,数据0丢失以及异地容灾的问题。 开源数据库PostgreSQL基于复制的解决方案能不能解决0丢失,高可用以及容灾的问题? 完全可以,而且更灵活,更可靠。 PostgreSQL 金融场景实现 如图1 主备同步通过流复制实现,可靠性指标包含反馈维度的指标和一致...

BenchmarkSQL 测试Oracle 12c TPC-C 性能

9 minute read

背景 使用BenchmarkSQL测试一下Oracle 12c的TPC-C性能,同时对比一下PostgreSQL 9.5的性能。 测试机: 3 * PCI-E SSD,逻辑卷条带,XFS,数据块对齐,16核开HT,256G内存。 12c安装,配置请参考 《Linux RHEL6 x64 命令行静默安装 O...

Linux RHEL6 x64 命令行静默安装 Oracle 12c - 2

2 minute read

背景 软件安装完,还要配置监听,初始化数据库。 这点和PostgreSQL类似。 配置环境变量 vi ~/env_ora.sh export ORACLE_BASE=/home/digoal/oracle/product export ORACLE_HOME=$ORACLE_BASE/12.1.0/...

Greenplum 激活standby master失败后的异常修复

6 minute read

背景 激活standby master失败后,主库和备库都起不来了。 如下,修改了MASTER_DATA_DIRECTORY和PGPORT环境变量为新的主库,启动主库。 $gpstart -a 20151222:16:49:41:073138 gpstart:digoal_host:digoal-[INF...

PostgreSQL Oracle 兼容性之 - WITH 递归 ( connect by )

6 minute read

背景 ( 请把本文某些SQL的 SELEC改成 s e l e c t , FRO改成 f r o m , WHE改成 w h e r e 不要空格) connect by语法是Oracle用来实现树形查询的一种语法。 应用场景如图: PostgreSQL虽然不支持connect by语法,但是支持...

PostgreSQL Oracle 兼容性之 - orafce介绍

8 minute read

背景 PostgreSQL是和Oracle最接近的企业数据库,包括数据类型,功能,架构和语法等几个方面。甚至大多数的日常应用的性能也不会输给Oracle。 但是Oracle有些函数或者包,默认PostgreSQL是没有的,需要安装orafce包来实现这些兼容性。 例如现在orafce已经包含了如下内容。 1...

民用SSD 关闭 写cache后的 糟糕性能表现

2 minute read

背景 昨天刚到手的一块SSD,建兴 ZETA 256GB的硬盘。 smartctl查看到的信息如下: === START OF INFORMATION SECTION === Device Model: LITEON LCH-256V2S Serial Number: 002448118...

阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 6 任意时间点恢复

4 minute read

背景 阿里云的RDS for PostgreSQL目前提供的备份为物理备份,备份粒度可以自己设置,最频繁的基础备份可以做到一天一次。 有了这个备份和归档日志,我们可以做到基于任意时间点(实际上是事务提交或回滚点的粒度)的恢复。 在RDS的控制台可以看到: 接下来我将演示一下如何实现以及如何设计一...

阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 5 长短连接测试

3 minute read

背景 本文将教你测试长连接和短连接的性能。 我们在连接阿里云RDS for PostgreSQL时,实际上并不是直接连接数据库的,而是通过了SLB。 那么这个代理有没有连接池功能呢?通过测试发现,即使有连接池的功能,也是会话级别的,所以如果你的业务系统如果是高并发的短事务,建议你在应用层启用连接池,如果不能启...

阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 1 教你做RDS性能测试

15 minute read

背景 来阿里云之前,做的一些RDS测试。 几个月过去了,阿里云RDS PG在性能方面做出了大量的代码层优化,感兴趣的童鞋赶紧测试,来PK我之前的测试数据吧。 测试机申请的RDS都是最低配置的,容量5GB,内存1GB,支持100个连接,IOPS 400。 先看看配置吧,为了提高性能,有一些参数是可以调整的,如...

Greenplum 表空间和filespace的用法

8 minute read

背景 Greenplum支持表空间,创建表空间时,需要指定filespace。 postgres=# \h create tablespace; Command: CREATE TABLESPACE Description: define a new tablespace Syntax: ...

Greenplum 源码安装

6 minute read

背景 数据库规划 1 master - standby 5 segment(s) - segment mirror(s) 硬件规划 6台主机 master节点配置(cpu 8核, mem 16G, network 1GB, disk 1*250G) segments配置 建议规划 所有...

物联网流式处理应用 - 用PostgreSQL实时处理(万亿每天)

11 minute read

背景 物联网的一个特点是万物联网,会产生大量的数据。 药品监督 一盒药,从生产,到运输,到药店,到售卖。每流经一个节点,都会记录它的信息。 个人健康、基础设施监测 健康手环,儿童防丢手表,一些动物迁徙研究的传感器(如中华鲟),水纹监测,电网监测,煤气管道监测,气象监测等等这些信息。 金融数据实时监测 股价的...

PostgreSQL 多元线性回归 - 2 股票预测

2 minute read

背景 前面写了两篇关于股价预测的,都是用的一元回归,也就是说只用了1个自变量。 例如用昨天的收盘价预测今天的收盘价,但是元素太单一的话,除非自变量的影响因素非常大,否则容易不准。 所以就有了多元回归,例如,昨天的成交量,收盘价,开盘价三个数据预测下一天的收盘价。这就是三元回归。 PostgreSQL可以通过...

PostgreSQL 使用pg_xlogdump找到误操作事务号

1 minute read

背景 一般用户在发生误操作后,可能会非常模糊的记得一个大概操作的时间点,那么通过这个线索,我们怎么能定位到用户误操作的精准事务号呢? 从而使用PITR恢复到发生误操作前的数据库状态。 我们可以使用审计日志,找到精准的时间,假设你开了所有SQL的审计日志(log_statement = ‘all’)。 然后找...

安装iozone on CentOS 7 x64

6 minute read

背景 iozone是一个非常专业的文件系统性能测试开源软件,用法和介绍可以参考如下: http://www.iozone.org/ http://www.iozone.org/docs/IOzone_msword_98.pdf 使用源码安装,步骤如下: 下载最新的稳定版源码: http://www.io...

PostgreSQL 安全警钟长鸣

less than 1 minute read

背景 PostgreSQL 安全指南请参考,内附今年PG大会的安全分享。 http://blog.163.com/digoal@126/blog/static/16387704020155131217736/ 赶紧检查一下你的数据库是否安全吧。 在赠送一个PostgreSQL的巡检脚本, https://...

让greenplum的oltp性能飞起来 - 直接读写数据节点

2 minute read

背景 直连greenplum segment节点的方法 : 使用这种方式,不与其他节点通讯,只操作当前节点。也不会产生数据分布的概念。 $ PGOPTIONS='-c gp_session_role=utility' psql -p 40005 psql (8.2.15) Type "help" ...

Greenplum RT高的原因分析 和 优化方法

10 minute read

背景 本文测试Greenplum的SELECT, INSERT, UPDATE, DELETE并发性能。 为了方便观察日志,打开SQL审计和时间统计。 $gpconfig -c log_duration -v on $gpconfig -c log_statement -v all $gpconfig...

PostgreSQL UTF8 和 GB18030编码map文件不完整的问题

4 minute read

背景 http://www.postgresql.org/message-id/20150309205145.4031.32069@wrigleys.postgresql.org 报的一个BUG,在utf8的数据库中,将chr(128512)转换为GB18030时报错,因为它的UTF8编码在MAP表中找不到对应...

一张图看懂MADlib能干什么

less than 1 minute read

背景 MADlib最初是由pivotal的一些数据科学家贡献的开源数据挖掘库,现已加入阿帕奇孵化器项目。 MADlib能干什么呢?看一张图就明白了,以下取自 http://user2014.stat.ucla.edu/files/PivotalR_user2014/userR2014_PivotalR.pdf...

PostgreSQL snapshot too old补丁, 防止数据库膨胀

11 minute read

背景 PostgreSQL 9.6已支持snapshot too old , 目前仅仅针对未申请事务号的事务(pg_stat_activity.backend_xid为空的事务),这种事务会被CANCEL,而申请了事务号的事务(例如写事务)则不会触发snapshot too old。 所以即使你使用9.6,对...

ltree 支持的字符 ISALNUM

1 minute read

背景 ltree目前只支持alpha numeric,数字,字母,下划线。 postgres=# select text2ltree('abc.\<f'); ERROR: 42601: syntax error at position 4 LOCATION: ltree_in, ltree_i...

注意PostgreSQL 隐式锁请求

4 minute read

背景 我们在使用数据库时,经常遇到锁等待的事情。例如一个用户在更新一条记录时,另一个会话要更新同一条记录就需要等待。 这种锁等待是比较显而易见的,有一些锁等待你可能会觉得匪夷所思。 例如: 会话A: postgres=# begin; BEGIN postgres=# alter table te...

PostgreSQL promote 激活 源码分析

6 minute read

背景 PostgreSQL standby可以通过两种方法来激活成为主库: 一种是trigger file,配置在recovery.conf中。 另一种是pg_ctl promote发送SIGUSR1信号给postmaster进程。 同时,PostgreSQL支持快速激活和非快速激活, fast prom...

PostgreSQL 支持压缩吗?压缩比如何?

3 minute read

背景 PostgreSQL支持压缩,没有错,只要是变长字段类型,你就可以选择是否要压缩存储。 存储格式支持 The TOAST management code recognizes four different strategies for storing TOAST-able columns on disk...

同态加密homomorphic encryption的好处

2 minute read

背景 在引入同态加密前,看一个stackoverflow的问答。 问题: 1. I got a SaaS product and the data is kinda sensitive. I want to give my customers 100% security on the fact that I ...

逻辑复制中没有主键或非空+唯一约束存在的问题

2 minute read

背景 当我们在使用PostgreSQL的logical decoding时, 更新和删除数据涉及到行的定位,如果没有方法定位到唯一行,可能导致接收端重做时出问题。 PostgreSQL提供了几种区分OLD TUPLE的方式,使用unique index + not null , 或primary key都没有歧...

开放dblink , fdw带来的安全隐患

5 minute read

背景 PostgreSQL 有些插件是支持网络访问的,比如dblink, fdw等,可以访问外部服务。 如果开放这些插件,并且网络隔离没有做好的话,可能会带来一些安全隐患,比如通过这些插件,能够访问数据库主机内网的其他机器。 正文 如果你把超级用户开放给用户,危险更加严峻 dblink_connect和db...

PostgreSQL 流计算指 pipelinedb 实时处理Kafka消息流

3 minute read

背景 Kafka是一个分布式的消息系统,应用范围广泛,例如用于消息管理,WEB站点的活跃度跟踪,监控数据,日志聚合,流处理,提交日志,等等。 具体可参考: http://kafka.apache.org/documentation.html#gettingStarted 对于流数据记录的场景,我们可能会想到...

PostgreSQL Oracle 兼容性 - Oracle反转索引 迁移到PostgreSQL可用函数索引或哈希索引

1 minute read

背景 Oracle为了解决索引页热点的问题,推出了反转索引。 应用场景如下,当用户插入的数据是有序数据时,并且遇到高并发的插入请求,可能造成索引页的写竞争,从而增加了等待时间。 反转索引是指索引中存储的是反转值,人为的将有序的数据转换为无序的数据,从而减少索引页的写竞争。但是反转索引有个问题,如果要查询一个范...

float和numeric性能对比

2 minute read

背景 由于PostgreSQL自己实现了numeric这个数据类型,所以我们对比一下它和double的性能差别在哪里? 创建测试表: postgres=# create table tt(c1 numeric,c2 numeric); CREATE TABLE postgres=# create ta...

PostgreSQL 浮点精度调整(extra_float_digits)

1 minute read

背景 之前写过一篇文章介绍PostgreSQL浮点类型存储值和表述值不一致带来的问题。 请参考: 《don’t mistake the float/double’s display & real value》 浮点精度,在大多数平台中,float4精确到6位数字,float8精确到15位数字。 O...

[转]一篇超赞的 PostgreSQL query 生命周期分析

6 minute read

背景 一个查询从客户端发起请求到客户端收到请求,一般分为6个阶段: 客户端请求 Parser将原始的query string转换为parsed query tree,通过打开参数debug_print_parse 可以观察这部分信息。 Analyzer,根据重写规则重构query tree,(例如view),输出...

基于PostgreSQL的流式PipelineDB, 1000万/s实时统计不是梦

12 minute read

背景 PipelineDB是基于PostgreSQL研发的一种流式关系数据库(0.8.1基于9.4.4),这种数据库的特点是自动处理流式数据,不存储原始数据,只存储处理后的数据,所以非常适合当下流行的实时流式数据处理。 例如网站流量统计,IT服务的监控统计,APPStore的浏览统计,物联网的传感器数据实时统计...

为什么PostgreSQL UUID-OSSP可能产生重复值?

5 minute read

背景 PostgreSQL提供了一个插件来产生UUID值,但是,某些情况下是否有可能产生重复的值呢? 答案是有可能,从代码分析就知道原因了。 这里要分BSD平台和Linux平台来讲。 首先我们看看用来产生UUID的函数,其中3个是不带参数的。 postgres=# \df+ uuid_generate_v...

PostgreSQL 逻辑复制插件 UDR, 可以愉快的玩类似MySQL的binlog复制了

5 minute read

背景 PostgreSQL 的流复制素来以高效,实时,稳定著称; 为企业解决了很多问题,例如容灾,备份,HA,读写分离等等。 但是流复制有一个无法克服的弊端,下游节点只能做到只读,并且只能复制整个集群(使用walbouncer可以做到基于表空间或库级别的物理流复制)。 http://www.cybertec...

PostgreSQL数据库 OLTP高并发请求性能优化

2 minute read

背景 在多核系统中,一般TPS会随并发数的增加而提升,但是当并发数超过一定的数值(如CPU核数的2到3倍以后),性能开始下降,并发数越高,下降越严重。 例子: 更新500万记录表中的1条随机记录。开8000个并发。 create table test_8000 (id int primary key, cn...

PostgreSQL共享存储一写多读(类Oracle RAC架构)

9 minute read

背景 亚马逊推出的Aurora数据库引擎,支持一份存储,一主多读的架构。这个架构和Oracle RAC类似,也是共享存储,但是只有一个实例可以执行写操作,其他实例只能执行读操作。相比传统的基于复制的一主多读,节约了存储和网络带宽的成本。 PostgreSQL共享存储一写多读(类Oracle RAC架构) Pos...

PostgreSQL function 会遗传security 属性吗?

1 minute read

背景 PostgreSQL function 会遗传security 属性吗?答案是不遗传。 在参数中的函数,只管自己的security属性,不管外面函数的security属性。也就是各管各的。 当函数体中包含其他函数时,两个函数的security属性都会被判断,并且是一个与的关系。或者可以理解为整个调用栈的...

PostgreSQL cancel 通信协议、信号和代码

9 minute read

背景 数据库端口暴露有什么风险么? 你可能会觉得,只要密码足够复杂,或者你设置了pg_hba.conf,数据库端口暴露也没有风险。 可是实际上是这样的吗? 我们的小鲜肉来告诉你风险在哪。 我们来看个例子: 目前这个数据库只允许unix socket连接,但是监听了所有端口。 你觉得这样的pg_hba....

PostgreSQL 安全陷阱 - 利用触发器或规则,结合security invoker函数制造反噬陷阱

9 minute read

背景 PostgreSQL的函数支持两种权限检测 invoker, 调用者权限 definer, 定义者权限 比如一个普通用户,定义了一个函数是调用者权限的,当超级用户调用这个函数时,会以超级用户的权限来执行,可以为所欲为。 因此可能被普通用户用来设计陷阱。 正文 现在数据库中有两个用户,一个超级用户一...

pg_shard PostgreSQL数据库分片

15 minute read

背景 如果你的GCC版本第一4.6,那么首先要安装一个高版本的GCC,因为pg_shard里面用了gcc 4.6以后新加的特性。 # yum install -y gmp mpfr libmpc libmpc-devel # wget http://gcc.cybermirror.org/releas...

pg_basebackup 不备份哪些文件

2 minute read

背景 pg_basebackup是PostgreSQL提供的基础备份工具,用户可以使用这个工具来实现对数据库的基础备份,当然你也可以使用pg_start_backup()+copy+pg_stop_backup()的方式进行备份。 那么pg_basebackup会帮你过滤哪些文件,或者不备份哪些文件呢? 1....

请勿滥用unlogged table & hash index

4 minute read

背景 unlogged table和hash index同样都不会写XLOG,所以如果你用流复制来搞HA,一定概要搞清楚一个问题,切换到备库的话unlogged table数据会被清掉,而hash index也没有,走hash index会失败。 unlogged table 的风险以及修复手段可以见 : h...

cgroup告诉你如何计算 PostgreSQL 数据库实例用了多少内存

3 minute read

背景 当我们在一个操作系统中,启动了多个数据库实例时,我们也许会控制各个实例可以使用的内存,通过cgroup来控制是一种手段。 显然,使用cgroup也可以知道你的实例使用了多少内存。 例子: 在内存组新建一个组 [root@digoal ~]# cd /cgroup/memory [root@dig...

PostgreSQL cancel 安全漏洞

9 minute read

背景 数据库端口暴露有什么风险么? 你可能会觉得,只要密码足够复杂,同时你设置了pg_hba.conf,数据库端口暴露也没有风险。 可是实际上是这样的吗? 本文将告诉你潜在风险在哪里。 例子 目前这个数据库只允许unix socket连接,但是监听了所有端口。 你觉得这样的pg_hba.conf配置安全...

fwrite fwrite_unlocked

less than 1 minute read

背景 fwrite 和 fwrite_unlocked是一对,其中fwrite_unlocked是fwrite的线程不安全版本,因为不加锁。 参考 1. man fwrite NAME fread, fwrite - binary stream input/output …… RETURN ...

pg_stat_statements fwrite not save

less than 1 minute read

背景 PostgreSQL 9.4 对pg_stat_statements插件的一个重大修改,它在使用过程中需要使用文件,所有的操作都会fwrite文件。 http://www.postgresql.org/docs/9.4/static/release-9-4.html 这么做的好处是,可以记录很多SQL。...

PostgreSQL jdbc 9.4 支持load balance 和 connection failover了

1 minute read

背景 好消息,PostgreSQL的jdbc驱动支持load balance 和 connection failover了。 通过配置多对主机和端口的信息,可以实现简单的连接FALIOVER,直到取到一个正常的连接为止。 Connection Fail-over To support simple conn...

PostgreSQL 混合场景benchmark计算方法

1 minute read

背景 数据库性能基准测试的工具很多,标准基本都是参考TPC提供的模型在做的。 TPC标准是Transaction Processing-Performance Council,事务处理性能委员会的缩写。 该组织的主要功能是指定商用应用基准程序(Benchmark)的标准规范、性能和价格度量,并管理测试结果的发...

PostgreSQL 混合场景benchmark估算方法

1 minute read

背景 数据库性能基准测试的工具很多,标准基本都是参考TPC提供的模型在做的。 TPC标准是Transaction Processing-Performance Council,事务处理性能委员会的缩写。 该组织的主要功能是指定商用应用基准程序(Benchmark)的标准规范、性能和价格度量,并管理测试结果的发...

PostgreSQL OID 源码分析

10 minute read

背景 PostgreSQL的许多系统表都用到了OID这个数据类型,OID是一个uint类型,最大可以存储的值为2^32-1 /* * Object ID is a fundamental type in Postgres. */ typedef unsigned int Oid; 很多系...

PostgreSQL 批量调用函数的方法

less than 1 minute read

背景 PostgreSQL批量插入的方法很多,例如insert into tbl values (),(),()…..; 这种方法不能使用绑定变量。 或者 begin; insert into ... insert into .... end; 或者 insert into tbl s...

妙用explain Plan Rows快速估算行 - 分页数估算

1 minute read

背景 http://people.planetpostgresql.org/dfetter/index.php?/archives/80-Approximate-Counts.html 通过这种方法,我们可以快速的估算一个表,视图的记录数,当然也包括带条件的查询中,最终结果的返回集。 例如: postgre...

PostgreSQL数据库监控中的统计学 - 对象SIZE的数据分布图

1 minute read

背景 有时,我们为了直观的显示对象的空间占用及分布情况,我们可能会以图表的形式展示。 通常情况下,我们可以根据需求,以柱状图或者聚集图的形式来展示,从各个维度来了解数据空间占用的分布情况,例如: 1. bucket分布,就是按大小排序,选定要划分为几个bucket,每个bucket放同样数量的对象,输出buc...

Core dump 分析

6 minute read

背景 本文参考互联网文 Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间(例如当进程占用60G+以上内存时,完整C...

PostgreSQL 秒杀场景优化

5 minute read

背景 秒杀场景的典型瓶颈在于对同一条记录的多次更新请求,然后只有一个或者少量请求是成功的,其他请求是以失败或更新不到告终。 例如,Iphone的1元秒杀,如果我只放出1台Iphone,我们把它看成一条记录,秒杀开始后,谁先抢到(更新这条记录的锁),谁就算秒杀成功。 例如: 使用一个标记位来表示这条记录是否已...

PostgreSQL 多字节字符集合法性检测

9 minute read

背景 前面转了一篇关于字符编码的文章,有兴趣的朋友可以阅读一下。 http://blog.163.com/digoal@126/blog/static/163877040201581133017855/ 本文介绍一下PostgreSQL是如何检查多字节字符的合法性的,以及在字符集之间是如何转换的? 我们以U...

[转载]关于字符编码,你所需要知道的

less than 1 minute read

背景 原文 1. http://www.cnblogs.com/KevinYang/archive/2010/06/18/1760597.html 字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题。这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助。 从ASCII码说起 ...

云时代,我们需要PostgreSQL,需要服务端编程

less than 1 minute read

背景 云为我们提供了便利,降低了开发和运维的成本。 但是也必须思考一个问题,我们的云组件之间的的网络延迟? (相比较局域网的服务器和服务器之间) 你可以用各种方法测试验证一下。 以往我们把数据放在数据库,数据库只提供简单的增删改查,大部分的业务逻辑放在应用服务器来完成。 但是在云时代,如果我们还这样的话...

londiste3 copy table’ snapshot & PostgreSQL logical replication’s snapshot 不同之处

4 minute read

背景 PostgreSQL有物理复制,也有逻辑复制。 物理复制是持续的从XLOG读取block data在对应的物理文件实行recovery的过程。 建立物理备份的standby时,会强制开启一个检查点,然后拷贝数据文件,拷贝完后的数据库其实是不一致的,没有关系,只要从检查点开始的所有XLOG都在,就可以恢复...

PostgreSQL 回归测试

9 minute read

背景 回归测试是PostgreSQL的测试方法之一。 回归测试,需要事先定义好测试脚本(通常是SQL脚本,放在sql目录中),同时定义好调用执行测试脚本的预期正确输出文件(通常放在expected目录中)。 测试使用make check或make installcheck进行,它会通过pg_regress程序...

PostgreSQL src/Makefile.global中的小坑

less than 1 minute read

背景 在编译一个插件时发现PostgreSQL的src/Makefile.global可能有一些坑你会踩到, 我们来看看坑是什么? src/Makefile.global datadir := ${datarootdir} ifeq "$(findstring pgsql, $(datadir))" "...

PostgreSQL C代码覆盖率测试(gcov, lcov)

8 minute read

背景 通常我们评判一个test case好坏的标准之一是代码的覆盖率,一个好的test case应该覆盖到所有的代码。 那么问题来了,我们怎么知道这个test case有没有覆盖到所有的代码呢? 以C代码为例,我们看看如何检测代码覆盖率。其他语言自然有其他语言的代码覆盖测试工具,例如plpgsql: htt...

piggly, 一个plpgsql 代码覆盖测试工具

less than 1 minute read

背景 https://github.com/kputnam/piggly RUBY写的一个postgresql plpgsql函数代码覆盖测试框架,测试脚本不限语言,你可以用perl,python。。。来写测试脚本。 这个测试框架虽然是几年前写的,但值得学习。 digoal’s 大量PostgreS...

用PostgreSQL玩国际象棋

less than 1 minute read

背景 PG的玩家有点疯狂。看看PG怎么玩国际象棋吧。 http://pgxn.org/dist/pg2podg/ http://pgxn.org/dist/pgchess/ http://api.pgxn.org/dist/pg2podg/0.1.3/pg2podg-0.1.3.zip http://ap...

pg_clog的一致性 & 异步事务提交

6 minute read

背景 异步提交是指不需要等待事务对应的wal buffer fsync到磁盘,即返回,而且写CLOG时也不需要等待XLOG落盘。 而pg_clog和pg_xlog是两部分存储的,那么我们想一想,如果一个已提交事务的pg_clog已经落盘,而XLOG没有落盘,刚好此时数据库CRASH了。 数据库恢复时,由于该事...

pg_clog的原子操作与pg_subtrans(子事务)

7 minute read

背景 如果没有子事务,其实很容易保证pg_clog的原子操作,但是,如果加入了子事务并为子事务分配了XID,并且某些子事务XID和父事务的XID不在同一个CLOG PAGE时,保证事务一致性就涉及CLOG的原子写了。 PostgreSQL是通过2PC来实现CLOG的原子写的。 1. 首先将主事务以外的CLOG...

PostgreSQL pg_clog fsync 频率分析

17 minute read

背景 在前面介绍过PostgreSQL除了XLOG以外,还有一些操作是需要调用fsync的。 《除了xlog,哪些操作可能还需要fsync ?》 其中之一是pg_clog,本文主要分析一下pg_clog是在什么时候需要调用fsync的? 引用wiki里的一段pg_clog的介绍。 https://wiki...

除了xlog,哪些操作可能还需要fsync ?

2 minute read

背景 我们知道xlog的一个重要责任是用来保护用户提交的事务在数据库的持久化特性的。 那么就涉及到用户提交事务后,必须先等待这笔事务对应的XLOG fsync完成。所以xlog会涉及不断的fsync(由wal writter间歇性发起,用户进程仅仅在申请不到XLOG BUFFER时会调用fsync) (《Po...

PostgreSQL & LLVM & Vitesse DB

1 minute read

背景 llvm动态编译,快了不是一点点。当IO不再是瓶颈时,下一个瓶颈CPU。LLVM解决了CPU瓶颈的问题。 http://vitessedata.com/vitesse-x 提供插件形式的测试,闭源。 PostgreSQL performance with gcc, clang and icc htt...

NFS over RDMA

6 minute read

背景 http://www.chawenti.com/articles/1912.html http://www.cs.unh.edu/~rdr/rdr-hpcc12.pdf filesystems/nfs/nfs-rdma.txt #####################################...

使用 PGStrom 2 (GPU JOIN, BulkScan, GpuPreAgg, …)

8 minute read

背景 BUG fixed, 测试了一下。 JOIN性能确实好很多,主要体现在。 1. BuldkScan 300毫秒左右,而seqscan需要1500毫秒。 2. GpuJoin 约4.5秒。而hash join约8秒。 postgres=# explain (analyze,verbose,cost...

PostgreSQL Greenplum 结巴分词(by plpython)

1 minute read

背景 除了数据库内置的中文分词,使用plpython数据库存储过程语言,也能实现方便的分词能力。在greenplum中是一个很好的选择。 结合PostgreSQL plpython和language transform可以很方便的实现中文分词。 https://github.com/fxsjy/jieba ...

NLPIR 分词准确率接近98.23%

less than 1 minute read

背景 http://www.nlpir.org/ 几个例子: 为人民办公益 为/p人民/n办/v公益/n 独立自主和平等互利的原则 独立自主/vl和/cc平等互利/vl的/ude1原则/n 结婚的和尚未结婚的 结婚/vi的/ude1和/cc尚未/d结婚/vi的/ud...

PostgreSQL cann’t use NULL ciphers(do not encryption) when use hostssl?

1 minute read

背景 PostgreSQL目前没有协议层数据压缩,对于大数据量的应用,或者云数据库场景,容易造成网络瓶颈。 目前必须通过openssl来做数据压缩。但是OPENSSL需要加密,会带来额外的CPU开销,同时还需要客户端支持OPENSSL库。 openssl version openssl-1.0.1p ...

PostgreSQL SSL链路压缩例子

2 minute read

背景 PostgreSQL目前没有协议层数据压缩,对于大数据量的应用,或者云数据库场景,容易造成网络瓶颈。 目前必须通过openssl来做数据压缩。但是OPENSSL需要加密,会带来额外的CPU开销,同时还需要客户端支持OPENSSL库。 《PostgreSQL 如何实现网络压缩传输或加密传输(openssl...

PostgreSQL 单元测试

less than 1 minute read

背景 http://api.pgxn.org/src/pg_thud/ http://api.pgxn.org/src/pgtap/ https://nose.readthedocs.org/en/latest/ http://www.postgresql.org/docs/9.4/static/regre...

K-Means 数据聚集算法

3 minute read

背景 K-Means是什么?引用一篇网友的文章: http://coolshell.cn/articles/7779.html 引用 最近在学习一些数据挖掘的算法,看到了这个算法,也许这个算法对你来说很简单,但对我来说,我是一个初学者,我在网上翻看了很多资料,发现中文社区没有把这个问题讲得很全面很清楚的文章,...

sync_file_range - sync a file segment with disk (None of these operations writes out the file’s metadata)

1 minute read

背景 sync_file_range 可以将文件的部分范围作为目标,将对应范围内的脏页刷回磁盘,而不是整个文件的范围。 好处是,当我们对大文件进行了修改时,如果修改了大量的数据块,我们最后fsync的时候,可能会很慢。即使fdatasync,也是有问题的,例如这个大文件的长度在我们的修改过程中发生了变化,那么f...

从fread和mmap 谈读文件的性能

less than 1 minute read

背景 原文 1. https://www.byvoid.com/blog/fast-readfile/ 2. http://blog.csdn.net/jwh_bupt/article/details/7793549 3. http://blog.csdn.net/jwh_bupt/article/detai...

DirectIO & BufferedIO

6 minute read

背景 原文 http://blog.csdn.net/bengda/article/details/21871413 正常情况下磁盘上有个文件,如何操作它呢? 读取:硬盘->内核缓冲区->用户缓冲区 写回:用户缓冲区->内核缓冲区->硬盘 ...

lseek, fallocate来快速创建一个空洞文件,lseek不占用空间,fallocate占用空间(快速预分配)

1 minute read

背景 在开发过程中有时候需要为某个文件快速地分配固定大小的磁盘空间,为什么要这样做呢? (1)可以让文件尽可能的占用连续的磁盘扇区,减少后续写入和读取文件时的磁盘寻道开销; (2)迅速占用磁盘空间,防止使用过程中所需空间不足。 (3)后面再追加数据的话,不会需要改变文件大小,所以后面将不涉及metadata...

linux文件系统分配策略

less than 1 minute read

背景 如果fdatasync涉及到meta-data的写(例如改变了文件大小),一样需要等data先落盘,再写meta-data。 这里如果data sync很慢,那就会影响其他人写metadata,例如创建新文件的操作。 writeback除外,因为它不保证data比metadata先落盘。 有效降低me...

试用 PGStrom

5 minute read

背景 PGStrom是一个使用GPU进行并行计算的custom scan provider插件,架构如下: 从WIKI上的文档来看,性能提升非常可观。JOIN的表越多,提升效果越明显。 需要安装cuda7.0的驱动,以及toolkit。 参考 https://developer.nvidia.c...

ext4 mount option data mode: journal ordered writeback

4 minute read

背景 ext4支持3种DATA模式,用来区分记录journal的行为。 ext4的journal类似于PostgreSQL的XLOG,可以用来做灾难恢复,以及确保数据的一致性。 文件在ext4中分两部分存储,一部分是文件的metadata,另一部分是data。 metadata和data的操作日志journ...

count nulls or not nulls in one record/row

less than 1 minute read

背景 PGXN里的一个插件,用来计算一条记录或一条记录或一行(必须是同一类型)中空值或非空值的个数。 http://api.pgxn.org/src/count_nulls/count_nulls-0.9.2/doc/count_nulls.md 使用PLPGSQL函数就可以实现同样的功能。 postgre...

从一个数据类型/record/row中解析它对应的列名

2 minute read

背景 从一个数据类型/record/row中解析它对应的列名,这个在触发器中封装SQL是非常有用的。 现在有这样的插件来帮助你完成这样的事情了。 http://api.pgxn.org/src/colnames/colnames-1.5.0/doc/colnames.mmd colnames 1.1.0 ...

PostgreSQL sort or not sort when group by?

8 minute read

背景 朋友的一个CASE,在一个查询中为什么group by用到了sort? 其实这也是优化器的选择问题,只要成本最低,就有可能选择sort。 当然如果hashagg的成本更低,那么就会选择hashagg。 CASE: postgres=# create table t1(c1 int,c2 int,c3...

PostgreSQL 轻量级数字对称加密

1 minute read

背景 之前有位同事向我咨询关于发红包的事情,领红包需要输入验证码。这个码在数据库中预先生成,必须是唯一值。 领红包时更新该记录。 CASE参考: 《fast random data query & delete use ctid in postgresql》 为什么要取随机数字呢?防止用户猜测,领...

Linux内核调试方法总结

less than 1 minute read

背景 Linux内核调试方法总结 原文 http://my.oschina.net/fgq611/blog/113249 digoal’s 大量PostgreSQL文章入口

Get stream replication state from standby

6 minute read

背景 本文的目的是在standby节点获得几个stream replication相关的信息,从而判断当前standby节点的状态: wal receiver进程启动时间, wal receiver进程状态, wal receiver进程的PID, wal receiver进程连接...

PostgreSQL extend function - C example

1 minute read

背景 用C写PostgreSQL扩展,有很多例子可以参考。 其中一些来自PostgreSQL的contrib, 还有一些来自PostgreSQL自身的adt函数。 当然你还可以去pgfoundry和pgxn还有github上找到很多例子。 以PostgreSQL自己提供的函数为例,看看如何找到自己需要的例子...

PostgreSQL can continue when postmaster killed

5 minute read

背景 数据库主进程挂了,原有的连接还能继续操作数据库,你信吗?PostgreSQL可以做到,并且原来的进程对数据库的操作是持久化的,不会丢数据哦。这得益于PostgreSQL的进程结构设计。而且postmaster进程只负责了简单的工作,例如监听端口。 (有人会问了,wal writer, backgroup ...

PostgreSQL How to get upstream node conninfo from standby node

7 minute read

背景 在PostgreSQL的upstream节点可以获得downstream节点的连接信息,当downstream节点主动连接upstream节点时,在upstream节点会有一个sender process负责发送XLOG信息,而这个sender进程其实就是backend process,在pg_stat_a...

MySQL & PostgreSQL choice

11 minute read

背景 本周末阿里巴巴PG技术峰会将有一个MySQL & PostgreSQL的讨论环节,旨在揭示各自的优缺点,为用户在做数据库选型时提供参考。报名的同学不要错过,未报名参加的同学届时可以关注一下会议结束后发布的文章。 本文主要参考wikivs上的MySQL vs PostgreSQL(这个文章目前来说是...

PostgreSQL use UDF combine NoSQL DB’s Computing Power

less than 1 minute read

背景 PostgreSQL数据库如何利用NoSQL数据库的强大计算能力或某些特性呢? 这个问题实际上是因为一种数据库不可能做到适合任何场景,一个企业的不同业务类型可能使用的数据产品也千差万别。昨天和一位朋友聊到一个应用场景,他们有部分数据是存储在aerospike的,在aerospike中做BIT运算是很快的,...

use PostgreSQL trigger manage stock & offer infomation

2 minute read

背景 使用触发器来管理订单和库存信息,可以简化数据交互过程。这个例子来自postgresql server programming。 例如 库存表存储一家水果超市的水果的库存总量数据,以及已供应的量数据,库存总量必须大于等于已供应的量。 订单数据表存储每一笔水果的订单信息。 涉及的操作包括新增订单,修改订...

pg_locks.virtualxid & transactionid

5 minute read

背景 在pg_locks中,你可能会注意到两个字段virtualxid和transactionid,这两个字段到底有什么分别呢? Table 48-61. pg_locks Columns Name Type References Descrip...

PostgreSQL earth distance module

4 minute read

背景 PostgreSQL提供了一个扩展模块earthdistance,实际上是将地球构造为一个标准的圆球体(实际上是扁球体),利用cube或point来表示地球上的点。 其中cube是用来记录球坐标的,通过坐标来表示地球上的点。(实际上是做了一定约束的cube, 即域类型earth) -- Define d...

online DDL (or NOWAIT DDL) in PostgreSQL

8 minute read

背景 为什么需要online DDL呢?或者nowait DDL呢? PostgreSQL为了保证一个请求不至于无休止的等待锁,锁等待使用了队列机制,并且这个在等待队列中的锁也会和以后的会话将要请求的锁发生冲突。 虽然解决了无休止的等待问题,同时也带来一个比较棘手的问题。 例如, 当数据库中存在一个长事务...

PostgreSQL 9.5 new feature - width_bucket return the bucket number

1 minute read

背景 PostgreSQL 9.5 新增的一个函数width_bucket , 用来计算一个值在一个bucket范围内的位置信息,如果这个值超出了给定的范围,返回 0 或者 总buckets+1 。 bucket除了用数字来表示,还可以直接用数组来表示。 Function ...

PostgreSQL trigger/rule based replication configure, DISABLE/ENABLE [ REPLICA ALWAYS ] TRIGGER RULE

1 minute read

背景 当我们使用PostgreSQL做基于规则或触发器的逻辑复制时,如果是双向复制,那么在两个节点的表上都需要创建规则或者触发器,那么就需要注意死循环,例如一条记录在本地插入后,通过触发器发送到远端执行,在远端如果触发器又被触发,就会进入死循环。 例如我之前做的基于触发器和DBLINK的双向复制, http:...

PostgreSQL 数据库安全指南

3 minute read

背景 数据库在一个企业中通常都处于非常核心的位置,数据库安全是一个非常严肃的话题。 从机房、网络、服务器、数据交换设备、操作系统、应用程序、数据库本身,数据库所处的环境非常复杂,安全隐患也非常多。 所以本文将从各个层面帮助大家理解和避免一些常见的安全隐患问题。 本文是PostgreSQL使用安全指导性的文章...

use PostgreSQL async Notification as a chat group

9 minute read

背景 PostgreSQL 提供了一个很有意思的异步消息通信功能。 利用这个功能,可以实现很多有趣的想法,例如离线聊天组,数据逻辑复制,审计日志等。 notify就是往一个指定的通道发消息。 postgres=# \h notify Command: NOTIFY Description: ...

PostgreSQL 9.5 new feature - Writing A Custom Scan Provider

less than 1 minute read

背景 PostgreSQL 9.5 开放了自定义数据扫描的接口,允许用户自定义扫描方法。 PostgreSQL默认提供的扫描方法可以从参数配置中看出: #enable_bitmapscan = on #enable_hashagg = on #enable_hashjoin = on #enabl...

PostgreSQL 9.5 new feature - pg_receivexlog run as synchronous standby

1 minute read

背景 PostgreSQL 9.5 允许pg_receivexlog实时反馈wal的flush位置,并且可以将pg_receivexlog作为sync standby角色来使用。 这样的话,我们可以利用pg_receivexlog来担任sync standby的第三者角色,从而实现更轻量级的数据0丢失以及高可用...

PostgreSQL 9.5 new feature - table mview data sample

3 minute read

背景 PostgreSQL 9.5支持的新特性,数据采样。有了这个功能,如果能结合pg_dump使用的话,可以为比较大的生产数据库创建较小的测试环境。当然,如果是这样的话采样还需要考虑数据关联的问题。 用户可以自定义采样方法,或者使用系统自带的两种采样方法(基于所有数据块的选择性采样,以及基于全表的选择性采样)...

PostgreSQL 审计 - pg_audit module

5 minute read

背景 以前写过一些PostgreSQL审计相关的文章,有些是通过系统自带的参数来配置审计功能的,还有是通过扩展模块来配置审计的,还有通过事件触发器,或者触发器来实现跟踪和审计的。如下: 1. PostgreSQL自带的日志审计,实现语句级别,数据库级别,用户级别的审计。 弊端是审计颗粒度太大。 http:/...

PostgreSQL Oracle 兼容性 自治事务 - partial/sub commit within function

2 minute read

背景 PostgreSQL的函数是原子操作,所以不能像Oracle那样在函数中实现分段提交。 但是如果你要从Oracle迁移到PostgreSQL的话,必然会面临这样的问题,那么怎么办呢? 有几种方法可以来实现,下面是例子: 1. 通过exception来实现分段提交。 create table tbl ...

PostgreSQL 代码性能诊断之 - OProfile & Systemtap

7 minute read

背景 在跑benchmark时,遇到瓶颈如何分析 问题出在哪里呢? 在编译PostgreSQL 时可以使用–enable-profiling开关,打开GCC的profile输出,用作诊断。 《Greenplum PostgreSQL –enable-profiling 产生gprof性能诊断代码》 另外,也...

Roaring Bitmap - A better compressed bitset

2 minute read

背景 A better compressed bitset Bitsets, also called bitmaps, are commonly used as fast data structures. Unfortunately, they can use too much memory. To compe...

PostgreSQL 检查点性能影响及源码分析 - 7

9 minute read

背景 数据库可靠性从何而来? 数据库崩溃后如何恢复,从什么位置开始恢复? 数据库检查点是什么? 检查点要干些什么? 为什么脏数据较多时,检查点会对性能有一定的影响? 什么是full page write? 相信这些问题是搞数据库的同学都想搞明白的。 接下里的一系列文章,围绕检查点展开讲解,讲一讲检查...

PostgreSQL 检查点性能影响及源码分析 - 6

17 minute read

背景 数据库可靠性从何而来? 数据库崩溃后如何恢复,从什么位置开始恢复? 数据库检查点是什么? 检查点要干些什么? 为什么脏数据较多时,检查点会对性能有一定的影响? 什么是full page write? 相信这些问题是搞数据库的同学都想搞明白的。 接下里的一系列文章,围绕检查点展开讲解,讲一讲检查...

PostgreSQL 检查点性能影响及源码分析 - 5

12 minute read

背景 数据库可靠性从何而来? 数据库崩溃后如何恢复,从什么位置开始恢复? 数据库检查点是什么? 检查点要干些什么? 为什么脏数据较多时,检查点会对性能有一定的影响? 什么是full page write? 相信这些问题是搞数据库的同学都想搞明白的。 接下里的一系列文章,围绕检查点展开讲解,讲一讲检查...

PostgreSQL 检查点性能影响及源码分析 - 4

5 minute read

背景 数据库可靠性从何而来? 数据库崩溃后如何恢复,从什么位置开始恢复? 数据库检查点是什么? 检查点要干些什么? 为什么脏数据较多时,检查点会对性能有一定的影响? 什么是full page write? 相信这些问题是搞数据库的同学都想搞明白的。 接下里的一系列文章,围绕检查点展开讲解,讲一讲检查...

PostgreSQL 检查点性能影响及源码分析 - 3

16 minute read

背景 数据库可靠性从何而来? 数据库崩溃后如何恢复,从什么位置开始恢复? 数据库检查点是什么? 检查点要干些什么? 为什么脏数据较多时,检查点会对性能有一定的影响? 什么是full page write? 相信这些问题是搞数据库的同学都想搞明白的。 接下里的一系列文章,围绕检查点展开讲解,讲一讲检查...

PostgreSQL 检查点性能影响及源码分析 - 2

10 minute read

背景 数据库可靠性从何而来? 数据库崩溃后如何恢复,从什么位置开始恢复? 数据库检查点是什么? 检查点要干些什么? 为什么脏数据较多时,检查点会对性能有一定的影响? 什么是full page write? 相信这些问题是搞数据库的同学都想搞明白的。 接下里的一系列文章,围绕检查点展开讲解,讲一讲检查...

PostgreSQL 检查点性能影响及源码分析 - 1

14 minute read

背景 数据库可靠性从何而来? 数据库崩溃后如何恢复,从什么位置开始恢复? 数据库检查点是什么? 检查点要干些什么? 为什么脏数据较多时,检查点会对性能有一定的影响? 什么是full page write? 相信这些问题是搞数据库的同学都想搞明白的。 接下里的一系列文章,围绕检查点展开讲解,讲一讲检查...

PostgreSQL Oracle 兼容性之 - 事件触发器实现类似Oracle的回收站功能

11 minute read

背景 早上一位网友问我,能否让用户在删除表时,不执行删除操作,而是重命名表。 这不就是Oracle的recycle bin的特性吗?即删表时将表放到回收站,以后还可以恢复。 从9.3开始,PostgreSQL提供了event trigger的功能。目前支持几个TAG: ddl_command_start s...

geoip - Geolocation using GeoIP

2 minute read

背景 geoip是使用IP地址查询地理位置的一个插件,提供了以下几个查询函数。 geoip_country_code(inet) - returns country code (2 chars) geoip_country(inet) - returns all country info (code, na...

PostgreSQL 9.5 new feature - BRIN (block range index) index

6 minute read

背景 PostgreSQL 9.5引入的一个全新的索引访问方法BRIN(block range index),这个索引存储了表的连续数据块区间以及对应的数据取值范围。 比如一张表有1000个数据块,我们建议一个BRIN在ID(假设这个表有ID字段)上的索引。 BRIN默认是每128个连续数据块区间存储一个字段...

如何比较PostgreSQL表的定义(compare table ddl)

3 minute read

背景 一位网友提到的需求, 在PostgreSQL中如何比对两个表的定义差异. 如果只比对字段类型, 不比对约束, 触发器, 策略, 权限等其他属性的话, 只需要使用pg_attribute这个catalog即可. 例子 : 创建两个测试表, postgres=# create table tbl1 (i...

PostgreSQL 9.5 new feature - log replication commands

1 minute read

背景 PostgreSQL 9.5新增一个参数, 可以记录流复制协议中用到的命令到日志中. log_replication_commands = on 协议解释详见 : http://www.postgresql.org/docs/devel/static/protocol-replication.h...

PostgreSQL 9.5 使用 import foreign schema 语法一键创建外部表

5 minute read

背景 之前写过一篇使用函数来快速生成外部表的建表DDL的方法. 从metadata中抽取表名, 字段名, 类型, 封装成外部表的建表语句. 感兴趣的朋友可以参考如下 : 《PostgreSQL 使用函数生成 外部表DDL(use function generate foreign table DDL in ...

如何给KVM虚拟机添加disk, cpu, 内存, 网卡设备

2 minute read

背景 本文主要描述一下如何给虚拟机添加硬盘, CPU, 网卡. 例子 添加硬盘 创建硬盘文件 # qemu-img create -f qcow2 -o encryption=off,cluster_size=2M,preallocation=full /data03/kvmdisk/disk02.img 1...

KVM虚拟机CPU开销高性能优化例子 - 配置CPU flag

3 minute read

背景 在装好后, 发现一个问题, 即使我的虚拟机上没跑任何用户进程, 在宿主机上对应的qemu-kvm进程的CPU利用率也有9.0左右. 本文将要介绍一下优化的方法,主要是精简配置,以及设置对应的CPU FLAG。 优化过程 删掉一些不必要的控制器(如USB), 然后添加CPU模块, 使用本地CPU的flag...

install kvm hosts use kickstart in CentOS 6 in text mode

2 minute read

背景 和前面一篇文章类似, 但是本文主要讲的是用kickstart脚本或text模式安装KVM虚拟机操作系统的过程。 http://blog.163.com/digoal@126/blog/static/16387704020153142253971/ 本文讲述使用kickstart文件安装kvm虚拟机, 因...

install kvm hosts use vnc in CentOS 6

2 minute read

背景 本文描述在centos6中部署kvm虚拟机, 使用vnc连接到服务器, 再使用vncviewer连接到kvm vnc安装界面. (原本打算直接连接到kvm vnc安装界面的, 没有成功, 会闪退) 安装过程 在服务器安装必要的包 # yum install -y qemu-img qemu-kvm v...

PostgreSQL primary-standby failback tools : pg_rewind

20 minute read

背景 将要加入PostgreSQL 9.5了 http://hlinnaka.iki.fi/2015/03/23/pg_rewind-in-postgresql-9-5/ https://github.com/vmware/pg_rewind 在数据库变得比较大时, 例如上TB, 如果部署了PostgreS...

don’t mistake the float/double’s display & real value

3 minute read

背景 使用单精或双精类型时, 我们查询出来的值可能与真实存储的值有一定差别. 这里体现了眼见不为实的特征. 以下是float4, float8的输出函数. src/backend/utils/adt/float.c /* * float4out ...

PostgreSQL 线性回归 - 股价预测 1

9 minute read

背景 本文是一个简单的一元线性回归的例子, 需要了解相关理论知识可参考 : 《在PostgreSQL中用线性回归分析(linear regression) - 实现数据预测》 数据来自股票的收盘价. 如果要做多元分析, 请自行增加维度(例如大盘指数,成交量,最低,最高价,价格区间等等都可以那里做回归计算),...

PostgreSQL aggregate function 2 : Aggregate Functions for Statistics

2 minute read

背景 本文将讲解一下统计类的聚合函数. 在此前我分别以相关性函数corr和计算总体/样本 方差, 标准方差的函数variance, var_pop, var_samp, stddev, stddev_pop, stddev_samp做过比较详细的讲解. 例如corr在数据库的物理存储顺序以及逻辑顺序的统计信息...

在PostgreSQL中用线性回归分析(linear regression) - 实现数据预测

11 minute read

背景 首先来个线性回归分析linear regression, 最小二乘法least-squares-fit的小故事(取自百度) : 1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的观...

PostgreSQL aggregate function 1 : General-Purpose Aggregate Functions

3 minute read

背景 PostgreSQL支持较多的聚合函数, 以PostgreSQL 9.4为例, 支持例如一般性的聚合, 统计学科的聚合, 排序集聚合, 假象集聚合等. 本文将对一般性聚合函数举例说明其功能和用法. 以下图表参考 : http://www.postgresql.org/docs/9.4/static/f...

PostgreSQL 函数代码隐藏 - How to control who can see PostgreSQL function’s source code

4 minute read

背景 函数内容比较敏感时, 如何提高函数内容的隐射或安全性呢? 1. 可以使用加密函数的方法来提高安全性. 需要安装额外的插件. 2. 可以使用C函数, 用户无法看到函数内容. 3. 如果以上方法无法在你的生产环境实施的话, 那么可以通过控制pg_proc的权限来控制谁可以看到函数内容. 例如, 我们这里...

fast random data query & delete use ctid in postgresql

14 minute read

背景 朋友公司有一个需求, 需要生成一笔随机的唯一数据, 随机取出来使用, 用完下次不能重复使用. 使用PostgreSQL来实现的话, 有以下方法, 性能OK. 创建测试表, 存放一堆唯一值. postgres=# create table tbl (id int); CREATE TABLE ...

随机记录并发查询与更新(转移、删除)的无耻优化方法

7 minute read

背景 某张表有一批记录,A用户说,这批记录是我要的,但是我只要一条,B用户也说,这批记录是我要的,我也只要一条。 是不是有点像一群男人去逛怡红院,妹子们都是目标,但是今晚只要一位,至于是谁暂时还不确定,虽然不需要抢,但是得锁单。 被动分配式,等着妈妈给你分一个。 主动挑选式,主动到姑娘们群里挑,就涉及到锁单...

zfs performance tuning basic

8 minute read

背景 ZFS优化的一些基础常识. zfs模块每个参数的讲解, 包括IO调度, ARC的优化 man /usr/share/man/man5/zfs-module-parameters.5.gz 例如zfs将IO分为5个队列, 针对每个队列可以通过模块参数来控制IO调度, 例如为了提高同步写的能力, 同...

ZFS case : top CPU 100%sy, when no free memory trigger it.

12 minute read

背景 最近在一个系统频频遇到负载突然飙升到几百, 然后又下去的情况. 根据负载升高的时间点对应的数据库日志分析, 对应的时间点, 有大量的类似如下的日志 : "UPDATE waiting",2015-01-09 01:38:47 CST,979/7,2927976054,LOG,00000,"process...

Back to Top ↑

2014

use event trigger function record user who alter table’s SQL

1 minute read

背景 如果你要记录用户表被DDL修改定义, 设置默认值, 等等alter table可以完成的工作时的记录, 可以使用事件触发器来达到这个目的. 例子如下 : postgres=# create extension hstore; postgres=# create or replace funct...

PostgreSQL 事件触发器 - DDL审计 , DDL逻辑复制 , 打造DDL统一管理入

3 minute read

背景 DDL是非常重的操作,(锁大,或者会导致TABLE REWRITE导致消耗大量资源,影响大,例如DROP,TRUNCATE)也是数据库的使用过程中需要关注的。 通常企业会对DDL做一定的限制,不允许某些用户执行,或者不允许从网络登录的用户执行DDL。 同时DDL还有被审计的需求,所有的DDL可能都要记录...

Install OpenVSwitch into CentOS 7 userspace

2 minute read

背景 之前写过一篇较详细的CentOS 6下安装openvswitch的文章. http://blog.163.com/digoal@126/blog/static/16387704020147111358858/ 这里简单的介绍一下在centos 7下的安装, 其实差不多. 只是目前openvswitch没...

PostgreSQL 的 rpm(yum) 安装方法

1 minute read

背景 一般情况下, 我们安装PostgreSQL都是通过源码编译安装的, 如果你的场景中不允许使用make或gcc的话, 可以选择下载rpm包安装或下载EDB提供的bin文件安装. EDB : http://www.enterprisedb.com/products-services-training/pgd...

PostgreSQL 密码安全指南

6 minute read

背景 数据库密码管理是数据库安全的重要环节之一. 例如简单密码策略应该包含 : 1. 密码复杂度 2. 密码验证失败延迟 3. 密码更换周期, 以及重复使用策略 4. 密码验证失败几次后锁定, 以及解锁时间等 5. 设置密码时防止密码被记录到数据库日志,history,~/.psql_history或...

PostgreSQL数据库在上市公司重要应用中的SOX审计

less than 1 minute read

背景 上市公司的审计是非常重要的事务, PostgreSQL应用在重要数据库中完全没有问题, 但是要过SOX审计的话, 还是需要注意一些东西的. 如果您公司打算上市, 并且在审计范围内的系统使用了PostgreSQL数据库的话, 需要注意的事项, 包含的文档以及工作流. SOX审计主要是审查系统是否存在风险. ...

PostgreSQL Windows AD认证配置

1 minute read

背景 在企业中,如果要使用统一的账户管理,可以考虑LDAP或者WINDOWS AD域进行管理。 PostgreSQL数据库也支持LDAP和AD的认证手段。 之前介绍了PostgreSQL Linux LDAP认证的配置。 PostgreSQL LDAP simple bind认证配置 PostgreSQL...

PostgreSQL PGCluster-II like Oracle’s RAC can used in PG-XC or other distributed db based pg improve DBsys’s Availbility

less than 1 minute read

背景 昨天和一位朋友聊天, 得知他们想在PostgreSQL 中加入类似Oracle RAC的功能, 这个功能的好处之一: 当一台主机DOWN掉后, 可以平滑的切到另一台主机, 不需要中断会话, 中断未提交的事务等. 当然, 不中断事务的话, 可能对性能影响较大, 因为事务信息必须在多个主机间同步. 不中断...

PostgreSQL 触发器应用 - (触发器WHEN)前置条件过滤跟踪目标记录

5 minute read

背景 回答一位朋友问的一个问题 : 写一个触发器,将当前的表中某一行的一个字段被修改了,然后将该行记录插入到另一张表里面?如何写呢. 要对触发器用法有详细的了解, 请参考 : 1. http://blog.163.com/digoal@126/blog/static/16387704020132835479...

PostgreSQL 闪回 - flash back query emulate by trigger

18 minute read

背景 闪回功能虽然听起来有点鸡肋,但是在关键时刻确可以救命。 比如数据被SQL注入误修改,或者被人为的误操作,如何能快速恢复到正常的状态呢? 技术手段较多 利用UNDO,MVCC的OLD VERSION,触发器,甚至REDO都是可以做到的思路。 今天群里又聊到了PostgreSQL的闪回这个东西, 我之前...

tunctl , bridge , sub interface 在multi-network环境中的使用, 无需路由打通不同主机的不同网段

2 minute read

背景 通常,不同网段要打通,不是路由就是转发。 但是有些时候环境限制,可能无法使用路由来打通。 而使用转发,又会损失一定的性能,那么怎么办呢? 本文将描述一下,在不同主机内的虚拟机,如何通过配置tap设备来打通不同网段的例子。 在使用了网桥的情况下, 虚拟机配置的网段和主机不同, 同时主机又没有trunk...

Install OpenVSwitch on CentOS 6.x x64

4 minute read

背景 前面两篇文章介绍了OpenvSwitch的原理,用途。 本文包含openvswitch的模块安装, 管理软件安装. 玩转起来。 安装过程 安装依赖包, 注意内核版本匹配 : # uname -r 2.6.32-431.el6.x86_64 # yum install -y rpm-build...

USE OpenVSwitch Isolating VM traffic using VLANs

2 minute read

背景 本文为转载文章,主要讲解的是虚拟交换机产品OpenVSwitch 隔离网络的用法。 http://openvswitch.org/support/config-cookbooks/vlan-configuration-cookbook/ 原文 openvswitch在虚拟化环境中, 使用vlan隔离虚拟...

OpenvSwitch readme & faq

3 minute read

背景 本文为转载文章,主要讲解的是虚拟交换机产品OpenVSwitch 简称OVS的原理,OVS在虚拟化技术中非常有用。 如果不使用OVS,通常还可以使用bridge与net namespace以及流控的工具来达到类似的效果。 http://blog.csdn.net/majieyue/article/det...

replace offline or FAULTED device in ZPOOL

15 minute read

背景 今早发现一台zfsonlinux主机的zpool其中一块硬盘写错误次数过多变成FAULTED状态了, raidz1的话变成了DEGRADED状态. 但是hot spare还是AVAIL的状态, 也就是说hot spare没有自动用起来. (后来发现确实如此, hot spare不会自动使用, 需要手工干...

GreenPlum 4.3.2.0 installed in CentOS 6.x x64

4 minute read

背景 greenplum从开源的bizgres发展而来, 早些年被EMC收购, 更名为Pivotal Greenplum Database. 有兴趣的朋友可以到我的分享下载bizgres的源码. http://pan.baidu.com/s/13XU8m 2008年第一次接触GreenPlum的时候, 性能...

Postgres-XL you can only see databases with CREATE privilege

3 minute read

背景 Postgres-XL改写了SQL parser, 并新增了storm_catalog这个catalog. 目的可能是提高安全性, 例如pg_database这个表, 在storm_catalog中创建一个同名视图, 正常情况下会先访问pg_catalog.pg_database, 但是因为改了parse...

Why Large synchronous writes are slow when a slog is present?

2 minute read

背景 因为zfs对zil的使用有阈值限制, 例如单次提交的写超过阈值则直接写VDEV. 还有如果设置了logbias=throughput也是直接写vdev的. 参考 Note that this issue seems to impact all ZFS implementations, not just...

flashcache usage guide

21 minute read

背景 前几天写过一篇关于使用flashcache提升PostgreSQL IOPS性能的文章 http://blog.163.com/digoal@126/blog/static/1638770402014528115551323/ 本文将要介绍一下flashcache的使用注意事项, 更好的使用flashc...

PostgreSQL xlog $PGDATA and zfs snapshot based central backup & PITR case

13 minute read

背景 最近在写一个集中式的PostgreSQL基于块的增量备份的CASE. (因Oracle有块级别增量备份, PG这块是个空白, 不过可以通过第三方软件来实现) 视频参考6月28日的杭州PG交流视频 http://pan.baidu.com/share/home?uk=1982970774#categor...

ZFS df

1 minute read

背景 使用zfs的话, df输出的数据Size那列是会变的, 指当前dataset的空间占用加上整个pool的剩余空间. 所以使用比率也是动态变化的. 如果nagios使用了类似以下监控, 也不会存在问题. (例如你可能担心每个dataset如果使用均衡, 使用比率 dataset_size/zpool_siz...

PostgreSQL IOPS performance tuning by flashcache

8 minute read

背景 flashcache缺点之一, 一个SSD区域只能绑定到一个块设备或逻辑卷,PV. 不能像ZPOOL那样共享一个SSD区域. 其他可选cache软件, bcache, dmcache. 注意, 建议EXT4挂载项: nobarrier,discard https://github.com/face...

ZFS fsync IOPS performance in FreeBSD

5 minute read

背景 我在上一篇文章讲了一下ZFS的性能优化. 文章提到在Linux (CentOS 6.5 x64)中, ZFS的fsync调用性能不佳的问题, 完全不如ext4, 于是在同一台主机, 我安装了FreeBSD 10 x64. 使用同样的硬件测试一下fsync的性能. PostgreSQL的安装参考 htt...

ZFS (sync, async) R/W IOPS / throughput performance tuning

20 minute read

背景 本文讨论一下zfs读写IOPS或吞吐量的优化技巧, (读写操作分同步和异步两种情况). 影响性能的因素 1. 底层设备的性能直接影响同步读写 iops, throughput. 异步读写和cache(arc, l2arc) 设备或配置有关. 2. vdev 的冗余选择影响iops, through. ...

ZFS module parameters in Linux (OR kernel parameter in FreeBSD or zfs-in-kernel OS)

5 minute read

背景 ZFS 在linux中以模块的形式加载, ZFS的内核参数没有整合到linux内核参数中, 所以无法使用sysctl来修改. 只能通过修改模块的参数来变更这些参数. ZFS内核参数的意义可参见modinfo $modname, 或者直接查看zfs源代码. 有些参数是根据系统读数设定的(如内存) 与Li...

ZIL (ZFS intent log) zil.c

2 minute read

背景 ZIL或称SLOG, 被用于提升ZFS系统的离散fsync性能. 类似数据库的redo log或wal. 注意 1. 每个dataset对应一个zil, 也就是说一个zpool有多个zfs的话, 如果有log设备, 那么在log设备中实际上包含了多个ZIL entry. 数据写入ZIL后(fsync...

ZFS ARC & L2ARC zfs-$ver/module/zfs/arc.c

10 minute read

背景 可调参数, 含义以及默认值见arc.c或/sys/module/zfs/parameter/$parm_name 如果是freebsd或其他原生支持zfs的系统, 调整sysctl.conf. parm: zfs_arc_min:Min arc size (ulong) parm...

ZFS 12SATA JBOD vs MSA 2312FC 24SAS

12 minute read

背景 今天拿了两台主机PK一下zfs和存储的性能. ZFS主机 联想 Reno/Raleigh 8核 Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz 24GB内存 12*SATA 2TB, 其中2块RAID1, 另外10块作为zpool (raidz 9 +...

ZPOOL health check and repair use scrub

3 minute read

背景 zpool健康检查(scrub)主要用于通过checksum来检查zpool数据块的数据是否正常, 如果vdev是mirror或raidz的, 可以自动从其他设备来修复异常的数据块. 由于健康检查是IO开销很大的动作, 所以建议在不繁忙的时候操作(scrub只检查分配出去的数据块, 不会检查空闲的数据块, ...

ZFS thin provisioning / sparse ZVOL

3 minute read

背景 zfs支持在zpool基础上创建块设备或volume. 这个volume同样拥有快照等zfs的功能. 正常情况下创建zvol时, -V指定的空间会直接从zpool中取出, 确保这个zvol可以使用指定的空间, 而不会导致空间溢出的问题. [root@db- zp1]# df -h Files...

Install ZFS on CentOS use yum

3 minute read

背景 使用打包好的安装, 好处是加了dkms支持. 一些配置也都弄好了. 以centos 6.x为例 需要访问外网. $ sudo yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release$(rpm...

PostgreSQL centrol PITR backup with kvm and zfs and nfs or zvol

less than 1 minute read

背景 在实际的生产环境中, 当数据库越来越多, 越来越大. 备份可能会成为比较大的问题, 传统的逻辑备份对于大的数据库不适用(因为备份和还原可能是比较耗时的, 而且也不能回到任意时间点,还会造成数据库膨胀(长时间repeatable read iso), 好处是可以跨平台恢复, 可选恢复表等). 但是基于XL...

test zfs dedup vs compress which suit in your environment

2 minute read

背景 你的数据适合压缩还是适合开启去重? 这个可以拿到你的数据进行评估, 在一个已有使用zdb -S zpname进行评估, 然后使用zdb -DD产生一个报告. 例如 : 对zp1 pool的数据块, 采样评估 [root@db- ~]# zdb -S zp1 ^C 报告deduplicat...

使用 ssh -R 建立反向/远程TCP端口转发代理

4 minute read

背景 ssh是一个非常棒的工具, 不但能建立动态转发, 例如chrome的Switchy插件用到的就是这个技术. http://blog.163.com/digoal@126/blog/static/163877040201141821810103/ 还能建立TCP的转发隧道, 例如我以前写过的关于使用ssh...

PostgreSQL LDAP认证之 search bind配置

5 minute read

背景 在企业中,如果要使用统一的账户管理,可以考虑LDAP或者WINDOWS AD域进行管理。 PostgreSQL数据库也支持LDAP的认证手段,支持simple bind和search bind。 本文介绍一下PostgreSQL的search bind配置方法。 上一篇BLOG介绍了simple bi...

PostgreSQL LDAP认证之 simple bind配置

2 minute read

背景 在企业中,如果要使用统一的账户管理,可以考虑LDAP或者WINDOWS AD域进行管理。 PostgreSQL数据库也支持LDAP的认证手段,支持simple bind和search bind。 本文介绍一下PostgreSQL的simple bind配置方法。 上一篇BLOG介绍了OpenLDAP ...

OpenLDAP 使用方法

9 minute read

背景 在企业中,如果要使用统一的账户管理,可以考虑LDAP或者WINDOWS AD域进行管理。 PostgreSQL数据库也支持LDAP的认证手段。 本文介绍一下Linux下面LDAP server的使用,数据如何导入LDAP SERVER。 前面一篇BLOG讲了一下使用源码安装openldap, 本文将讲...

OpenLDAP 安装指南

2 minute read

背景 在企业中,如果要使用统一的账户管理,可以考虑LDAP或者WINDOWS AD域进行管理。 PostgreSQL数据库也支持LDAP的认证手段。 本文首先介绍一下Linux下面LDAP server的包安装方法。 rpm安装 # rpm -qa|grep openldap openldap-debugi...

set zfs’s property snapdir to hidden or visible see snapshot directory

2 minute read

背景 zfs的snapshot, 以往我们可以通过clone或者rollback来查看snapshot的内容. 当然不推荐rollback, 因为会导致zfs回退. 其实还有一种方法来查看snapshot的内容, 那就是设置zfs的snapdir属性, 如果开启了这个属性的话, 可以直接在zfs目录的.z...

zpool use 4KiB sector

8 minute read

背景 默认情况下, 创建top-level dev如果不指定扇区大小, 那么使用vdevs中最小的扇区大小作为zpool的扇区大小. 但是某些设备虽然是4K的扇区, 但是可能内核读到的扇区大小可能是512字节. 这样的话, 将对影响有比较大的影响, 所以在这种情况下, 创建zpool时可以指定扇区的大小....

zpool use vdevs distribute

1 minute read

背景 zpool并不限制根vdev的数量, 并且也不限制他们的属性(如mirror or raidz), 但是属性不同会有提示. 例如 [root@db-172-16-3-150 ~]# zpool create zpp mirror /ssd1/zfs.1 /ssd1/zfs.2 [root@db-...

use zfs snapshot rollback postgresql’s primary to old status in PG HA

less than 1 minute read

背景 前几天讲过zfs的snapshot用作PostgreSQL PITR, 使用接近还原点的snapshot可以减少xlog的apply, 缩短数据库的恢复时间. 其实snapshot还有一个作用, 用作流复制HA的主备角色切换后避免因为XLOG的差异导致old primary无法切换成standby角色. ...

ZFS deduplicate

3 minute read

背景 前一篇BLOG介绍了ZFS的压缩特性, 本文将介绍一下ZFS的另一个特性deduplicate, 同compress的目标差不多, 都是节约存储空间的. 但是deduplicate带来的副作用会比较明显, 同时deduplicate的数据不是atomic事务写入的, 可能导致数据损坏. 一般不建议开启d...

ZFS compression algorithm lzjb, gzip, gzip-[0-9], zle, lz4 compare

1 minute read

背景 zfs提供几种压缩算法, lzjb, gzip, gzip-[0-9], zle, lz4 其中默认的压缩算法为lzjb, 这个是ZFS的作者Jeff Bonwick提供的, gzip默认的压缩级别为6, 或者指定压缩级别. 这里主要测试一下压缩时间和压缩比. 注意, 压缩选项默认是关闭的...

zfs pool self healing and scrub and pre-replace bad-disks

6 minute read

背景 ZFS的又一个强大之处, 支持坏块的自愈 (如果使用了冗余的话,如raidz1, raidz2, raidze, ... 并且正确的块可通过ECC重新计算出的话.). 同时ZFS具备类似ECC DIMM的校验功能, 默认使用SHA-256 checksum. 使用scrub来检测ZPOOL底层的块...

send and receive ZFS snapshot between machines

2 minute read

背景 zfs的另一个强大的功能, 将snapshot导出到文件, 再将文件恢复成dataset. 导出时支持管道传输, 所以可以很方便的实现跨主机传输. 例子 : 查看A主机的snapshot. [root@db-172-16-3-150 mnt]# zfs list -t snapshot ...

ZFS used as block device - ZVOL

2 minute read

背景 前面两篇BLOG介绍了ZFS的性能提升原理和测试, ZFS的快照回滚和克隆方法. http://blog.163.com/digoal@126/blog/static/163877040201441694022110/ http://blog.163.com/digoal@126/blog/static...

zfs on CentOS 6.5 x64 compare performance with ext4 use postgresql pgbench

13 minute read

背景 zfs可以认为是raid和文件系统的结合体. 解决了动态条带和数据与校验位的一致性问题, 所以具有极高的可靠性和性能. https://pthree.org/2012/12/05/zfs-administration-part-ii-raidz/ 因为zfs需要接管硬盘, 所以在有RAID卡的环境中,...

索引顺序扫描引发的堆扫描IO放大背后的统计学原理与解决办法 - PostgreSQL index scan enlarge heap page scans when index and column correlation small.

7 minute read

背景 通过B-TREE索引扫描可能会带来了巨大的heap page scan数目,即IO的放大. 为什么呢? 请接下去看完本文揭晓答案。 IO放大的后果: 如果数据库的单个数据块(block_size)很大的话, 这种情况带来的负面影响也将被放大. 例如32k的block_size显然比8k的block_...

PostgreSQL 回收站功能 - 基于HOOK的recycle bin pgtrashcan

2 minute read

背景 PostgreSQL 本身不支持类似Oracle recycle bin这样的回收站机制. 但是我们可以通过事件触发器来实现同类功能,参考 《PostgreSQL 事件触发器 - 实现类似Oracle的回收站功能》 本文将介绍使用PostgreSQL 动态模块, 以及_PG_init函数来创建钩子程序...

PostgreSQL pg_bulkload speed test

7 minute read

背景 我以前写过一篇BLOG关于如何提高PostgreSQL的导入速度, 如 1. 提高写入并行度, 同时使用数据库分组提交, 设置postgresql.conf commit_delay = 10 # range 0-100000, in microseconds...

PostgreSQL chinese full text search 中文全文检索

2 minute read

背景 首先要感谢amutu以及其他为中文检索贡献的兄弟们, 我在之前写过一些关于PG中文全文检索的文章, 比较繁琐. 《PostgreSQL 使用 nlpbamboo chinesecfg 中文分词》 使用amutu的zhparser就比较方便了, 分词的部署比以前简单很多. 具体可参看amutu 的BLOG...

PostgreSQL log AND trace AND debug 详解

9 minute read

背景 PostgreSQL在代码中放了大量的输出数据库运行状态的函数, 例如这段代码, 在参数文件postgresql.conf中开启了log_connections的情况下, 将输出数据库接收到连接请求时的客户端主机和端口信息. src/backend/postmaster/postmaster.c ...

Back to Top ↑

2013

PostgreSQL SERIALIZABLE ISOLATION LEVEL introduce

12 minute read

背景 Serializable 隔离级别 目标是模拟serializable的隔离级别事务的提交顺序转换为串行的执行顺序. 例如 : Start session a serializable Start session b serializable Session a SQL … Session...

stap trace blockdev’s iops

less than 1 minute read

背景 群里的一个问题, 用dd来测试一个块设备的写性能, 因为可能会被os cache误导. 所以建议同时使用stap来跟踪一下. 当然stap会带来一定的开销, 得到的实际结果会低于实际的IO水平. [root@db-172-16-3-150 io]# grep -r vfs.write.return ...

USE blockdev –setra 0 and systemtap test real BLOCKDEV iops

3 minute read

背景 我在上一篇文章中讨论了关于调整CPU亲和来降低systemtap带来的性能影响, 本文是一个扩展, 还是用到那个例子, 但是我增加了IO响应时间的柱状图输出, 从柱状图分析IO的一些”奇妙”的东西. 首先启动数据库, 亲和设置为1 pg93@db-172-16-3-150-> taskset -c...

Systemtap examples, Profiling - 6 Tracking System Call Volume Per Process

1 minute read

背景 例子来自syscalls_by_pid_procs.stp 脚本, 用以跟踪系统中所有的系统调用, 输出系统调用数前5的进程信息, 以及系统调用次数, 系统调用名. 在前面的例子中讲过按照系统调用次数排序输出, http://blog.163.com/digoal@126/blog/static/163...

Systemtap examples, Profiling - 5 Tracking Most Frequently Used System Calls

1 minute read

背景 例子来自topsys.stp 脚本, 上一篇的例子是选取一部分带来系统等待的系统调用作为事件, 输出等待事件排行前20的进程信息. 本文说的这个例子把所有的系统调用作为触发事件, 统计所有系统调用的调用次数, 输出前20位系统调用的名称和调用次数. 脚本内容以及注解 : [root@db-1...

Systemtap examples, Profiling - 4 Monitoring Polling Applications

8 minute read

背景 例子来自timeout.stp 脚本, 输出系统中指定的系统调用(poll, select, epoll, itimer, futex, nanosleep, signal)等待次数排行前20的进程以及各系统调用的等待次数的统计信息. 脚本内容以及注解 : [root@db-172-16-3-15...

Systemtap examples, Profiling - 3 Determining Time Spent in Kernel and User Space

1 minute read

背景 例子来自thread-times.stp 脚本, 该脚本通过对CPU时钟的跟踪, 使用user_mode()函数判断探针是否为用户模式触发的, 从而区分用户CPU开销还是内核CPU开销. 周期输出用户和系统CPU开销占比以及整个系统的cpu时钟周期统计. 比如我们想知道系统中那个进程最吃CPU资源, 是...

Systemtap examples, Profiling - 2 Call Graph Tracing

1 minute read

背景 例子来自para-callgraph.stp 脚本, 该脚本用以输出指定函数的call,return之间发生的所有函数调用情况, 类似在PostgreSQL plpgsql中输出call stack. 脚本内容以及注解 : [root@db-172-16-3-150 network]# cd /u...

Systemtap examples, Profiling - 1 Counting Function Calls Made

1 minute read

背景 接下来开始对systemtap example的另一个分类Profiling做一些例子的讲解. 例子来自functioncallcount.stp 脚本, 该脚本通过函数的调用情况分析内核活动. 由于没有终止时间, 同时使用统计类型性能不如数组自增, 所以我做了相应的修改. (但是请注意数组以及全局标量...

Systemtap examples, DISK IO - 7 Periodically Print I/O Block Time

7 minute read

背景 例子来自ioblktime.stp 脚本, 该脚本用以统计每个块设备的io块请求情况, 请求次数, io操作耗费的时间以systemtap的统计变量进程存储, 可以得到块设备上io块请求的平均时间, 总时间, 最大, 最小时间, 次数, 柱状图等等. 因为内核支持合并块操作, 所以通过ioblock.r...

Systemtap examples, DISK IO - 5 Monitoring Reads and Writes to a File

less than 1 minute read

背景 例子来自inodewatch.stp 脚本, 该脚本用以监控单个文件的读写, 需要使用vfs.read和vfs.write probe alias中的dev和ino变量对文件进行判断. dev是设备号, ino是文件的inode. dev和inode可以通过stat获得, 例如 [root@db...

Systemtap examples, DISK IO - 4 I/O Monitoring (By Device)

2 minute read

背景 例子来自traceio2.stp 脚本, 该脚本使用vfs.write, vfs.read事件, 在handler中输出指定设备的读写情况, dev号可以从stat -c中获得. [root@db-172-16-3-150 oracle_fdw-0.9.9]# man stat STAT(1) ...

Systemtap examples, DISK IO - 3 Track Cumulative IO

3 minute read

背景 例子来自traceio.stp 脚本, 该脚本通过事件vfs.read.return和vfs.write.return统计进程的累计读写调用情况. 输出读写前10的进程信息以及累计的读, 写的字节数信息. 注意原始的例子中没有对devname做过滤, 所以读写包含了cache的操作, 也没有对retur...

Systemtap examples, DISK IO - 2 Tracking I/O Time For Each File Read or Write

6 minute read

背景 例子来自iotime.stp 脚本, 该脚本用以监控每个进程对文件的读写字节数以及耗费的时间. 注意syscall.read和syscall.write还提供了请求读写字节数的上下文变量($count), 脚本中没有, 我增加了请求读写字节数的输出. 修改后的脚本内容以及注解 : [root@d...

Systemtap examples, DISK IO - 1 Summarizing Disk Read/Write Traffic

7 minute read

背景 本文开始给大家讲一下linux系统中disk io相关的跟踪范例. 例子来自disktop.stp 脚本, 该脚本作者的用意是输出系统中IO请求字节数前10的进程信息以及对应的块设备信息. 但是这个脚本存在一个严重的BUG, 输出时对应的设备名其实是没有意义的, 它只是当时的设备号, 因为一个进程可...

Systemtap kernel.trace(*) events source code

3 minute read

背景 我们知道内核trace event可以使用stap -l或-L查看, 而trace的源代码则可以在/usr/src/debug/kernel-2.6.32-358.el6/linux-2.6.32-358.el6.x86_64/include/trace/events中查找到. (关注你的内核版本. 目...

Systemtap examples, Network - 5 Monitoring Network Packets Drops in Kernel

4 minute read

背景 例子来自dropwatch.stp脚本, 可用于分析网络协议栈中丢包的确切位置. 确切的位置是使用symname或者symdata将内存地址翻译出来的函数信息, 翻译必须使用stap --all-modules选项以便加载所有的模块的符号表. --all-modules ...

Systemtap examples, Network - 4 Monitoring TCP Packets

4 minute read

背景 例子来自tcpdumplike.stp脚本, 当tcp.receive事件触发后, 取出类似tcpdump输出的源ip, 目的ip, 源端口, 目的端口, 以及6个tcp包的控制比特位信息. tcp.receive alias实际上包含2个内核函数, 分别代表ipv4和ipv6. kernel.f...

Systemtap examples, Network - 1 Network Profiling

3 minute read

背景 systemtap-testsuite包收集了大量的stp脚本, 可直接用于跟踪以下分类的内容 : = AUDIT = = AUTOFS = = BACKTRACE = = CALLGRAPH = = CPU = = DEVICE = = DISK = = FILE = ...

System.map file is a symbol table used by the kernel

1 minute read

背景 System.map文件中包含了符号以及对应的在内存中的地址表信息. 例如 [root@db-172-16-3-150 ~]# less /boot/System.map-$(uname -r) [root@db-172-16-3-150 ~]# uname -r 2.6.32-358.el...

SystemTap Errors Introduce

10 minute read

背景 SystemTap的常见错误大致可以分为两类. 一, 解析和语义阶段产生的错误 这类错误发生在systemtap解析stp脚本以及转换成C代码的阶段. 错误举例 1. 语义错误, 错误表现 parse error: expected foo, saw bar 例如,...

Systemtap Function thread_indent:string(delta:long)

less than 1 minute read

背景 thread_indent:string(delta:long)是一个非常有用的函数, 通过thread_indent:string(delta:long)可以非常方便的看出函数调用的嵌套以及层次结构. 输出结构为: time offset(microseconds), 进程名, 进程id, n个空格....

SystemTap Flight Recorder Mode

3 minute read

背景 SystemTap's flight recorder mode allows you to run a SystemTap script run for long periods and just focus on recent output. The flight recorder m...

PostgreSQL bulk COPY load Bottleneck by extend lock waiting

14 minute read

背景 今天在pg大会上和一位兄弟聊天的时候了解到他们有大的数据入库需求, 入库文件约300MB每个, 但是导入数据库速度只有约100MB每秒, 即使使用unlogged table也没有多大的提高, 而硬盘拷贝的速度远远不止这个速度. 接下来分析一下原因. 从分析来看, 目前批量数据导入到瓶颈是在数据文件的扩展...

PostgreSQL Dynamic Tracing using systemtap env prepare

5 minute read

背景 本文介绍一下PostgreSQL动态跟踪环境的搭建, 方便对PG内核动态跟踪感兴趣的童鞋参阅. 环境准备 : 一准备systemtap环境 : 首先要确定内核版本 [root@db-172-16-3-150 ~]# uname -r 2.6.32-358.el6.x86_64 ...

SystemTap Tapset: common used functions - 2

6 minute read

背景 function::format_ipaddr — Returns a string representation for an IP address function::ip_ntop — Returns a string representation for an IPv4 address ...

SystemTap Tapset: common used functions - 1

5 minute read

背景 Tapset这本手册很全, 罗列了大量的函数, 探针别名, 本文抽取一些常用到的函数, 方便查找 : function::asmlinkage — Mark function as declared asmlinkage asmlinkage()函数在kprobe探针中常用, 在取函数变量前调用,...

Systemtap EXP: PostgreSQL IN-BUILD mark Class 6 - lock

16 minute read

背景 本文要讲的是PostgreSQL内建的锁类别的探针,以及使用stap跟踪的方法. 正文 PostgreSQL锁类别探针分为轻量锁, 重量锁, 以及死锁的探针. 轻量锁探针 : probe lwlock__acquire(LWLockId, LWLockMode); 当得到轻量锁时触发,...

Systemtap EXP: PostgreSQL IN-BUILD mark Class 4 - buffer

7 minute read

背景 本文开始讲PostgreSQL内建探针的另一个分类, buffer. buffer分类探针中包含: 1. buffer读开始, 结束; 2. shared buffer flush开始, 结束(结束点指将数据交付到内核, 并非磁盘, 所以如果要计算flush时间的话, 这个探针不合适)(在F...

Systemtap EXP: PostgreSQL IN-BUILD mark Class 2 - query

3 minute read

背景 本文要讲的是PostgreSQL内建探针的第二个分类 : query. 相比第一个分类transaction, query更加精细. 例如函数调用, 可以精细到函数内部的每个SQL, 以及嵌套函数的最底层的SQL等. 包含SQL查询开始, 结束, 语义解析开始, 结束, 重写开始, 结束, plan开始...

Systemtap EXP: PostgreSQL IN-BUILD mark Class 1 - transaction

6 minute read

背景 本文开始将以PostgreSQL内建的探针为例, 探讨一下围绕这些探针可以实现哪些想要的功能. 使用systemtap时, 需要把postgresql mark name中的-换成两个下划线. 第一个分类是事务相关探针 : Name Paramet...

Systemtap EXP: trace PostgreSQL netflow per session or per sql

4 minute read

背景 前面几篇blog介绍了使用systemtap统计PostgreSQL单挑SQL以及整个会话的io操作. 本文将要介绍一下对数据库单条SQL的网络传输包, 传输字节数的统计. 以及整个会话的统计. 需要用到的探针如下 : tapset/tcp.stp /** * probe tcp.r...

Systemtap EXP: Trace PostgreSQL iostat per SQL statement 2

6 minute read

背景 本例为上一篇blog的扩展, 可输出到块设备, 以及区分os cache的io请求操作. 相当精细. stp文件如下 : global io_stat1%[120000] // 非cache读写字节数(单SQL) global io_stat11%[120000] // 非cache读写耗...

Systemtap EXP: Trace PostgreSQL iostat per SQL statement 1

5 minute read

背景 本文是一个systemtap例子 , 左右如下 : 跟踪PostgreSQL每条sql产生的 : io请求次数, 次数/s io请求字节数, 字节数/s 跟踪会话产生的总的 : io请求次数, 次数/s io请求字节数, 字节数/s 过滤os cache的读和写, ...

Systemtap: Generating Instrumentation module(.ko) for Other Computers

2 minute read

背景 在生产环境中, 如果服务器比较多, 同时都需要运行一样的stap脚本的话, 有几个弊端, 1. 每台机器都需要相应的内核开发包, debug包等. 2. 每次运行stap 脚本时都需要经历5步骤, 消耗资源. http://blog.163.com/digoal@126/blog/...

Systemtap : stap PROCESSING 5 steps introduce

21 minute read

背景 stap处理stp时, 分5步进行, 以下取自man stap : 第一步 : The translator begins pass 1 by parsing the given input script, and all scripts (files named *.stp) found in...

Systemtap BUG? : stap -R no effect

4 minute read

背景 在查看stap man手册时, 对手册上所述的stap处理流程的第一部分验证, 发现描述和测试结果不符有1处. 1. 手册上所述stap -R 指定内核版本可以让stap根据指定的内核版本搜索-I 指定目录的相关子目录, 发现这个完全不符. 手册上的描述如下 : PROCESSING Th...

PostgreSQL Systemtap example : Customize probe connect and disconnect

1 minute read

背景 本文要讲一下PostgreSQL的定制化探针, 系统自带的探针以后再讲. 源码下过来之后, 在编译前, 我们能看到数据库探针的定义文件在src/backend/utils/probes.d中. probes.h文件是编译时生成的, 所以要添加探针的话, 只需要修改probes.d文件, 本文添加...

Systemtap Formatted output

4 minute read

背景 本文要讲的是Systemtap中的格式话输出函数 : print, println, printf, printd, printdln, sprint, sprintf. 9.1 print print函数可用于打印输出任何类型, General syntax: print ...

Systemtap Statistics (aggregates) Data Type

6 minute read

背景 统计类型在以前写的几篇BLOG进行过述过. 可参考 : http://blog.163.com/digoal@126/blog/static/16387704020138310438924/ http://blog.163.com/digoal@126/blog/static/163877040201...

Systemtap Associative array Data Type

4 minute read

背景 数组变量在stap启动时以哈希表形式初始化, 在handler中使用数组时不需要再动态创建. Associative arrays are implemented as hash tables with a maximum size set at startup. Associative a...

Systemtap Statement types

9 minute read

背景 本文要讲的是systemtap中的语句类型, 例如在循环中使用的break, continue, 在handler中使用的next, 函数中使用的return, 等. Statement types Statements enable procedural control flow within f...

Systemtap Preprocessor macros

2 minute read

背景 上一篇讲了预处理阶段的条件预编译, 本文要讲的也是stap预处理阶段的事务: 宏定义. 宏定义在stap中算是个实验特性, 前面我们提到的规则表达式匹配操作也是实验特性. 另外要注意宏定义的顺序, 它在条件预编译前完成. 所以如果宏定义出错的话不会进行后面的条件预编译解析. 宏定义类似C里面的...

Systemtap Language elements - 1

9 minute read

背景 1. 标识 变量名, 函数名的命名规则 : 由数字, 字母, 下划线, $ 符号组成. 不能以数字开头. $符号开头的变量名用来表示被跟踪的源码中的变量. 其他开头的变量名用来表示stap脚本中的变量名或函数名. 2. 数据类型 The SystemTap language inclu...

Systemtap Timer probes

2 minute read

背景 You can use intervals defined by the standard kernel jiffies timer to trigger probe handlers asynchronously. A jiffy is a kernel-defined unit of time ty...

Systemtap Syscall probes

2 minute read

背景 The syscall.* aliases define several hundred probes. They use the following syntax: syscall.NAME syscall.NAME.return Generally, two probes are defin...

Systemtap kernel Trace probes

2 minute read

背景 This family of probe points hooks to static probing tracepoints inserted into the kernel or kernel modules. As with marker probes, these tracepoints ar...

Systemtap kernel Marker probes

4 minute read

背景 This family of probe points connects to static probe markers inserted into the kernel or a module. These markers are special macro calls in the kernel ...

Systemtap PROCFS probes

3 minute read

背景 systemtap 虚拟文件交互探针, 在/proc/systemtap/MODNAME目录下对指定文件读写时触发. These probe points allow procfs pseudo-files in /proc/systemtap/MODNAME to be created, read an...

Systemtap Userspace probing - 4

10 minute read

背景 接上一篇BLOG http://blog.163.com/digoal@126/blog/static/163877040201383042846295/ 本文讲一下userspace 探针的最后一点内容, 静态userspace探针. Static userspace probing You c...

Systemtap Userspace probing - 3

2 minute read

背景 接上一篇BLOG http://blog.163.com/digoal@126/blog/static/16387704020138301545039/ 本文要说的是指令探针, 可以对单步指令, 或者指令块设置探针. Instruction probes Constructs: process...

Systemtap Userspace probing - 2

4 minute read

背景 接上一篇BLOG http://blog.163.com/digoal@126/blog/static/163877040201382941342901/ 本文讲一下 Target process mode Target process mode (invoked with stap -c CMD o...

Systemtap Userspace probing - 1

8 minute read

背景 Systemtap Support for userspace probing is supported on kernels that are configured to include the utrace or uprobes extensions. 前面几篇blog介绍了DWARF和DWARF-l...

Systemtap DWARF-less probing (kprobe)

3 minute read

背景 In the absence of debugging information, you can still use the kprobe family of probes to examine the entry and exit points of kernel and module functions...

systemtap Auxiliary functions and Embedded C

6 minute read

背景 一. systemtap函数 systemtap 中的函数只支持标量变量. 也就是systemtap支持的字符串和长整型. Functions may take any number of scalar arguments, and must return a single scalar value. S...

systemtap local & global variables

2 minute read

背景 前几天写过一篇blog, 关于systemtap优化模式下, 对有写, 没读, 或者没写没读的全局变量和本地变量做消除处理. 本文将讲一讲本地变量和全局变量的使用. 首先是变量的命名规范. 变量名可以包含数字,字母_,$符号. 但是必须以字母或_开头, 区分大小写. Identifiers for ...

systemtap SAFETY AND SECURITY

8 minute read

背景 SAFETY AND SECURITY systemtap 两个重要的组成部分, 脚本解释器编译器(包含安全性检测)stap程序, 以及加载stap编译好的模块的staprun后台程序(不做安全性检查). Systemtap is an administrative tool. It ex...

systemtap optimized for variables

2 minute read

背景 在systemtap language reference中的一段话 Note that all variable types are inferred, and that all locals and globals are initialized. Integers are set to 0 and ...

systemtap receive strings from address

1 minute read

背景 在PostgreSQL的一些探针中, 有一些是是有target variable的, 即探针触发时可以输出这些变量的值. 例如本文用到的query__done探针, 包含sql string的内存地址信息. 首先要获得target variable变量名, 有两种方法获得, 1是直接看postgresql...

use systemtap statistics vs pgbench progress output

9 minute read

背景 PostgreSQL 9.4的pgbench添加了progress输出. 有兴趣朋友可以参考如下 : http://blog.163.com/digoal@126/blog/static/1638770402013772212424/ progress输出时输出的是整个pgbench的统计信息, 如果要...

Systemtap statistics type example

1 minute read

背景 systemtap统计数据类型, 同array一样, 必须定义为global变量. ( 换句话说, 统计元素可以存储在全局变量(scalar)或者 全局array中. ) Aggregate instances are used to collect statistics on numerical val...

Eclipse Systemtap IDE

less than 1 minute read

背景 参考 http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.linuxtools.systemtap.ui.doc%2FLinux_Tools_Project%2FSystemtap%2FUser_Guide%2FSystemTap-ID...

PostgreSQL Streaming Replication COMMAND used in psql

2 minute read

背景 CF里面在讨论是否要添加一个查看数据库system id的函数, pg_system_identifier(); http://www.postgresql.org/message-id/flat/5215346B.7070800@dalibo.com#5215346B.7070800@dalibo.co...

PostgreSQL WHY modify numeric scale must rewrite table

4 minute read

背景 PostgreSQL在修改numeric类型精度的时候,为什么需要rewrite table, 以及如何避免rewrite table? 同时oracle在扩展精度时,耍了什么花招? 正文 前段时间写过一篇关于如何从typmod取出numeric长度和精度的文章, 本文也有牵涉, 所以有兴趣的朋友可以先...

PostgreSQL SystemTap on Linux - 1

4 minute read

背景 PostgreSQL 支持动态跟踪, 可以通过dtrace或者systemtap工具统计相关探针的信息. 安装systemtap yum install systemtap kernel-debuginfo kernel-devel 将安装以下包 systemtap-devel-1.8-6.e...

GIS附近查找性能优化 - PostGIS long lat geometry distance search tuning using gist knn function

3 minute read

背景 空间数据中对临近点的检索使用非常常见, 例如以经纬度为坐标点, 检索离这个点1公里范围内的其他点的信息. 最近有网友问到这样的问题,如何优化呢. ps 现在的版本可以直接支持,不需要使用子查询来支持了。 《PostgreSQL 百亿地理位置数据 近邻查询性能》 正文 本文将以Postgis为例, 举...

PostgreSQL 多元线性回归 - 1 MADLib Installed in PostgreSQL 9.2

7 minute read

背景 MADlib 是伯克利大学的一个开源软件项目. 主要目的是扩展数据库的分析能力. 支持PostgreSQL和Greenplum数据库. 可以非常方便的加载到PostgreSQL或Greenplum, 扩展数据库的分析功能. 当然这和PostgreSQL本身支持模块化加载是分布开的. 在数据库中呈现给用户...

PostgreSQL 9.4 patch : Row-Level Security

3 minute read

背景 前段时间写过一篇关于使用视图来提供行级别的数据保护, 当创建视图时如果未使用security_barriers, 那么这个视图是不安全的, 攻击者可以利用低成本函数打印出隐藏的基表数据. 使用security_barriers可以规避这个问题, 但是牺牲了SQL优化器的作用, 查询将会变成seq scan,...

PostgreSQL USE plpythonu get Linux FileSystem usage

3 minute read

背景 PostgreSQL数据库表空间和目录一一对应, 目录有多少剩余空间, 代表表空间的剩余空间. 但是作为数据库的使用者, 可能没有操作系统的权限去查看目录有多少空间, 那么如何才能做到在数据库中获取文件系统的剩余空间呢? 比较简单的做法是使用plpythonu语言, 如下 : 查看系统安装了哪些语言h...

PostgreSQL Improve fsm & vm output

4 minute read

背景 以前写过一篇关于使用pageinspect和pgstattuple来精确计算数据库对象膨胀量的文章. 《PostgreSQL 如何精确计算表膨胀(fsm,数据块layout讲解) - PostgreSQL table exactly bloat monitor use freespace map data...

PostgreSQL views privilege attack and security with security_barrier(视图攻击)

5 minute read

背景 数据库中一般可以使用视图来规避用户的访问数据的范围, 但是要注意, 即使使用了视图, 也不一定能规避访问. 例如带where条件的视图就有可能被攻击者利用执行树先执行成本低后执行成本高的规则, 使用低成本函数的raise窃取本来不应该看到的信息. 正文 举例如下 : 创建测试表, 插入测试数据. d...

PostgreSQL 如何精确计算表膨胀(fsm,数据块layout讲解) - PostgreSQL table exactly bloat monitor use freespace map data

11 minute read

背景 对PostgreSQL数据库有一定了解的朋友都知道PostgreSQL的UPDATE, DELETE操作是通过新增tuple版本提供高并发处理的. 这样带来一个问题是需要经常vacuum 表, 回收老版本占用的存储空间. 只有回收的空间才能被重复利用, 如果回收不及时将会造成表的膨胀效应. 那么怎么知道数...

PostgreSQL management - lock inspect (行锁监视 pgrowlocks)

7 minute read

背景 锁在数据库中的使用频率非常高. 数据库的并发能力除了和它的并发控制机制有关, 还和数据库的锁粒度控制息息相关, 粒度越细, 冲突范围就越小, 并发能力就越强. 以PostgreSQL 9.3为例, 它支持的表锁如下, X表示这两种锁会发生冲突 : https://www.postgresql.org/d...

PostgreSQL lock waiting order

4 minute read

背景 本文介绍一下PostgreSQL数据库中多个会话的锁等待场景. 通过这个场景的介绍, 让大家了解一下PostgreSQL 9.3 引入的lock_timeout潜在用意之一. 场景介绍 : 最下面是一个时间线, SESSION A是一个长事务, 并且它持有的锁与接下来的SESSION B有冲突....

PostgreSQL monitor - customize nagios script

less than 1 minute read

背景 前一个章节介绍了使用bucardo提供的check_postgres脚本和nagios来监控数据库. 本文主要介绍如何编写自定义监控脚本. 在编写自定义脚本前首先要搞清楚nagios的判断标准. 1. 脚本的返回值 nagios根据脚本返回值来输出该监控服务的状态. 返回值和状态对应关系如下. 0...

PostgreSQL monitor - check_postgres usage - 2

4 minute read

背景 本例要介绍一下结合nagios使用check_postgres监控数据库的配置. 7. 配置被监控机 7.1 修改本地执行监控命令的用户和组, 因为在监控中会涉及数据库表空间文件系统等监控, 而这些目录可能是700权限的. 所以尽量使用postgres的启动用户. 如下 : [root@db-172-...

PostgreSQL monitor - check_postgres usage - 1

17 minute read

背景 前面介绍了nagios的安装和配置, 本文要进入主题了, 介绍一下PostgreSQL的监控. 这里要用到的是Bucardo提供的PostgreSQL监控脚本, check_postgres.pl. 它兼容nagios, cacti, mrtg等监控平台软件. 使用perl语言编写, 支持监控的项目较多...

PostgreSQL monitor - nagios client installation

3 minute read

背景 本文将介绍nagios客户端的安装, 这个需要安装在被监控的主机上. 以及如何配置监控. 一, 客户端配置 1. 安装nagios-plugins 下载最新稳定版 wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagio...

PostgreSQL monitor - nagios server installation

1 minute read

背景 本文要介绍的是PostgreSQL数据库监控, 监控平台可以选择nagios, 实现即时的数据库监控. 如果需要图形化的监控, 例如表空间的增长趋势, 数据库的tps, 提交量, 回滚量的分时趋势图等, 则使用cacti监控平台更加方便. 本文介绍的是nagios, 首先要安装监控平台 - nagios...

PostgreSQL 定时任务方法2

2 minute read

背景 一种方法是使用pgagent客户端,结合pgagent插件,实现类似Oracle DBMS_JOBS的功能。 《PostgreSQL Oracle 兼容性之 - DBMS_JOBS - Daily Maintenance - Timing Tasks(pgagent)》 另一种方法是直接在客户端使用li...

PostgreSQL backup and recovery - online backup & Point-In-Time-Recovery

9 minute read

背景 前面介绍的冷备份, 以及逻辑备份都是一个时间点的全量备份, 没有增量的概念. 如果数据库在运行过程中发生故障, 使用逻辑备份只能将数据库还原到备份时刻, 无法恢复到故障发生前的那个时刻. 又或者在使用过程中由于误操作修改或删除了重要数据, 需要还原到误操作前的那个时刻怎么办呢? 使用冷备份加上有效的归...

PostgreSQL performance test use ssh tunnel

13 minute read

背景 前面一篇BLOG介绍了PostgreSQL ssl数据加密的性能, 相比未加密性能下降得比较厉害. http://blog.163.com/digoal@126/blog/static/16387704020134229431304/ 本文将测试一下ssh tunnel加密的性能情况. 测试机与前面测...

PostgreSQL ssl ciphers performance 比较

11 minute read

背景 不同的SSL cipher加密复杂度,对CPU的开销都不一样。 上一篇BLOG介绍了PostgreSQL使用ssl加密客户端和服务端的数据传输. 《PostgreSQL 网络SSL的配置方法》 本文将介绍一下各种cipher的开销。 查看支持的ciphers 查看openssl支持哪些ciphers...

PostgreSQL 如何实现网络压缩传输或加密传输(openssl)

7 minute read

背景 PostgreSQL可以结合openssl实现网络层传输数据的加密,提升安全性,包括认证过程传输的包也是加密的。 如果用户数据库和业务程序之间的网络处于不可信区域,建议使用这种方法来提高数据的安全性,降低被窃取的风险。 配置方法比较简单,首先需要客户端和服务端都支持OPENSSL,数据库编译时需要带上–...

PostgreSQL quote ident and literal

3 minute read

背景 在PostgreSQL中,支持特殊字符的表名,列名等,但是他们在使用时需要使用双引号,例如包含大小写的表名。 在字符串输入时,可以使用的方式引用字符串,也可以使用单引号,但是如果在字符串中出现了应用字符,需要对引用字符进行转义。 这是数据库操作的常见问题。 PostgreSQL 提供了几个函数用来输出...

inode and hard link

2 minute read

背景 In computing, an inode (index node) is a data structure found in many Unix file systems. Each inode stores all the information about a file system object...

PostgreSQL 9.3 improve pgstattuple

3 minute read

背景 pgstattuple可以用来查询tuple级别的统计信息. PostgreSQL 9.3 加入了gin索引的pending信息输出. 统计时对被统计的数据加read lock. 所以如果数据正在变更或插入, 只要HeapTupleSatisfiesNow返回false, 就归入dead tuple....

PostgreSQL SQL_ASCII encoding introduce

2 minute read

背景 一位网友想将PostgreSQL数据库从sql_ascii编码迁移到utf8编码. 这里涉及到编码的转换, 首先要了解一下sql_ascii的编码含义 : The SQL_ASCII setting behaves considerably differently from the other sett...

PostgreSQL 9.3 add lock_timeout parameter

1 minute read

背景 Add configuration variable lock_timeout to limit lock wait duration 测试 1. 隐锁 SESSION A : digoal=# begin; BEGIN digoal=# insert into test values (1,...

Postgres-XC customized aggregate introduction

10 minute read

背景 postgres-xc是基于PostgreSQL的分布式数据库,分布式数据库的聚合与单节点数据库的聚合不一样,需要先在数据节点聚合,然后在COORDINATOR节点完成第二阶段的聚合。 目前还不支持多阶段聚合(类似mapreduce)。 本文将介绍一下postgres-xc的聚合函数的概念和开发。 正...

PostgreSQL 并行逻辑备份与一致性讲解 - PostgreSQL 9.3 parallel pg_dump

17 minute read

背景 PostgreSQL pg_dump并行备份的功能已经提交到最新的代码中, 9.3中应该会包含此功能. 导出速度提升非常明显. 前段时间写过一篇并行导出的BLOG, 与pg_dump的并行导出一样都用到了9.2开始引入的export snapshot功能. 感兴趣的朋友可以看如下文章 : http:/...

PostgreSQL 审计 - PostgreSQL Audit by Database or Role wide parameter

3 minute read

背景 本文基于PostgreSQL 9.2讲解. 审计的一个普遍用途就是记录用户在数据库中都干了些什么? 如果系统级的参数设置日志全记录下来当然也可以达到审计的目的, 但是这样做的话很多不需要的日志也会输出, 造成硬盘资源浪费甚至影响数据库性能. 所以精细化的审计非常有必要. 之前写过一篇关于Postgre...

PostgreSQL 审计成功事务 - PostgreSQL Fine-Grained Table,Column,Row Level Audit

5 minute read

背景 通过配置用户级或数据库级的参数可以实现用户以及数据库级别的审计, 但是这样的粒度可能还是太粗糙了. 如果需要更细致的审计, 例如针对某些表的操作审计, 某些用户对某些表的审计, 或者仅仅当某个列的值发生变化时才被审计(记录到LOG或表里面, 本文的例子是将审计信息输出到LOG, 使用raise). 这样...

PostgreSQL FDW mongo_fdw usage

4 minute read

背景 https://wiki.postgresql.org/wiki/Foreign_data_wrappers mongo_fdw是PostgreSQL众多FDW中的一个, 显而易见是连接mongoDB的. 最近在看CitusDB的时候, 文档中提到了mongo_fdw, 实际上在CitusDB中并没有发...

PostgreSQL Server Encoding sql_ascii attention

4 minute read

背景 群里一位兄弟问到的一个问题 : ” 我有一个postgresql,比较大,编码是sqlascii码,我想转换成有utf8 ,有方案可行吗? “ 如果使用场景中未用到non-ASCII编码的字符, 那很幸运, 导出导入就可以了. 但是如果场景中使用了non-ASCII编码的字符, 那就没那么幸运了, 因...

PostgreSQL 事件触发器 - PostgreSQL 9.3 Event Trigger

6 minute read

背景 PostgreSQL 9.3 将引入事件触发器, 与普通触发器不同的是, 事件触发器是数据库全局的触发器, 可以由DDL事件来触发. 例如可以用来实施DDL的操作审计,以及防止某些用户执行某些DDL,在某些表上面执行DDL等等。 Unlike regular triggers, which are at...

PostgreSQL 触发器 用法详解 2

14 minute read

背景 触发器在数据库中的应用非常广泛,例如在发生insert, update, delete, truncate时触发,调用事先写好的触发器函数。 触发器函数可以使用plpgsql , c , python , perl , java等语言编写。 触发器函数中支持很多内置的变量,可以干很多事情。 本文将以P...

PostgreSQL 触发器 用法详解 1

25 minute read

背景 触发器在数据库中的应用非常广泛,例如在发生insert, update, delete, truncate时触发,调用事先写好的触发器函数。 触发器函数可以使用plpgsql , c , python , perl , java等语言编写。 触发器函数中支持很多内置的变量,可以干很多事情。 本文将以P...

PostgreSQL convert integer to bit

4 minute read

背景 昨天一位同事问我PostgreSQL 有没有十进制转二进制的函数. 看了一下目前PostgreSQL没有此类函数, 所以需要自己写一下. 正文 有2种方法, 第一种方法如下, 涉及符号与类型宽度(假设int为signed int). do language plpgsql $$ declare ...

PostgreSQL xlog dump - pg_xlogdump 源码讲解

12 minute read

背景 PostgreSQL 9.3 添加了 pg_xlogdump 的功能, 主要用于解析XLogRecord的信息. 可用于学习了解XLOG. 正文 XLogRecord的数据结构如下 : src/include/access/xlog.h 00021 /* 00022 * The overal...

PostgreSQL CSVLOG monitor script for nagios

9 minute read

背景 postgresql.conf配置 : 要求开启csvlog log_destination = 'csvlog' logging_collector = on log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d_%H%...

PostgreSQL LOCK WAITING monitor script for nagios

5 minute read

背景 数据库锁等待监控脚本. 提供给nagios使用 : 本例环境 : 被监控的数据库DATABASEs 1. 192.168.2.2 : 1921 2. 192.168.21.3 : 1921 监控服务器monitor server 192.168.100.2 nagios 服务器...

PostgreSQL add 2 DML LOCK TUPLE MODE to 4

6 minute read

背景 本文主要是这篇博客的扩展, 《PostgreSQL performance speedup by avoid lock references tuple when add or update(new) Foreign Key’s value》 使用数据库的朋友应该都认同这个观点: 锁粒度越细致, 并发写...

PostgreSQL recovery target introduce

6 minute read

背景 QQ群里聊到的关于PostgreSQL 恢复点的话题. 本文涉及源码参考PostgreSQL 9.2.2版本. 我们知道PostgreSQL 支持PITR, 基于时间点的恢复. 通过配置recovery.conf可以指定3种恢复目标, 如下 : recovery_target_name (string...

HOW to Change PostgreSQL’s TOAST_TUPLE_THRESHOLD

2 minute read

背景 TOAST表的设计,在一个需要频繁更新(小字段更新)操作的表中非常有用,可以大大降低不必要的大字段带来的IO和CPU(大字段上有索引时) 。 优化场景可参考 : http://blog.163.com/digoal@126/blog/static/16387704020130931040444/ 但是...

PostgreSQL large row column performance tuning case

17 minute read

背景 这篇BLOG主要针对如下场景进行优化 : 1. 表的行较大, 例如1KB以上. 2. 索引较多, 如4个以上. 3. 表的记录大部分都要被更新, 例如1个1000万的表每天有700W条记录要被更新. 4. 表包含大字段, 如text类型的字段, 单个字段可能占用1KB左右. 这种字段也有更新, 但是...

PostgreSQL partition table name convert to data type

2 minute read

背景 关于PostgreSQL的分区表监控, 如下 : http://blog.163.com/digoal@126/blog/static/16387704020130433036377/ 将表名转成日期的方法举例 : 方法1 : 用到规则表达式的替换和转数组函数. select regexp_...

PostgreSQL partition table or inherits table predict count and gap and privilege monitor

21 minute read

背景 当管理的数据库越来越多, 分区表也越来越多, 一个人可能要维护几十万的分区表. 对于分表的监控显得尤为重要. 本文基于PostgreSQL 9.2 进行讲解, 其他版本可能需要略微调整. PostgreSQL 的分区表除了性能方面需要加强以外, 管理方面也需要加强. 例如, 一、分区表的气泡, 例如...

Back to Top ↑

2012

PostgreSQL WHY ERROR: invalid byte sequence for encoding UTF8

1 minute read

背景 使用PostgreSQL 的朋友可能遇到过类似ERROR: invalid byte sequence for encoding “UTF8”: 0x00 的报错. 这是什么原因呢? 本文就来解释一下 : 首先我们这里说的是UTF8字符集, 我的测试环境如下 : ocz@db-172-16-3-15...

PostgreSQL aggregate function customize

6 minute read

背景 聚合操作是统计分析的常见需求,聚合实际上就是把多行变成单行。 比如count, sum, avg, min, max, 线性相关性等等 本文介绍一下如何编写聚合函数。 正文 昨天聊到了一个关于多行转换成单行以提高查询性能的场景。 http://blog.163.com/digoal@126/blog...

PostgreSQL plpgsql variadic argments , parameters - 可变参数个数

3 minute read

背景 PostgreSQL 函数支持可变个数的参数,有很多聚合函数就是可变参数的,可变参数在一些场景非常有效,能解决一些特殊的问题,帮助简化代码. 正文 但是使用可变参数, 有一定的要求. 首先可变参数必须放在函数参数列表的末尾部位, 另外就是可变参数使用时定义为数组,所以参数类型必须一致. 例如 : di...

performance tuning about multi-rows query aggregated to single-row query

4 minute read

背景 聚合操作是统计分析的常见需求,聚合实际上就是把多行变成单行。 比如count, sum, avg, min, max, 线性相关性等等 接下来的几篇文章介绍一下如何编写聚合函数。 本文介绍的是多行转单行后的优化手段和性能提升点。 正文 线上有一个这样的表 : digoal=# \d recomme...

get PostgreSQL’s next oid

4 minute read

背景 今天在群里聊到的话题, 怎么取PostgreSQL的oid. 首先解释一下什么是oid : Object identifiers (OIDs) are used internally by PostgreSQL as primary keys for various system tables. ...

PostgreSQL partial index use caveat in prepared statement <= ver 9.1

2 minute read

背景 最近开发的同事反映的一个问题. 环境是这样的, 主机A跨广域网抽取主机B上的PostgreSQL的数据. 一共抽取两个表, 假设为T1和 T2. 其中T1表 60GB左右, T2表 30GB左右. 抽取的规则是按照时间分段抽取, 例如 : select * from t1 where creat...

PostgreSQL 临时表 (Temproary table) style

3 minute read

背景 临时表通常是一次创建, 以后使用的时候无须再次创建(即表结构保留). 并且每个会话保持各自的数据. 在目前版本的PostgreSQL中, 临时表的使用有所改变. 1. 临时表在会话结束后会自动删除(或者在事务结束后删除on commit drop). 也就是说每个会话中需要使用临时表的话需要重新创建. ...

PostgreSQL row lock and htup.t_infomask thinking

20 minute read

背景 QQ群里聊到关于PostgreSQL范围锁的话题. 大概是这样的 : BEGIN; update t set c1=? where c2>? ; 在COMMIT或者ROLLBACK之前, 这种SQL可能会锁上很多行? 1. 在这种情况下会不会升级成表锁? 2. 如果要锁的行数非常多会...

PostgreSQL 优化CASE - 无序UUID性能问题诊断

16 minute read

背景 某数据库的IO等待非常高, 基本上iostat 看到的磁盘使用率都是接近100%的. 分析这个业务库有如下特征 : 1. 最大的单表20GB左右, 1.2亿数据, 有插入操作, 无更改无删除, 有少量查询. 2. 这些表的索引较少, 只有PK和时间字段上的索引, 注意这里的PK是text类型, 并且使...

PostgreSQL XLOG fsync simple introduce

15 minute read

背景 一、where is the tuples? datafile, blocks. 从上到下的顺序查找. 1. PostgreSQL shared buffer 2. OS FileSystem cache 3. storage cache(raid card or controller’s cach...

How many xlogs WAL can be generated by PostgreSQL?

12 minute read

背景 PostgreSQL和Oracle类似, 都记录了redo日志, PostgreSQL里面叫做xlog或者WAL. XLOG可以用来做基于物理文件备份的还原操作. 这一点和Oracle使用RMAN进行还原时需要用到的archive log非常类似. 这里就不阐述PostgreSQL如何做物理备份和还原了...

PostgreSQL general public partition table trigger

3 minute read

背景 触发器在数据库中的使用非常广泛, 例如用来跟踪用户行为, 用户登录过滤(Oracle中), 数据复制, 数据分区等等. 以前写过一些类似的应用场景案例分享, 感兴趣的朋友可以参考本文的末尾部分, 有相关的链接. 特别是在数据分区应用场景中, PostgreSQL目前没有将分区这部分代码作为COMMAND...

表级复制(base on trigger) – multi master replication & performance tuning

16 minute read

背景 本文在9.2下面测试, 较老版本可能系统表的字段名不一样, 需要修改触发器函数相关部分, 如pg_stat_activity的pid, 老版本是procpid. 数据同步是一个比较老的话题了, 在PostgreSQL中有比较多的同步手段, 例如流复制, slony, londiste, pgpool等. ...

表级复制(base on trigger) – one(rw) to many(ro rw)

9 minute read

背景 本文在9.2下面测试, 较老版本可能系统表的字段名不一样, 需要修改触发器函数相关部分, 如pg_stat_activity的pid, 老版本是procpid. 数据同步是一个比较老的话题了, 在PostgreSQL中有比较多的同步手段, 例如流复制, slony, londiste, pgpool等. ...

variable number of arguments function

1 minute read

背景 有些时候可能需要函数能够接收任意个参数, 比方说fprintf()函数, int fprintf(FILE *stream, const char *format, ...); ... 表示的是任意个数的参数. 类似的还有execl和execlp : int execl(con...

PostgreSQL plpgsql_check_function 插件 - plpgsql函数体内容CHECK

2 minute read

背景 PostgreSQL的plpgsql存储过程语言是解释性语言,支持语法型的CHECK但是无法发现一些运行时才可能触发的报错,比如表不存在等报错。当然这种报错实际上也不应该PLPGSQL来做,不过我们现在有plpgsql check extension来帮助发现这些问题了。 ``` postgres=# c...

USE GDB debug postgres

42 minute read

背景 前几天在使用pgsql_fdw时发现它的外部表用在函数中会报错, 排错首先要获得详细的错误信息, 能跟踪就更好了. 《pgsql_fdw “cache lookup failed for type 0” error when used in function》 错误信息的获取途径有几种 : 1. 最简...

USE hstore store table’s trace record

4 minute read

背景 在数据库应用中,某些数据表的记录更改可能会需要跟踪,例如删除,新增,更新。 跟踪的信息包括:老的记录值,新的记录值,记录变更时间,哪个用户操作的等等。 在数据库中,跟踪可以通过触发器来做。 因为每个表的结构都不一样,要设计一个比较通用的存储跟踪记录的表的话,需要使用通用的存储类型,例如 text 类型...

PostgreSQL 黑科技 range 类型及 gist index 20x+ speedup than Mysql index combine query

5 minute read

背景 一位社区的兄弟跟我抱怨MYSQL里面查IP地址库并发几千每秒的查询数据库就抗不住了。 于是问他要来了他们的IP地址库数据和查询用的SQL以及MYSQL里面的表结构。 把数据转到PostgreSQL里面做一下相对应的压力测试,看看PostgreSQL的表现。 在其他的业务中,这样的需求也是屡见不鲜,比如...

PostgreSQL 函数封装 - Wrap Function code like Oracle package

1 minute read

背景 封装函数主要是为了隐藏函数体的内容(业务逻辑),这个在Oracle里面是通过package来实现的. 在PostgreSQL里面, 原生是不带这个功能的, 但是EnterpriseDB的AS版本支持这一操作, 通过edbwrap可以实现代码的封装. 另一方面,PostgreSQL可以找一下社区版本的函...

PostgreSQL plpgsql function debugging module : pldebugger

less than 1 minute read

背景 以前写过一篇PostgreSQL 函数调试环境搭建的BLOG 《PostgreSQL 9.1.3 plpgsql debugger module》 http://blog.163.com/digoal@126/blog/static/163877040201222011550296/ 源码来源比较老,...

Londiste 3 replicate case - 1 下节

20 minute read

背景 上节URL 《Londiste 3 replicate case - 1 上节》 接下来测试一下复制是否正确, 在主节点上开启pgbench做数据更改的压力测试. postgres@db5-> cat login.sql \setrandom userid 1 200000 selec...

Londiste 3 replicate case - 1 上节

18 minute read

背景 前面讲解过Londiste3的安装, 有不了解的朋友可以参考如下BLOG: 《Londiste3 Install》 今天将介绍一下使用londiste3, 从PostgreSQL 9.1.3 复制表以及序列到PostgreSQL 9.2beta1. (这种场景的复制使用PostgreSQL的流复制是办不...

Londiste3 Install

1 minute read

背景 Skytools是一个比较成熟的套件, 包含了pgq, Londiste, wal-manager三大组件. 其中pgq由providers,ticker,consumers组成, provider push events to queue, consumer read events from queue...

PostgreSQL nestloop/hash/merge join讲解

4 minute read

背景 PostgreSQL 9.2 beta1 release notes中指出 Improve the planner’s ability to use nested loops with inner index scans. 到目前为止我还不是特别肯定这句话到底是不是要说PostgreSQL 9.2 支持...

PostgreSQL 9.2 improve prepared statements plan’s selectivity

3 minute read

背景 PostgreSQL 9.2 beta的release note中提到9.2 中prepared statements选择执行计划时, 将根据输入的参数值计算出走generic plan的COST, 如果这个COST值与generic plan执行计划的COST值接近或更小时将直接走generic plan...

PostgreSQL 9.2 add array elements statistics

3 minute read

背景 PostgreSQL 9.2 在统计信息中增加了 array类型中 element的统计信息,以提供给优化器参考。 例如@>, &&, 和<@ 操作符的使用更加优化。 以下是PostgreSQL 9.1 的pg_stats包含的列信息 digoal=# \d pg_sta...

PostgreSQL 黑科技 range 类型及 gist index 助力物联网(IoT)

7 minute read

背景 一位社区的兄弟跟我抱怨MYSQL里面查IP地址库并发几千每秒的查询数据库就抗不住了。 于是问他要来了他们的IP地址库数据和查询用的SQL以及MYSQL里面的表结构。 把数据转到PostgreSQL里面做一下相对应的压力测试,看看PostgreSQL的表现。 在其他的业务中,这样的需求也是屡见不鲜,比如...

PostgreSQL汉字转拼音或拼音首字母的应用

5 minute read

背景 能不能把在ORACLE里实现的汉字转拼音首字母的功能在PG里面实现以下。 比如股票软件,五粮液这个股,输入wly就可以出来了。 其实用到的就是汉字的拼音首字母,提高了用户体验。 在手机上打字比电脑上打字更慢,如果能实现这种类似的缩写可以大大提高用户体验,比如在搜索人名或者歌曲名,城市名时使用可以比较广...

PostgreSQL Selectivity Tablespace PITR - 部分表空间恢复

4 minute read

背景 今天在群里面一位老兄在问PostgreSQL能不能做基于数据库实例的PITR. 这位老兄可能是Oracle的用户, 因为ORACLE是支持基于表空间的RMAN恢复的. 至于为什么要这么做, 显然例如我要恢复的数据库只在某个表空间里面, 而其他表空间的数据我是不关心的. 基于表空间的恢复在恢复过程中占用更...

使用PostgreSQL和nagios设计统一的应用监控接口

6 minute read

背景 SKYPE的skytools中有使用PostgreSQL 作为message queue来记录数据库表的DML操作, 并且方便大家开发消息consumer和provider. 我想了想, 其实也可以利用PostgreSQL作为开放的应用监控接口. 接口可以用任何PostgreSQL支持的函数语言写, 本文...

PostgreSQL Logical Backup’s TOC File

11 minute read

背景 一位网友问到的几个逻辑备份和还原的问题, 本文对这几个问题进行简单的讲解和测试。 1. 调整逻辑备份的还原顺序. 2. 逻辑备份的TOC文件的格式是什么意思. 3. 是否可以通过修改TOC文件中schema的内容达到把表导入不同schema的目的? 这个想法可能来自oracle imp的fro...

PostgreSQL 9.1.3 plpgsql debugger module

2 minute read

背景 [更新] 该项目更新为pldebugger http://git.postgresql.org/gitweb/?p=pldebugger.git;a=summary 今天一位网友在群里面问PostgreSQL 9.0如何debug 函数. 我记得在8.3的时候有一个插件叫edb-debugger是可以...

explain postmaster.pid

1 minute read

背景 今天我们部门内部的数据库讲座, 提到了postmaster.pid这个文件, 我以前并没有仔细的去查看它每一行的含义. 刚好今天有机会查了一下源码, 再加上三个臭皮匠赛过一个诸葛亮. 终于把每一行的意思给搞明白了. 先来看一个postmaster.pid文件的内容 : cat postmaster.p...

PostgreSQL性能优化综合案例讲解 - 2

24 minute read

背景 备注 部署部分可以请参考 《PostgreSQL on Linux 最佳部署手册》 【调优阶段8】 1. 压力测试 pgbench -M prepared -r -c 1 -f /home/postgres/test/login0.sql -j 1 -n -T 180 -h 172.16.3.33 ...

PostgreSQL性能优化综合案例讲解 - 1

16 minute read

背景 备注 部署部分可以请参考 《PostgreSQL on Linux 最佳部署手册》 【软件环境】 CentOS 5 x64 PostgreSQL 9.1.3 plproxy 2.3 pgbouncer 1.4.2 【测试模型】 设计一个包含INSERT, UPDATE, SELE...

游戏合区、拆区,数据库操作CASE - PostgreSQL Data merge case

2 minute read

背景 打个比方,有两个游戏区要合并。 单个游戏区的用户ID可以有多个角色,角色名不能重复。 当需要合并游戏区时,可能会涉及到同一个ID的不同区使用的相同的角色。 PostgreSQL没有merge的SQL语法(PostgreSQL 9.5有了) PostgreSQL 9.5 new feature - A...

how difference when update a table’s column which it in TOAST or BASETABLE(in-line)

3 minute read

背景 今天一位合作商的同事找到我, 问了一个关于数据库优化的问题. 问题是这样的 : 我现在在优化数据库操作, 我的一个role表结构里, 有几个比较大的text. 然后我现在只修改一个role里的int字段, 你上次说整条role记录就会拷贝一次是么, 这个拷贝是不是影响数据库的操作时...

Use PostgreSQL collect and analyze Operation System statistics

19 minute read

背景 当你管理的服务器越来越多的时候, 哪个服务器才是你最需要关注的? 通过各个监控维度的排行, 可以知道你到底需要关注或者优先关注哪些服务器. 这个通过nagios,cacti等监控软件当然是可以做到的. 不过不太灵活, 因为服务器的配置各不一样, 关注的维度也不一样, PostgreSQL数据库的递归调...

TOAST table with pgfincore

1 minute read

背景 pgfincore 可以修改文件的posix_advise属性,输入参数是对象名。如表名,索引名。 注意有些PostgreSQL数据类型的存储如果选择了为extended或者EXTERNAL存储时。实际上这些内容是存储在TOAST表里面。 例如text 类型. 下面来看一个例子 : digoal=&...

Back to Top ↑

2011

create mysql table in PostgreSQL with mysql_fdw

2 minute read

背景 以前写过一些在PostgreSQL中创建file, CouchDB, Redis, PostgreSQL, Oracle等外部表的BLOG. 一直没有写MySQL的,刚好最近有一个项目要从MySQL迁移到PostgreSQL。今天补上如下 : 下载 http://pgxn.org/dist/mysql...

PostgreSQL Notify/Listen Like ESB

1 minute read

背景 ESB : 基于消息的调用企业服务的通信模块. 上个礼拜和一位老朋友吃饭,聊到他现在在做的一个产品。才初略的对ESB有点了解。 发现PostgreSQL独有的Notify和Listen与总线实现的东西类似。一般用于监测表的改变,配合触发器使用,通知接收方表的数据有改变,接收方及时采取刷新动作。 下面来...

PostgreSQL BEGIN attention. serializable case

1 minute read

背景 PostgreSQL BEGIN事务的时候,干了些啥? 来看看下面的例子可能会有启发: 场景,实现ORACLE的Serializable隔离级别。 描述 : ORACLE : The SERIALIZABLE setting specifies serializable transaction i...

A Smart PostgreSQL extension plproxy 2.2 practices

7 minute read

背景 PostgreSQL分布式设计 三层结构 : 1. 路由层(几乎无限扩展) 主角: plproxy,postgresql 2. 连接池层(几乎无限扩展) 主角: pgbouncer 3. 数据层(几乎无限扩展) 主角: postgresql 扩展方式: 1. 路由层扩展: 路由层包含了...

Use pg_resetxlog simulate tuple disappear within PostgreSQL

3 minute read

背景 刚才francs问我由于PostgreSQL的MVCC机制,是不是数据库维护会导致数据库的记录消失。 当然不会。 PostgreSQL是有保护机制的,有兴趣的朋友可以参考数据库的maintenance章节和相关的freeze参数。 不过有一种情况,可以模拟记录”消失”的情况,那就是使用pg_reset...

Get txid from pg_controldata’s output

2 minute read

背景 前面一篇BLOG介绍了txid和xid的区别,地址是 PostgreSQL xid(int4) to txid(int8) 不过还漏了一点东西,txid是怎么计算的。 注意xid最大是2^32次方。但是它实际上是会随时rotate的,即是一个起点(最老的没有被冻结的XID)不固定的圆圈(某些值被赋予特...

PostgreSQL xid(int4) to txid(int8)

6 minute read

背景 这篇BLOG的起源还是MVCC,PostgreSQL很多东西都是围绕 MVCC展开的。所以建议可以阅读一下手册的相关部分,另外我之前也写过几篇和MVCC相关的BLOG,有兴趣的朋友可以浏览一下。 今天我的同事francs发现我们昨天出现BUG的那个数据库的事务ID到100多亿了,正常情况下应该是在2^32...

Use nagios monitor PostgreSQL archive status

1 minute read

背景 之前写过一篇BLOG: PostgreSQL Archived in the Cloud http://blog.163.com/digoal@126/blog/static/163877040201152321027994/ 关于归档状态的监控采用nagios来搞定,如下是一个archive_comm...

ssh隧道加密压缩方法 - a simple wan speed method

less than 1 minute read

背景 前几天写过一篇用SSH TUNNEL加速PostgreSQL数据传输的BLOG http://blog.163.com/digoal@126/blog/static/163877040201152753352356/ 今天再把这个方法略微通俗化一下 参考 man ssh ma...

ssh隧道加密压缩方法 - SSH Tunnels Compression speed up PostgreSQL data transport in WAN environment

1 minute read

背景 一位海外的同事问我从国外抽取数据比较慢,有没有好的解决办法? 这个问题其实以前也遇到过,我是通过SSH建立隧道,并且开启协议压缩来解决,不过对于应用程序不太适用。 PostgreSQL的话,可以直接用SSL连接开启协议压缩,本文不讨论,可以参考我的相关文档。 《PostgreSQL 如何实现网络压缩传...

PostgreSQL Archived in the Cloud

1 minute read

背景 建立一个集中调度的PostgreSQL归档系统。 特点: 1. 生产库存储指纹信息。 2. 调度库存储 指纹信息,以及生产库的其他补充信息。 归档服务器(存储)信息。 生产库与归档服务器的映射信息,包括优先级信息等等。 归档日志信息。 3. DNS存储环境IP与域名信息。 4. Nagio...

use pg_filedump dump block contents

2 minute read

背景 源码 : http://pgfoundry.org/frs/?group_id=1000541&release_id=1767 9.0安装实例 : tar -zxvf pg_filedump-9.0.0.tar.gz mv pg_filedump-9.0.0 postgresql-9.0....

Use SecureCRT and Chrome & Proxy Switchy! Plugin

less than 1 minute read

背景 最近在单位上外国的网站经常上不去,包括PostgreSQL , mongoDB , Oracle , MySQL等,都上不去了。 但是用手机或3G无线上网卡都可以上这些网站,包括在IDC的服务器也可以访问这些网站,后来据说是针对企业网做了出口过滤。 在网上找了一下,有很多可以通过SSH代理来翻墙的说法。...

PostgreSQL replication monitor

less than 1 minute read

背景 PostgreSQL的 stream replication延迟一般来说受到以下几方面的影响 : 1. primary 和 standby之间通讯的网络质量 . 2. primary 的 负载 . 3. standby 的 负载 . 4. standby的在查询事务长度以及配置参数 如 max_st...

PostgreSQL : WITH Queries use case

1 minute read

背景 一位同事有一个这样的需求,不知道怎么写SQL , 两张表如下 table1 id1 int fk reference (table2.id) id2 int fk reference (table2.id) table2 id PK name 需要查询如下结...

Compare PostgreSQL and Oracle dead lock detect and transaction

3 minute read

背景 Oracle 和 PostgreSQL的死锁检测和处理有较大区别。 主要差别在于 : 1. 死锁被检测到的属于哪个SESSION?Oracle随机检出,从实验来看应该是第一个启动的死锁事务。而PostgreSQL是死锁发生时的最后一个事务,与ORACLE相反(从PG的deadlock_timeout参数...

一个事务最多能锁多少对象? how many objects can be locked per transaction

4 minute read

背景 在PostgreSQL中,表、视图、物化视图、序列、索引、TOAST等,统称为对象,那么在一个事务中可以锁多少个对象呢?(我不打算在这里讲锁级别。可以参考锁级别文章) 通过pg_locks这个视图可以查看到当前数据库的锁信息(注意行锁在行头,不会体现在pg_locks中,也不占用内存)。 或者直接通过如...

Recover droped column from PostgreSQL

3 minute read

背景 PostgreSQL中使用alter table tbl drop column 删除列的操作,实际上只是标记列为删除状态。并不是里面就回收该列占用的空间。 只有当对原来存在的行发生UPDATE时或新插入行的时候才会影响真实的列记录。 恢复测试一: 对于执行alter table tbl drop c...

PostgreSQL 只读模式 , hot standby recovery 模式等介绍,以及如何建立只读账号

1 minute read

背景 有些时候,我们可能需要将数据库变成只读模式,或者提供一些只读账号。 比如需要给开发人员一些自由查询功能的账号,或者当数据库用了多少空间后,将其锁定为只读模式。 让数据库进入只读有几种方法, 1. 弱只读的方法,设置默认事务为只读,这种方法只能实现弱只读,因为用户可以在会话中改成写模式。 2. 进入r...

PostgreSQL’s Cursor USAGE with SQL MODE - 分页优化

10 minute read

背景 今天谈一下cursor SQL, 函数中CURSOR中的使用另外再谈. PostgreSQL客户端请求数据库返回大批量数据有几种常见的方法。 一、SELECT 二、CURSOR 三、分页取(ORDER BY OFFSET x LIMIT n) 环境: PostgreSQL 9.0.2 RHE...

WHY prepared Statement running slower in some situation CASE

3 minute read

背景 在某些情况下,使用PREPARED STATEMENT或函数,可能会比直接执行SQL更慢。为什么呢? 这个要从执行计划说起, 下面来看一个测试表 digoal=> \d tbl_user Table "digoal.tbl_user" Column ...

PostgreSQL’s two-phase commit used with dblink example - 2PC , 两阶段事务

5 minute read

背景 我在前面一篇博客有提到PostgreSQL的事务中如果混合了本地SQL和远程执行的SQL的话,可能会导致事务不完整。 那么怎么来解决这种混合事务的完整性问题呢?没错,prepare transaction为我们提供了强大而有弹性的two-phase commit功能。 下面来举例说明一下: 测试环境:...

PostgreSQL 随机查询优化

4 minute read

背景 在某些场景可能会需要随机的从表中取出记录。方法比较多,简单的方法可能给数据库带来巨大的开销,下面开始举例说明,看看如何优化一个随机查询。 测试表: create table tbl_user(id serial8 primary key,firstname varchar(32),lastname va...

Can session_replication_role used like MySQL’s BlackHole Engine?

3 minute read

背景 测试版本PostgreSQL 9.0.2 PostgreSQL数据库自带的流复制带来了非常强大的数据库容灾和负载均衡等特性体验。 它告诉我们什么是TMD惊喜。预知惊喜请翻阅我以前写的两篇博客 http://blog.163.com/digoal@126/blog/static/163877040201...

Use pgbouncer connect to GreenPlum’s segment node

3 minute read

背景 pgbouncer是PostgreSQL数据库的轻量级开源连接池,有着非常好的性能。 源码修改部分来自老唐(osdba)写的一篇BLOG,《让pgbouncer可以连接到greenplum的segment上》本文末尾有链接。 下面参照他在BLOG中提到的方法测试了一下,测试如下 : 软件准备 : 1...

PostgreSQL HOT STANDBY using Stream replication

13 minute read

背景 PostgreSQL HOT STANDBY by stream replication 一、准备硬件 1. 主节点硬件配置 DISK : 146GB*6 MEM : 14GB CPU : 2.83GHz*8 2. standby节点硬件配置 DISK : 146GB*4 MEM ...

Back to Top ↑

2010

PostgreSQL HOT STANDBY using log shipping

8 minute read

背景 PostgreSQL HOT STANDBY by log shipping 一、准备硬件 1. 主节点硬件配置 DISK : 146GB*6 MEM : 14GB CPU : 2.83GHz*8 2. standby节点硬件配置 DISK : 146GB*4 MEM : 8GB ...

PostgreSQL single-user mode usage,like Repair Database

4 minute read

背景 PostgreSQL目前的xid还是32位的,所以每约20亿事务需要freeze,将tuple的事务状态改成freeze xid,如果你没有做,那么数据库会先提示你防止wrap,然后如果在消耗殆尽前100万个事务时,强制关闭数据库。此时就需要进入单用户才能操作。 单用户模式如何进入 PostgreSQL单...

batch insert in PostgreSQL

27 minute read

背景 今天在互联网上看到有人发表了这样的感慨,其中 “INSERT INTO my_table SELECT 1, ‘a’ UNION SELECT 2, ‘b’ UNION SELECT 3, ‘c’ UNION …”这句可能是笔误, 应该改成 “INSERT INTO my_table SELECT 1...

PostgreSQL 优化器行评估算法

3 minute read

背景 了解本文需要先了解一下PostgreSQL的统计信息表pg_class,pg_stats。可以查看我前面写的 PostgreSQL Statistics and Query Explain Introduction 接下来先看一个PostgreSQL EXPLAIN语句的输出: https://www...

PostgreSQL 连接池 pgbouncer 使用

6 minute read

背景 首先介绍一些postgresql资源网站: http://pgfoundry.org/ http://pgxn.org/ https://github.com/topics/postgres?l=c&o=desc&s=stars 这里面有非常多和POSTGRESQL相关的资源。 P...

PostgreSQL Free Space Map Principle

1 minute read

背景 在说FSM之前,先回顾一个PostgreSQL的Limit Limit Value Maximum Database Size Unlimited Maximum Table Size 32 TB Maximum Row Size 1.6 TB ...

使用Plproxy设计PostgreSQL分布式数据库

18 minute read

背景 PostgreSQL的分布式数据库方案很多,如GridSQL,pgpool-ii,plproxy等. 其中plproxy是skype开发的一个数据库组件. 使用plproxy设计跨互联网部署还要考虑带宽的问题和应用是否要做本地缓存等问题, plproxy源代码对代理库的个数做了限制必须是2的次方,如果...

Back to Top ↑