浅析 Greenplum 中的 Squelch 机制
Greenplum Squelch 机制用于提前终止执行节点的执行,和 PostgreSQL 单机节点不同的是,Greenplum 无法通过停止调用函数停止节点的执行,因为 Greenplum 涉及到不同节点之间的数据传输。 »
Greenplum Squelch 机制用于提前终止执行节点的执行,和 PostgreSQL 单机节点不同的是,Greenplum 无法通过停止调用函数停止节点的执行,因为 Greenplum 涉及到不同节点之间的数据传输。 »
第一次用“庖丁解牛”作为标题,多少还是有些不自量力的,尽管我对 PostgreSQL 的理解仍然只是停留在一个非常浅显的阶段,但是我想尽我所能的把一件事情讲清楚,并且完成从“明白”到“理解”的进步。BRIN Index 是 PostgreSQL 中非常年轻的索引,索引原理和具体实现都不复杂,是着手 PostgreSQL AM 一个非常好的切入点。 »
Resource Group (下面简称 RG) 是 Greenplum 中用于管理内存和 CPU 资源的一个资源管理器。和 Resource Queue 相比,Resource Group 除了能够限制查询语句所使用的内存资源和并发数量以外,还通过使用 Linux Control Group 限制了 CPU 资源的使用。 »
最近一直在做关于 Linux Control Group 的一些工作,包括 version 1 和 version 2,在调研的过程中发现 Linux 这部分的文档并没有解释的很清楚,其它的一些博客也只是简单的介绍如何使用 Cgroup,对其内部机理并没有做过多描述。因此,这里简单写一些个人关于 Cgroup 理解。 »
在单机的 PostgreSQL 数据库中,我们使用 xmin、xmax 以及 xip 来判断当前获取到的元组是否对我们可见。但是对于 Greenplum 这一分布式数据库而言,数据分散在不同节点上,同一个分布式事务所插入、更新的数据在不同的节点上会有不同的版本,那么此时又该如何判断元组的可见性呢? »
在 Greenplum 数据库中,允许用户更新元组的分片键,使得数据从当前节点转移到另一个节点,而这项能力是绝大多数分布式数据库所不支持的,例如 MongoDB 一旦设置了分片键,便无法进行修改和删除。实际上,Greenplum 非常巧妙的利用了 Motion Node 可以在节点之间进行数据传输的特性,以及 PostgreSQL 的火山模型,实现了更新分片键的特性。 »
位图(bitmap)索引是 Greenplum 中所特有(对比 PostgreSQL)的一种索引类型,非常适用于大数据量且数据修改需求不大的数据分析场景(OLAP)中使用。Bitmap 索引可以保证在提供优良查询速度的前提下,使用更小的空间开销,能够有效节省大数据量环境的硬盘空间使用,从而降低系统运行成本。 »
在 PostgreSQL 中,使用 EXPLAIN ANALYZE 不仅能够打印查询优化模块的估算代价,同时也会打印出语句执行时的实际代价,当我们遇到一个 Slow Query 时,就可以使用 EXPLAIN ANALYZE 对结果进行分析。但是 Greenplum 是一个分布式数据库,每一个节点的执行时间以及处理的 tuple 数量都可能不同,那么此时 EXPLAIN ANALYZ 的结果到底表示什么? »
当我们进行数据库等复杂应用系统时,如果出现了问题需要进行 debug 的话,gdb 就是第一选择。但是对于类似于内存等复杂问题来说,使用 gdb 进行调试颇为不便: gdb 无法“回滚”我们的操作,也就是说,当我们使用断点错过了一个非常重要的操作的话,一切就得重新开始。此时我们就可以选择 rr 这个支持反向调试的工具,一次复现,N 次调试。 »
在 PostgreSQL 的旧版本中,常常需要处理大量以指针传值的查询,因而存在着内存泄露的问题,直到查询结束时才能将内存收回。尤其是在处理 TOAST 数据时,需要使用大量的内存,因而使得内存泄露的问题更加明显。为此,PostgreSQL 在 7.1 版本开始实现了内存上下文管理机制。 »