让 sysbench 支持 PostgreSQL 服务端绑定变量
首先介绍一下几种数据库绑定变量的语义。.1. PostgreSQL 绑定变量的语义是使用?来表示任意位置的变量, 例如 :select info from test where id=? and c1=?; .2. Oracle 使用:var来表示变量,例如: stmt = db_prepare("UPDATE ".. table_name .." SET k=k+1 WHERE...
View Article改写 sysbench oltp.lua 支持PostgreSQL服务端绑定变量
源码在这里https://github.com/digoal/sysbench_lua/tree/master/lua已经把oltp.lua改掉了,支持10条SQL,(有需要可以再自行调整)包括但是由于sysbench不能识别execute语句,所以都算成了other query,...
View ArticlePostgreSQL 网络延迟 瓶颈定量分析
在使用sysbench或者pgbench测试数据库性能时,连unix socket, loop address性能差异是非常大的,特别是非常小的事务,例如基于KEY的查询,或者select 1这样的简单查询。原因是这种查询在数据库端的处理非常快,从而网络延迟在整个耗时占比上就会比较大。还有一种场景结果集比较大,网络延迟在整个耗时占比上也会比较大。那么如何来定量分析呢?.1....
View Article使用sysbench测试阿里云RDS PostgreSQL性能
测试PostgreSQL数据库性能的方法很多,例如pgbench, sysbench。sysbench因为使用lua脚本编程,支持多线程,灵活度更高,测试复杂的业务逻辑建议用sysbench。pgbench其实也很好,纯C写的,本身的开销小,测高并发低延迟的场景建议用pgbench。首先要购买RDS PG数据库实例创建数据库用户还需要购买同机房,与RDS...
View Articlegdb 调试 sysbench
前几天在写这篇文档的时候,发现sysbench对PostgreSQL libpq绑定变量使用的支持并不好。《让 sysbench 支持 PostgreSQL 服务端绑定变量》https://yq.aliyun.com/articles/34870那么怎样跟踪出错的代码呢?通过gdb跟踪是一种手段,但是sysbench在测试PostgreSQL libpq绑定时立即就退出。...
View Article如何分析D状态进程
在使用top查看进程状态时,我们有时候会看到D状态的进程。 w: S -- Process Status The status of the task which can be one of: ’D’ = uninterruptible sleep ’R’ = running ’S’ = sleeping ’T’ = traced or stopped ’Z’ = zombie...
View ArticlePostgreSQL Oracle兼容性之 - psql prompt like Oracle SQL*Plus
Oracle的SQL*Plus客户端支持使用promote输入变量值,然后在脚本的其他位置使用该变量值。例如大量的dbms脚本使用了这个用法, 如statspack输入起始值。https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12032.htm在PostgreSQL中,psql客户端也提供了类似的用法,例如:postgres=#...
View ArticlePostgreSQL 可靠性和一致性 代码分析
PostgreSQL 的数据可靠性是依赖XLOG的实现的,所有的对数据块的变更操作在write到磁盘前,一定是确保这个变更产生的REDO会先写到XLOG,并保证XLOG已落盘。也就是说流程是这样的:.1. 首先将需要变更的块从文件读入shared buffer.2. 变更shared buffer中block的内容.3. 将shared...
View ArticlePostgreSQL 备份链路sslcompression压缩
通过链路压缩,提高窄带网络PostgreSQL数据库的备份性能。需要用到PostgreSQL的SSL支持,用法请参考http://blog.163.com/digoal@126/blog/static/163877040201342233131835流复制协议,pg_dump都支持ssl,因为它们都走libpq的调用,libpq是支持ssl的。http://www.postgresql.org/do...
View Article论云数据库编程能力的重要性
云为我们提供了便利,降低了开发和运维的成本。但是也必须思考一个问题,我们的云组件之间的的网络延迟?(相比较局域网的服务器和服务器之间)你可以用各种方法测试验证一下。以往我们把数据放在数据库,数据库只提供简单的增删改查,大部分的业务逻辑放在应用服务器来完成。但是在云时代,如果我们还这样的话,应用服务器和数据库间如果多次交互,会浪费大量的时间。我们应该充分利用数据库的编程能力,例如PostgreSQL,...
View ArticlePostgreSQL csvlog 源码分析
PostgreSQL csvlog日志格式记录了非常多的信息,通过CSV外部表,可以使用SQL对日志进行分析。文档中的例子:http://www.postgresql.org/docs/9.5/static/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-CSVLOGCREATE TABLE postgres_log ( log_time...
View ArticlePostgreSQL pg_backup_start_time() CST 时区转换 问题
PostgreSQL的物理备份方法之一 :在使用pg_start_backup()函数新建备份点后,用户可以开始拷贝PG的数据文件。postgres=# select pg_start_backup('a'),now(); pg_start_backup | now -----------------+------------------------------- 0/50000028 |...
View Article中文模糊查询性能优化 by PostgreSQL trgm
前模糊,后模糊,前后模糊,正则匹配都属于文本搜索领域常见的需求。PostgreSQL在文本搜索领域除了全文检索,还有trgm是一般数据库没有的,甚至可能很多人没有听说过。对于前模糊和后模糊,PG则与其他数据库一样,可以使用btree来加速,后模糊可以使用反转函数的函数索引来加速。对于前后模糊和正则匹配,则可以使用trgm,TRGM是一个非常强的插件,对这类文本搜索场景性能提升非常有效,100万左右的...
View ArticlePostgreSQL 百亿级数据范围查询, 分组排序窗口取值 极致优化 case
本文将对一个任意范围按ID分组查出每个ID对应的最新记录的CASE做一个极致的优化体验。优化后性能维持在可控范围内,任意数据量,毫秒级返回,性能平稳可控。比优化前性能提升1万倍。CASE有一张数据表,结构: CREATE TABLE target_position ( target_id varchar(80), time bigint, content text ); 数据量是 100 亿条左右...
View Article论count使用不当的罪名 和 分页的优化
分页是一个非常常见的应用场景,然而恐怕没有多少人想过其优化方法。确一味的责怪为什么数据库用count(*)计算分页数是如此的慢。很多开发人员喜欢用count先算一下结果集的大小,然后就知道需要排多少页。然后再从数据库取出对应的数据,并展示给用户。问题1count会扫一遍数据,然后取数据又扫一遍数据。重复劳动。问题2,很多人喜欢用order by offset...
View Articledistinct xx和count(distinct xx)的变态递归优化方法
今天要说的这个优化是从前面一篇讲解《performance tuning case :use cursor or trigger replace group by and order by》http://blog.163.com/digoal@126/blog/static/16387704020128142829610/的延展.CASE例如一个表中有一个字段是性别, 这个表不管有多少条记录,...
View ArticlePostgreSQL Oracle 兼容性之 - add_months
有网友反映PostgreSQL oraface的add_months在某些日期与Oracle 的add_months不一致。查了一下Oracle 的开发手册,add_months是这样定义的, 如果当前日期是月末,或者目标月没有当前日期的,取最后一天。例子2015年2月28日是2月的最后一天,所以按照Oracle的计算方法,无论加减多少个月结果应该都是目标月份的月末,而PostgreSQL...
View ArticlePostgreSQL GIN索引limit慢的原因分析
PostgreSQL GIN索引的结构如下图 :假设这个表有2列,一列存储INT,另一列存储INT数组,最左边的表示记录的行号。假设对INT数组建立GIN索引,那么GIN索引会记录每个数组element对应的行号,对于行号多的,会存成LIST,然后在索引中指向该list。好了接下来分析一下limit慢的原因, 实际上和gin索引的扫描方法有关,目前gin 索引只支持bitmap index...
View ArticlePostgreSQL 逻辑结构 和 权限体系 介绍
本文旨在帮助用户理解PostgreSQL的逻辑结构和权限体系,帮助用户快速的理解和管理数据库的权限。逻辑结构最上层是实例,实例中允许创建多个数据库,每个数据库中可以创建多个schema,每个schema下面可以创建多个对象。对象包括表、物化视图、操作符、索引、视图、序列、函数、......
View Article