WiredTiger数据库技术介绍_第1页
WiredTiger数据库技术介绍_第2页
WiredTiger数据库技术介绍_第3页
WiredTiger数据库技术介绍_第4页
WiredTiger数据库技术介绍_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、WiredTiger数据库引擎技术介绍技术创新,变革未来摘要- 无锁化规避线程间竞争页面布局(memory layout)缓存和文件压缩整体架构内存管理 页面管理 BTree内存管理 叶子结点初始化写入 数据没有落入磁盘$97 = u = intl = parent_ref = 0 x0, split_gen = 0, index = 0 x0,row = 0 x0, fix_bitf = 0 x0, col_var = col_var = 0 x0, repeats = 0 x0,entries = 0, type = 7 a,flags_atomic = 0 000, unused = 0

2、00, read_gen = 201,memory_footprint = 746, dsk = 0 x0,modify = 0 x6933a0, cache_create_gen = 1,evict_pass_gen = 0$99 = intl = root_split = 0 x693080,column_leaf = append = 0 x693080, update = 0 x0, split_recno = 0,row_leaf = insert = 0 x693080, update = 0 x0p (WT_CURSOR_BTREE*)cursor).l. index.index

3、0.page.modify.u2p *(WT_CURSOR_BTREE*)cursor).l. index.index0.pageRow Leaf -叶子结点的内存信息$61 = u = intl = parent_ref = 0 x69fe30, split_gen = 0, index = 0 x0,row = 0 x69fe30,fix_bitf = 0 x69fe30 277, col_var = col_var = 0 x69fe30, repeats = 0 x0,entries = 2, type = 7 a,flags_atomic = 2 002, unused = 000,

4、 read_gen = 201,memory_footprint = 555, dsk = 0 x69edd0,modify = 0 x69fe50, cache_create_gen = 1,evict_pass_gen = 0从磁盘加载数据修改已经存在的key关注如下两个成员变量-dsk-Modify-row表示从dsk位置开始的偏移量p *(WT_CURSOR_BTREE*)cursor).l. index.index0.pageGDB调试指令页面释放 Hazard Pointer1.建立一个全局数组,数组容量为线程数目,每个线程只能修 改自己的数组元素,而不允许修改其他的数组元素,但可

5、以读 别的数组元素。2.当线程尝试访问一个关键数据节点时,先把该节点指针赋给 自己的数组元素(即不要释放这个节点)。3.每个线程自己维护一个私有链表,当线程准备释放掉某个节 点时,将该节点放入到链表中。当链表内的数目达到一个设定 的数目后,遍历该链表用于释放链表内所有节点。4.当释放节点时,需要检查全局数组,确定没有任何一个线程 的数组元素与当前指针相同时,就释放该节点。否则仍然滞留 在自己的链表中。数据持久化CheckpointOccur at an interval of60 secondsJournal logSync to disk every 50 milliseconds文件压缩默

6、认使用Snappy压缩算法缓存中是解压后的格式, 占用内存空间远大于磁盘并发控制访问/* Read/write lock */* Full 64-bit value */struct wt_rwlock volatile union uint64_t v; struct uint8_t current; uint8_t next; uint8_t reader;/* Current ticket */* Next available ticket */* Read queue ticket */uint8_t readers_queued; /* Count of queued readers

7、 */uint32_t readers_active;/* Count of active readers */ s; u;int16_t stat_read_count_off; int16_t stat_write_count_off;/* read acquisitions offset */* write acquisitions offset */int16_t stat_app_usecs_off; /* waiting application threads offset */int16_t stat_int_usecs_off; /* waiting server thread

8、s offset */WT_CONDVAR *cond_readers; WT_CONDVAR *cond_writers;/* Blocking readers */* Blocking writers */;db.serverStatus().wiredTiger.concurrentTransactions性能指标监控db.server.status().wiredtigerdb.coll.stats()Notes: 根据上述统计信息计算出mongotop和mongostat的结果缓存命中率function missrate(intervalMs) var statsStart = db

9、.serverStatus().wiredTiger.cache; var startTime = new Date();sleep(intervalMs);var endTime = new Date();var statsEnd = db.serverStatus().wiredTiger.cache;var logicalReads =statsEndpages requested from the cache - statsStartpages requested from the cache;var physicalReads =statsEndpages read into cac

10、he - statsStartpages read into cache; var elapsedTime = endTime - startTime;var missRate = physicalReads * 100 / logicalReads; var logicalReadRate =Math.round(logicalReads * 1000 * 100 / elapsedTime) / 100; var physicalReadRate =Math.round(physicalReads * 1000 * 100 / elapsedTime) / 100;print(Elapse

11、d time (ms), elapsedTime); print(logical Read Rate IO/s, logicalReadRate); print(physical Read Rate IO/s, physicalReadRate);print(wiredTiger miss rate, Math.round(missRate * 100) / 100);wiredTiger.cachepages requested from cachepages read into cacheunmodified page evicted参数设置db.createCollection( use

12、rs, storageEngine: wiredTiger: configString: leaf_page_max=64kb, leaf_value_max=64MB )Demo程序#include wiredtiger.h“#include int main(int argc, char* argv)char* home = /tmp/wt; WT_CONNECTION *conn; WT_SESSION *session; WT_CURSOR *cursor; const char* key, *value; int ret;wiredtiger_open(home, NULL, cre

13、ate, &conn); conn-open_session(conn, NULL, NULL, &session);/create a tablesession-create(session, table:demo, key_format=S, value_format=S);/open the tablesession-open_cursor(session, table:demo, NULL, NULL, &cursor); cursor-set_key(cursor, name);cursor-set_value(cursor, peng); cursor-insert(cursor)

14、;cursor-set_key(cursor, iris); cursor-set_value(cursor, teacher); cursor-insert(cursor);cursor-reset(cursor);while ( (ret = cursor-next(cursor) ) = 0 ) cursor-get_key(cursor, &key);cursor-get_value(cursor, &value); printf(Got Record: %s, %sn, key, value);conn-close(conn, NULL);Demo程序运行和调试编译wiredtigergit clone /wiredtiger/wiredtiger.git cd wiredtigersh autogen.sh./configure & make编译gcc -g -I. -o /tmp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论