随笔分类 - berkeley db代码阅读
摘要:postgres 同理的code: backend/cdb/cdblogsync.c, createZeroFilledNewFile() 看代码随手记:log_put.c, __log_write() 我的理解:在flush log时使用fdatasync, 若log文件长度发生变化, 则仍需要写
阅读全文
摘要:tail queue是bdb中用的最多的数据结构. 定义在 src/dbinc/queue.h: 注: TRACEBUF,QMD_TRACE_HEAD等是为了 queue代码的debug, 这里移除出去. 数据结构 ======== ``` // type 即为 用户定义的 类型. 比如 db.h, // struct __db_txn { // * TAILQ_HEAD(__...
阅读全文
摘要:对bdb log来说, 在共享内存中 有一块 buffer, 同时每一个 log cursor 都自带一个 malloc的buf. why? 我认为: region buffer存的是log最末尾, 主要用来写. 毕竟 log 是 顺序写的, 最末尾的 log rec当然最热. 同时 多个 log
阅读全文
摘要:# txn.h struct __db_txnregion SH_TAILQ_HEAD(__active) active_txn; SH_TAILQ_HEAD(__mvcc) mvcc_txn; # txn.c, __txn_begin_int(), txn 加入的 buffer version 不可以被看见. MAX_LSN(td->visibl...
阅读全文
摘要:http://www.cnblogs.com/promise6522/archive/2012/05/09/2493542.html
阅读全文
摘要:dirty reader怎样 不被writor block住? 如数据库支持dirty read, 则 所有打开的dbhandle都配置 DB_READ_UNCOMMITTED; 在线程拿到 write锁并做完处理后(比如splite one page), 降为 was_write锁. WWRITE
阅读全文
摘要:__memp_alloc() 注: MPOOL_ALLOC_SEARCH_DYN 没有 出现在 bdb document上, 也没出现在 除了mp_alloc外的代码里. 先删了 以便代码清楚. 按 mpool初始化代码来看, 一个hash bucket上 假定为 2.5个buffer. 查找有 三
阅读全文
摘要:priority based lru in src/mp/mp_fget.c, __memp_fget(), 初始化 一个page buffer时, 设置其 priority: in src/mp/mp_fget.c, __memp_fput(), 对一个page buffer做put, 使其ref
阅读全文
摘要:repmgr_method.c, __repmgr_start_int()repmgr_method.c, __repmgr_start_msg_threads()repmgr_msg.c, __repmgr_msg_thread()message_loop() while ((ret = __re
阅读全文
摘要:repmgr/repmgr_net.c, __repmgr_send(): 做send_broadcast, 然后根据policy 对DB_REP_PERMANENT的处理 __repmgr_send_broadcast(): 对每个site, send_connection(). MASTER 发
阅读全文
摘要:repmgr_method.c, __repmgr_start_int() 初始2个elect线程. repmgr_elect.c, __repmgr_init_election() __repmgr_elect_thread() __repmgr_elect_main() lease, prefe
阅读全文
摘要:txn/txn.c, __txn_prepare(), 对比 __txn_commit(). 基本只差了 写一个 commit log rec; 释放写锁; 释放内存数据结构等. td->status = TXN_PREPARED; __txn_abort(), 对 已经TXN_PREPARED 的
阅读全文
摘要:mux_win32.c 和mut_tas.c的实现类似: 在mut_pthread.c 中, 不去spin: SELF_BLOCK语义: 初始化mtx后, 马上lock一次. 再一次 lock则当前线程(可以不是第一次lock的线程)被锁住. 通过tas 标志位. 因为mtx标志位已经设置, 再次l
阅读全文
摘要:原文链接: http://www.cnblogs.com/promise6522/archive/2012/05/27/2520028.html 写的很棒也很详细. 摘要: fsync需要sync文件修改和 metadata; fdatasync则只在必要的时候才sync metadata, 可以节
阅读全文
摘要:想了解 berkeley db的底层实现, Margo Seltzer 和 Keith Bostic的这篇文章是必须要看的: http://www.aosabook.org/en/bdb.html 一直想翻译过来, 不过太懒了. 今天在网上看到已经有人做过翻译的工作了, 链接: http://www
阅读全文
摘要:berkeley db的组提交机制 见 src/log/log_put.c, __log_flush_int(). 一个 事务 是否已经提交, 关键看其在log里是否有 commit log 记录, 并且此log记录已经sync到磁盘上了. 所以transaction commit, flush l
阅读全文
摘要:BDB中 内存池是用一个 hash table来管理 buffers. 这个hash table的大小首先是和 内存池的大小成正比. 其次, bdb code会经常遍历hash chain, 它的长度 不能太大. 计算公式为: cache 大小/region数目 = 每个region的大小 buck
阅读全文
摘要:一个典型的 buddy system. 代码在env/env_alloc.c 数据结构: ALLOC_LAYOUT: 管理整块内存(即bdb的某个region)的 数据结构. 放于此内存 开头位置. SH_TAILQ_HEAD(__addrq) addrq; // address queue. 按地
阅读全文
摘要:下面的代码保证了BDB 的write ahead logging机制. 在写database page之前, 确保此page buffer对应的log lsn已经 sync到 disk上. //src/mp/mp_bh.c, __memp_pgwrite() /* * If the page is
阅读全文

浙公网安备 33010602011771号