PostgreSQL 扩展 - pg_dirtyread 读取未回收数据
pg_dirtyread 扩展提供了从 PostgreSQL 数据库中读取未回收的数据的能力。它支持 PostgreSQL 9.2 及更高版本(在 9.2 上,至少需要 9.2.9)。
pg_dirtyread 扩展提供了从 PostgreSQL 数据库中读取未回收的数据的能力。它支持 PostgreSQL 9.2 及更高版本(在 9.2 上,至少需要 9.2.9)。
SystemTap 为 Linux 内核和用户态程序提供了动态跟踪功能。用户可以自定义探测事件来跟踪程序的运行情况,如函数调用栈、系统调用以及其他事件。SystemTap 可以在不修改代码、甚至是不需要重启的情况下就能分析程序的运行情况。
SystemTap 的基本思想是命名事件,以及事件对应的处理程序。当运行 SystemTap 脚本时,SystemTap 会监视事件;一旦事件发生,Linux 内核就会将处理程序作为子例程运行,然后继续运行。SystemTap 有几种事件:进入/退出函数、计时器到期、会话开始/终止等。处理程序是一系列脚本语句,指定事件发生时要执行的工作。这项工作包括从事件上下午中提取数据,将其存储到内部变量中,打印结果。
SystemTap 的工作原理是将 SystemTap 脚本翻译成 C 语言,然后将其编译为内核模块,并加载到内核中并启用脚本中的探测点;当相应的事件发生时,事件对应的处理程序被执行;一旦 SystemTap 会话结束,探测点将被禁用,内核模块也被卸载。下图是 SystemTap 的处理过程。
在 Git bisect 二分查找实践这篇文章中我们知道了如何通过 git bisect
来进行快速定位,但是,我们需要手动的去执行测试命令以确定哪个提交是正常的,哪个提交是异常的。本文记录了如何将 git bisect
的二分查找自动化。
Checkpointer 进程负责将 PostgreSQL 数据库中的脏页刷到磁盘中,当我们通过 GDB 附加到 checkpointer 进程之后,通过执行 CHECKPOINT
语句发现不能触发后续的 checkpoint 代码。本文针对这个问题简要介绍一下如何调试 PostgreSQL 数据库的 checkpointer 进程。
内存泄露又来啦!这次的主角是 tmux。我在升级 tmux 到 3.4 之后,并在 tmux 绘画中使用 fzf 时,出现了如下内存泄露。
1 | ================================================================= |
本文记录 Cybertec PostgreSQL 数据库在 maintenance_work_mem
较大时导致的读取文件参数无效或崩溃的情况。
本文简要记录一个由 psql 提供的 \copy
元命令引发的错误,如下所示:
1 | postgres=# \copy tbl FROM '/tmp/tbl.csv' WITH csv; |
今天在调试程序的时候遇到了 GDB 导致的 segfault,感觉还挺有意思的,因此在这里做一个简要记录。
PostgreSQL 允许数据库会话同步它们的快照。快照确定哪些数据对使用快照的事务可见。当两个或多个会话需要查看数据库中的相同内容时,需要同步快照。如果两个会话只是独立地开始它们的事务,在两个 START TRANSACTION
命令的执行之间总是有可能提交第三个事务,这样一个会话可以看到该事务的效果,而另一个则看不到。
为了解决这个问题,PostgreSQL 允许事务导出它正在使用的快照。只要导出快照的事务保持打开状态,其他事务就可以导入这个快照,从而保证它们看到的数据库视图与第一个事务看到的完全相同。
快照可以通过 pg_export_snapshot()
函数导出,并通过 SET TRANSACTION
命令导入。本文我将从源码角度分析一下快照导出和导入的流程。
最近在使用 IRC 的时候发现 Emacs 的 ERC 不能登录 IRC 了,提示如下错误信息:
1 | Opening connection.. [13:47] |