PostgreSQL 可靠性和一致性 代码分析
背景 PostgreSQL 的数据可靠性是依赖XLOG的实现的,所有的对数据块的变更操作在write到磁盘前,一定是确保这个变更产生的REDO会先写到XLOG,并保证XLOG已落盘。 也就是说流程是这样的: 1. 首先将需要变更的块从文件读入shared buffer 2. 变更shared buffe...
背景 PostgreSQL 的数据可靠性是依赖XLOG的实现的,所有的对数据块的变更操作在write到磁盘前,一定是确保这个变更产生的REDO会先写到XLOG,并保证XLOG已落盘。 也就是说流程是这样的: 1. 首先将需要变更的块从文件读入shared buffer 2. 变更shared buffe...
背景 Oracle的SQL*Plus客户端支持使用promote输入变量值,然后在脚本的其他位置使用该变量值。 例如大量的dbms脚本使用了这个用法, 如statspack输入起始值。 https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12032...
背景 在使用top查看进程状态时,我们有时候会看到D状态的进程。 w: S -- Process Status The status of the task which can be one of: ’D’ = uninterruptibl...
背景 有没有办法实现在pg9.5版本之前实现upsert功能,整理如下 原文地址 https://yq.aliyun.com/articles/36103 正文 最近有开发人员问,有没有办法实现在pg9.5版本之前实现upsert功能,现整理如下 创建测试表,注意此处先不要主键或唯一约束 create t...
背景 在使用sysbench或者pgbench测试数据库性能时,连unix socket, loop address性能差异是非常大的,特别是非常小的事务,例如基于KEY的查询,或者select 1这样的简单查询。 原因是这种查询在数据库端的处理非常快,从而网络延迟在整个耗时占比上就会比较大。 还有一种场景结...
背景 源码在这里 https://github.com/digoal/sysbench_lua/tree/master/lua 已经把oltp.lua改掉了,支持10条SQL,(有需要可以再自行调整)包括 但是由于sysbench不能识别execute语句,所以都算成了other query, 实际上就是这...
背景 本文参考老唐的使用sysbench和sqlldr并行装载Oracle测试数据而成。 http://blog.osdba.net/538.html sysbench原来自带的lua数据装载脚本是使用以下方式串行装载的,速度比较慢(比单条insert快,但是比COPY慢)。 insert into tab...
背景 prepared statement是非常重要的高并发SQL优化手段之一,效果也显而易见。 下面是测试,同时观察绑定和不绑定的情况下的profile。 在未使用绑定变量的时候,新增或上升了一些硬解析相关的CODE。 测试数据 postgres=# create table test(id int p...
背景 PostgreSQL 可以通过参数设置是否要记录SQL的执行时间,以及执行时间超过多少的SQL。 注意这里的执行时间实际上包含了网络的传输时间。 所以在遇到慢查询时,除了要排查数据库的问题,实际上还需要排查网络以及客户端的问题,因为客户端接收数据堵塞也会造成慢查询,就像我前天写的文章。 Postgre...
背景 Iperf是一个网络性能测试工具, 主要应用于LINUX服务器下面。可以测量最大TCP和UDP带宽,具有多种参数和特性。 可以记录带宽,延迟抖动和数据包丢失,最大组和MTU等统计信息,通过这些信息可以发现网络问题,检查网络质量,定位网络瓶颈。Iperf在linux和windows平台均有二进制版本供自由使...