EXPLAIN ANALYZE 在 Greenplum 中的实现
在 PostgreSQL 中,使用 EXPLAIN ANALYZE 不仅能够打印查询优化模块的估算代价,同时也会打印出语句执行时的实际代价,当我们遇到一个 Slow Query 时,就可以使用 EXPLAIN ANALYZE 对结果进行分析。但是 Greenplum 是一个分布式数据库,每一个节点的执行时间以及处理的 tuple 数量都可能不同,那么此时 EXPLAIN ANALYZ 的结果到底表示什么? »
在 PostgreSQL 中,使用 EXPLAIN ANALYZE 不仅能够打印查询优化模块的估算代价,同时也会打印出语句执行时的实际代价,当我们遇到一个 Slow Query 时,就可以使用 EXPLAIN ANALYZE 对结果进行分析。但是 Greenplum 是一个分布式数据库,每一个节点的执行时间以及处理的 tuple 数量都可能不同,那么此时 EXPLAIN ANALYZ 的结果到底表示什么? »
当我们进行数据库等复杂应用系统时,如果出现了问题需要进行 debug 的话,gdb 就是第一选择。但是对于类似于内存等复杂问题来说,使用 gdb 进行调试颇为不便: gdb 无法“回滚”我们的操作,也就是说,当我们使用断点错过了一个非常重要的操作的话,一切就得重新开始。此时我们就可以选择 rr 这个支持反向调试的工具,一次复现,N 次调试。 »
在 PostgreSQL 的旧版本中,常常需要处理大量以指针传值的查询,因而存在着内存泄露的问题,直到查询结束时才能将内存收回。尤其是在处理 TOAST 数据时,需要使用大量的内存,因而使得内存泄露的问题更加明显。为此,PostgreSQL 在 7.1 版本开始实现了内存上下文管理机制。 »
Greenplum(即 Green Plum,青梅)是一个基于 MPP 体系结构和 PostgreSQL 数据库的开源 OLAP 服务,本文主要记录下个人在安装和调试 Greenplum 所遇到的问题以及发现的好用的工具,以帮助后面的小伙伴儿少走一些弯路。 »
在数据的并发读写过程中,由于写入并不是原子性的,因此当一个线程正在写时,如果另一个线程进行读操作的话就很有可能产生数据不一致的问题。 比如数据的前半部分写入了,但是后半部分尚未写入,那么在读取时就会取到中间值,也就是脏数据,典型案例就是 64 位整型的写入将会分为两次写入。 »
Coin Change 是一道动态规划问题中一道非常经典的题目,这是因为只要对原有的 Coin Change 问题稍加修改,就可以得到更复杂的动态规划问题,甚至是回溯问题。 »
在 DP 问题中我们将会着重的关注状态转移方程,同样地,在使用 BFS 对某些问题进行图论模型建模时,我们同样会关注状态转移。 »
动态规划是算法中一个非常有趣的 Topic,由于其具有非常强的灵活性,所以在面试时也会被经常提及到。动态规划问题我更喜欢称之为递推,因为其本质就是利用“历史数据”进行下一步的推导。 »
二叉树问题在算法领域是一个非常非常重要的话题,”遍历”这一 API 在非线性数据结构中有着举足轻重的地位,可以说 80% 的算法问题都是遍历问题。 »
回溯法在 wikipedia 中被解释成一种“暴力搜索法”,相较“暴力”一词我更喜欢称之为“枚举”,枚举一个空间中所有的搜索路径。 »