2012年2月29日

浅述InnoDB与PostgreSQL的动态内存管理

摘要: 在服务器程序的编写当中,内存管理是非常重要的一块。大部分优秀的开源服务器程序都有自己的一套内存管理方法,以避免内存泄漏以及内存碎片,提高程序内存分配效率,便于检测内存越界读写等错误。本文主要讨论InnoDB与PostgreSQL中用于程序内部对象的动态内存的不同管理方法。 阅读全文

posted @ 2012-02-29 10:59 Swimming Fish 阅读(792) 评论(0) 推荐(0) 编辑

2012年1月5日

内存索引的实际应用中选择T树还是B树

摘要: 在T树最开始被提出的时候,其CPU效率被认为比B树要好[1]。不过20多年过去了,CPU的速度和内存的访问速度的发展不平衡,CPU缓存的容量也在不断被扩充,这又不得不成为新的考虑因素。在有并发操作的情况下,B树的性能要好于T树。在没有IO瓶颈的情况下,为保证并发操作时一致性的加解锁的开销将成为影响性能的主要因素。 阅读全文

posted @ 2012-01-05 20:41 Swimming Fish 阅读(1460) 评论(0) 推荐(0) 编辑

2011年9月7日

InnoDB Plugin Fast Index Creation建索引期间不支持对表的读写

摘要: 之前认为MySQL可以进行在线增加索引,增加索引时会调用handler::add_index接口,但近期调试时发现,在调用add_index之前,MySQL会关闭所有的handler。因此怀疑可能在add_index期间表是不允许被操作的。InnoDB Plugin的文档说建secondary index时表是可读的,但是实际调试过程中并非如此。 阅读全文

posted @ 2011-09-07 23:37 Swimming Fish 阅读(381) 评论(0) 推荐(1) 编辑

2011年3月6日

从MySQL Signal 14 Warning看MySQL的线程信号处理模型

摘要: “MySQL Signal 14 Warning”这个问题来源于在使用我们的存储引擎时会在MySQL的log中发现大量的“Got signal 14 from thread 0”的警告信息,并且我们移植的MySQL测试用例也会不确定地失败,除非显式指定忽略警告信息,但这也导致一些有用 的warning也被忽略了。在很长的一段时间里我们都没有能够找到真实的原因,后来我才在阅读了MySQL上层的代码和我们的代码, 以及加上一些trace后确定了问题的所在。 阅读全文

posted @ 2011-03-06 17:16 Swimming Fish 阅读(419) 评论(0) 推荐(1) 编辑

2010年10月15日

数据压缩与LZ系列算法及其改进

摘要: 字典压缩的原理是构建一个字典,用索引来代替重复出现的字符或字符串。原始的LZ77算法是利用了字符串中上下文的相关性特点,通过一个滑动窗口(一个查找缓冲区)来作为字典,对要压缩的字符串保留一个look-aheadbuffer。压缩后的字符串采用三元组来表示:,在滑动窗口中从后往前找,如果在窗口中有曾经出现过的相同字符,看最多可以匹配多少字节,完了继续往前查找,查找完了取窗口中最长的匹配串(如果有多个相同长度的串可以匹配,取最后一个),将这个匹配串距当前位置的位移,长度,及下一个字符构成的三元组写出。如果在滑动窗口找不到匹配串,那么位移=长度=0,加上不能压缩的字符一起输出。滑动窗口可以通过循环队列实现。解压缩是一个比较简单而且快速的过程,在需要解压缩时通过位移和长度拷贝之前出现过的字符串就可以完成。 阅读全文

posted @ 2010-10-15 21:16 Swimming Fish 阅读(3486) 评论(0) 推荐(1) 编辑

几种主流数据库的压缩技术对比

摘要: 压缩功能几乎是当前主流数据库的标配功能,除了能够节省存储空间外,在IO密集型的系统中, 可能也会带来性能的提升。由于我们的存储引擎也需要做记录级压缩的功能,所以很长的一段时间都在研究数据库压缩的技术,包括算法的选型及优化,当然这之前要对现有主流数据库的压缩功能做一些调研。 阅读全文

posted @ 2010-10-15 21:02 Swimming Fish 阅读(2212) 评论(0) 推荐(2) 编辑

导航