一佳互联

展开菜单

Postgresql统计信息概述

Postgresql统计信息概述
  对于sql优化,除了索引之外,执行计划和统计信息是无法绕开的一个话题,如果sql优化(所有的RDBMS)脱离了统计信息的话就少了一个为什么的过程,味道就感觉少了一大半。刚接触Postgresql,粗浅地学习总结一下Postgresql相关的统计信息。 postgresql 进程模型 开始之前,有必要了解一下postgresql的进程结构。 postgresql 进程模型,与MySQL或者SQLServer的单进程多线程机制不同,Postgresql为...

PostgreSQL中的死锁和锁等待

PostgreSQL中的死锁和锁等待
  开始之前明确一下死锁和锁等待这两个事件的异同相同的之处:两者都是当前事物在试图请求被其他事物已经占用的锁,从而造成当前事物无法执行的现象不同的之处:死锁是相关session双方或者多方中必然要牺牲(回滚)至少一个事务,否则双方(或者多方)都无法执行;锁等待则不然,对于暂时无法申请到的锁,尝试持续地“等待一段时间”,这个等待的时间就是“锁等待”参数决定,超出之后就不等了。 当事物锁等待超时后,当前事物已经持有的锁如何处理,是一个非常考究的问题,对于My...

PostgreSQL中三种自增列sequence,serial,identity区别

PostgreSQL中三种自增列sequence,serial,identity区别
这三个对象都可以实现自增,这里从如下几个维度来看看这几个对象有哪些不同,其中功能性上看,大部分特性都是一致的或者类似的。 1,sequence在所有数据库中的性质都一样,它是跟具体的字段不是强绑定的,其特点是支持多个对个对象之间共享。  sequence作为自增字段值的时候,对表的写入需要另外单独授权sequence(GRANT USAGE ON SEQUENCE test_old_id_seq;)  sequence类型的字段表,在使用CREATE TABLE new_t...

PostgreSQL中的位图索引扫描(bitmap index scan)

PostgreSQL中的位图索引扫描(bitmap index scan)
  从MySQL的MRR开始 开始之前,先从MySQL入手,看一下MySQL中的MRR机制原理,也就是Multi-Range Read。MySQL中在按照非聚集索引的范围查找且需要回表的情况下,比如select * from t where c2>100 and c2<200;c2为非聚集索引。如果直接根据非聚集索引(二级索引)键中的聚集索引键去回表,会产生大量的随机性IO读取(图1)。为了避免频繁的回表造成的随机IO,读取完非聚集索引上符合条件的k...

PostgreSQL执行计划概述

PostgreSQL执行计划概述
  执行计划个人理解是一个“点”,“线”,“面”的问题,关系数据库中执行计划是一个同质化的对象,串联起来还是比较容易掌握的,对于一条复杂的sql,所谓的点就是其中单个表的访问方式,线是表之间的连接\驱动顺序,面就是表与表之间的具体连接算法以及中间结果在内存缓冲区中的处理(类似于bitmap scan,中间结果集的buffer处理等等), 这样一来,一个sql就的执行计划就可以逐步拆解开来,可以逐个基于细节来分析。 Postgresql的执行计划,整体上看跟M...

PostgreSQL MVCC原理以及事务可见性对执行计划的影响

PostgreSQL MVCC原理以及事务可见性对执行计划的影响
  先从 上次遇到的一个执行计划相关的疑问入手,类似于select count(1) from table的查询,可以在即某些较小字段上的索引进行扫描来替代全表扫描来实现count优化,这是一个MySQL中传统的优化套路,但是在postgresql中类似场景总是会走全表扫描而不是预期的索引扫描,为什么同样的套路搬到Postgresql上就不好使了?这是一个postgresql中一个典型的MVCC机制造成的,应该是一个比较有代表性的问题了,看起来是十年前就有人问过...

在 PostgreSQL 中使用码农很忙 IP 地址数据库

在 PostgreSQL 中使用码农很忙 IP 地址数据库
在下载到码农很忙 IP 地址数据库后,我们可以将其存储在 PostgreSQL 数据库中,并在需要查询某个 IP 对应的位置数据时,通过 SQL 语句获取正确的结果。这是一种很便捷的使用方式,并且在增加了恰当的索引后,可以取得不错的搜索效果。 PostgreSQL 数据库内置了 inet 和 range 两个数据类型,用来表示一个网络地址和数值范围。为了达到更高的查询速度,我们可以自定义一个名为 inet_rang ...

Postgres 日志监控:阻塞,死锁,Checkpoint 优化(译)

Postgres 日志监控:阻塞,死锁,Checkpoint 优化(译)
原文地址: https://pganalyze.com/blog/postgresql-log-monitoring-101-deadlocks-checkpoints-blocked-queries   部分运维PostgreSQL数据库的人通常有很多工作要做,并且没有足够的时间来定期查看Postgres日志文件。 但是,这些日志通常包含一些关键细节,这些细节涉及新的应用程序代码如何由于锁定问题而影响数据库,或者某些配置参数如何导致数据库产生I...

PG虚拟文件描述符(VFD)机制——FD LRU池一:postgresql-8.4.1/src/backend/storage/file/fd.c

PG虚拟文件描述符(VFD)机制——FD LRU池一:postgresql-8.4.1/src/backend/storage/file/fd.c
引入虚拟文件描述符机制的痛点:单个进程可以轻易拥有超过系统限制的打开文件数 虚拟文件描述符机制的原理概述:VFD作为LRU池管理文件描述符,并根据需要打开和关闭实际需要的OS文件描述符。   代码解析   fd.c是PG后端代码中存储管理器中的一部分,此代码管理“虚拟”文件描述符('virtual' file descriptors, VFD)的缓存。服务器出于各种原因打开许多文件描述符,包括基表(base tables),暂存文件(scratch file...

PostgreSQL Shared Buffers 全面指南(译)

PostgreSQL Shared Buffers 全面指南(译)
译者注:与MySQL设置innodb_buffer_pool_size = 80%左右的系统内存相比,也就是将操作系统大部分内存分配给Innodb的buffer pool的缓存管理机制不同,Postgresql采用数据库采用实例buffer和操作系统buffer双缓存(effective_cache_size)的工作模式,这一点两者还是有着比较本质上的差异的。缓存作为数据库的一个核心组件,shared_buffers决定了数据库实例层面的可用内存,而文件系统缓存的大小是eff...