PostgreSQL 优化CASE - 无序UUID性能问题诊断
背景 某数据库的IO等待非常高, 基本上iostat 看到的磁盘使用率都是接近100%的. 分析这个业务库有如下特征 : 1. 最大的单表20GB左右, 1.2亿数据, 有插入操作, 无更改无删除, 有少量查询. 2. 这些表的索引较少, 只有PK和时间字段上的索引, 注意这里的PK是text类型, 并且使...
背景 某数据库的IO等待非常高, 基本上iostat 看到的磁盘使用率都是接近100%的. 分析这个业务库有如下特征 : 1. 最大的单表20GB左右, 1.2亿数据, 有插入操作, 无更改无删除, 有少量查询. 2. 这些表的索引较少, 只有PK和时间字段上的索引, 注意这里的PK是text类型, 并且使...
背景 pg_stat_plans 类似于auto_explain和pg_stat_statements的结合. 或者说它是从pg_stat_statements扩展而来. pg_stat_statements一般被用来跟踪数据库中执行的SQL语句的次数, 共计执行时间, 块扫描的信息等等. 如下 : ...
背景 一、where is the tuples? datafile, blocks. 从上到下的顺序查找. 1. PostgreSQL shared buffer 2. OS FileSystem cache 3. storage cache(raid card or controller’s cach...
背景 PostgreSQL和Oracle类似, 都记录了redo日志, PostgreSQL里面叫做xlog或者WAL. XLOG可以用来做基于物理文件备份的还原操作. 这一点和Oracle使用RMAN进行还原时需要用到的archive log非常类似. 这里就不阐述PostgreSQL如何做物理备份和还原了...
背景 今天要说的这个优化是从前面一篇讲解《performance tuning case :use cursor or trigger replace group by and order by》的延展. 例如一个表中有一个字段是性别, 这个表不管有多少条记录, 性别这个字段一般来说也就2个值 select ...
背景 LATERAL是SQL:2011的标准(T491 : LATERAL derived table), 在FROM 或者JOIN子句的子查询里面可以关联查询LATERAL前面的FROM子句(或ITEM)或者JOIN子句(或ITEM). 例如手册上提到的 : SELECT * FROM foo, LATER...
背景 一个比较经典的SQL如下 : select a.skyid, a.giftpackageid, a.giftpackagename, a.intimestamp from tbl_anc_player_win_log a group by a.skyid, a...
背景 触发器在数据库中的使用非常广泛, 例如用来跟踪用户行为, 用户登录过滤(Oracle中), 数据复制, 数据分区等等. 以前写过一些类似的应用场景案例分享, 感兴趣的朋友可以参考本文的末尾部分, 有相关的链接. 特别是在数据分区应用场景中, PostgreSQL目前没有将分区这部分代码作为COMMAND...
背景 本文在9.2下面测试, 较老版本可能系统表的字段名不一样, 需要修改触发器函数相关部分, 如pg_stat_activity的pid, 老版本是procpid. 数据同步是一个比较老的话题了, 在PostgreSQL中有比较多的同步手段, 例如流复制, slony, londiste, pgpool等. ...
背景 本文在9.2下面测试, 较老版本可能系统表的字段名不一样, 需要修改触发器函数相关部分, 如pg_stat_activity的pid, 老版本是procpid. 数据同步是一个比较老的话题了, 在PostgreSQL中有比较多的同步手段, 例如流复制, slony, londiste, pgpool等. ...