Openwrt 路由器折腾

前言 最近看到了闲置已久的小米路由器3,可以刷 lede 系统了,就想着做个透明代理来试试。经过两三个星期的折腾,总算是成功了,下面讲解下透明代理实现的方案和原理。 网络框架 整个框架由域名解析和 ip 分流两部分组成。域……

Postgresql slru 缓存和存储

前言 简单的 lru 缓存管理(简称 slru),用于持久化数据并且提供 lru 算法来缓存。slru 在 postgresql 存在着多处使用,比如存储事务状态的 clog 日志,就是使用 slru 来管理的。 缓存和文件的对应关系 文件的数据都是存储在 page 里,每个 page……

Postgresql 编写自定义 C 函数

前言 postgresql 支持自定义函数,并且还支持多种语言进行编写, 极大的提高了可扩展性。postgresql 支持使用 pgSQL(postgresql提供的类sql语言),python 和 c 语言来编写函数,本篇主要讲解 c……

Postgresql BgWriter 原理

前言 postgresql 有一个后台进程 bgwriter,它会定时刷新缓存到文件系统中。这种机制提高了缓存的替换速度,因为在寻找空闲缓存时,有时需要将脏页刷新到文件中,而刷新操作是比较耗时的。同样它也提高了执行 checkpoint 的完成速……

Postgresql Checkpoint 原理

前言 postgresql 的 checkpoint 是数据库中非常重要的部分,它涉及到数据库的缓存,持久化与数据恢复各个方面。它在执行时会涉及到大量磁盘 IO,所以对于它的优化和监控是不可缺少的。此篇文章讲述了 checkpoint 的原理及其监控,这对调优会有很大……

Postgresql Wal 日志构建原理

前言 Postgresql 使用 wal 日志保存每一次的数据修改,这样保证了数据库即使意外宕机,也能利用它准确的恢复数据。wal 日志也叫做 xlog,在 9.4 版本之后作了重大更新,本篇只讲解最新版的格式。wal 日志被用于多个方面,比如……

Postgresql 缓存替换算法

前言 postgresql 使用缓存来作为与磁盘读写的中间层,但是缓存的大小是有限的,当缓存不够用时需要剔除一些不常用的。但是如何高效的选出那些需要剔除的缓存呢,postgresql 针对不同的应用场景,提供了简单高效的不同……

Postgresql 缓存池原理

前言 postgresql 为了提高响应速度,在存储层上面添加了一层缓存,这样对于数据的查询和修改,都会先在缓存中操作,后面才会同步到磁盘。这样对于一些热点数据,性能提高非常明显。缓存的基本单位对应文件的一个 block,本……

Postgresql LWLock 原理

前言 postgresql 的架构是基于多进程的,进程之间往往存在着数据共享,比如缓存读写。这时 postgresql 需要提高一种锁机制来支持并发访问,但是 linux 只实现了线程间的读写锁,所以 postgresql 自己实现进程间的读写锁,它主要利用了信号量和自旋锁来实……