自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

duxingxia356的专栏

围绕数据库架构的博客记录

  • 博客(237)
  • 收藏
  • 关注

原创 LeanStore论文分析

目录摘要:构筑BLock:指针移动高效的页面替换:线程同步的扩展能力:LEANSTORE数据结构概述Swizzling的详细设计Cooling Stage输入输出缓冲区管理的数据结构乐观锁Epoch-Based Reclamation内存分配和NUMA友好的实现细节和优化方案汇总:摘要:论文认为,传统的采用BufferP...

2020-11-10 20:54:33 637

转载 linux singal

Linux支持POSIX标准信号和实时信号。下面给出Linux Signal的简表,详细细节可以查看man 7 signal。默认动作的含义如下Term终止进程信号 取值 默认动作 含义(发出信号的原因) SIGHUP 1 Term 终端的挂断或进程死亡 SIGINT 2 Term 来自键盘的中断信号 SIGQUIT 3 Core 来自键盘的离开信号 SIGILL 4 Core 非...

2020-07-26 07:10:41 239

原创 全局索引

单机表索引:本地分区索引(Local Partitioned Index):

2020-06-26 21:06:50 2729

原创 mysql 8.0.19 行锁分析-1

lock_rec_lock_slow| | => *wait_for = lock_rec_other_has_conflicting| | => err = rec_lock.add_to_waitq(wait_for);| | => lock_create_wait_for_edge| | => ut_ad(lock_mutex_own());| | => waiter->lock.b...

2020-05-15 17:46:22 256

原创 mysql数字字典相关(5.6、5.7)

目录table_cachetable_cache的使用背景table_cache的存储结构table_cachetable_cache的使用背景当我们的客户端程序提交 Query 给 MySQL 的时候,MySQL 需要对 Query 所涉及到的每一个表都取得一个表文件句柄信息,如果没有 Table Cache,那么 MySQL 就不得不频繁的进行打开关闭文件操作,无疑会对系统性能产生一定的影响,Table Cache 正是为了解决这一问题而产生的。在有了 Table Cache 之

2020-05-12 11:43:55 346

原创 innodb 行查找,有点老了

do_select():查询入口函数。| sub_select():查询部分join的记录。循环调用ha_innobase::rnd_next()和evaluate_join_record()获取并处理该部分的每条记录。(sql\sql_select.cc:11705)| | evaluate_join_record():处理一条查询记录。(sql\sql_select.cc:117...

2020-03-26 10:20:06 314

转载 MySQL8.0新特性: 新的事务锁调度VATS简介

传统的事务锁赋予方式是采用FIFS先来先服务的方式,从MySQL8.0.3开始,引入了一种新的模式CATS调度方式,全称为Contention-Aware Transaction Scheduling (或者叫做VATS, V=Variance). 顾名思义就是能够感知到事务竞争关系来实现全局最小开销的锁调度方式。举个简单的例子,trx1和trx2同时等待一条记录锁,按照传统的方式,谁先进入等...

2020-03-11 16:17:29 262

原创 show engine innodb status

注意:以下使用mysql5.5.24版本做解读,mysql5.6.x和5.7.x输出内容有些地方有调整。1.第一段是头部信息,它仅仅声明了输出的开始,其内容包括当前的日期和时间,以及自上次输出以来经过的时长。=====================================16012912:07:26INNODBMONITOROUTPUT#第二行是当前日期和时...

2020-03-11 14:19:31 371

转载 MySQL 生成binlog的代码分析

binlog文件的内容 log event MySQL的binlog文件中记录的是对数据库的各种修改操作,用来表示修改操作的数据结构是Log event。不同的修改操作对应的不同的log event。比较常用的几种log event有:Query event、Row event、Xid event等。其中Queryevent对应的是一条SQL语句,在DDL操作和STMT格式的bi...

2020-03-09 18:00:52 893

原创 MySQL 5.7 并行复制源码分析

1. 基础数据结构添加全局的事务计数器产生事务timestamp和记录当前最大事务timestamp的clock。class MYSQL_BIN_LOG: public TC_LOG{ ... public: /* Committed transactions timestamp */ Logical_clock max_committed_transaction; ...

2020-03-01 17:45:03 317

原创 MySQL刷脏页优化方案汇总

目录1. 改善FLU刷脏1.1 增加并发(5.7.4):1.2改善链表遍历方式:1.3平衡刷脏权重(5.7.6)1.4 用户线程在检查Redo 空间时不参与刷脏(5.7.6)1.5为page cleaner线程设置更高的优先级(5.7.6)2. 改善LRU刷脏2.1 脏页 to FreeList3. LRU和FLU刷脏分离(Percona)4. 参考链...

2019-12-15 18:28:23 751

原创 Tuning Paxos for high-throughput with batching and pipelining

http://www.doc88.com/p-9843410898350.html

2019-11-18 00:06:45 121

原创 ARTree(The Adaptive Radix Tree: ARTful Indexing for Main-Memory Databases)

1. 背景:2. 架构介绍:2.1 内节点类型2.2叶子节点类型单值和多值2.3 lazy expansion and path compression路径压缩分为乐观和悲观:3. 优劣分析:3.1 优势灵活的页面大小,提高内存的数据空间比 极简的分支判断的CPU指令 SMO过程只涉及两层结构,这个由ARTree树的基本结构构成8bit最...

2019-11-17 11:28:53 2020

原创 hyperscale的架构分析

目录架构分析计算层:Page Server:Log Server:优劣势分析:参考链接架构分析计算层:Page Server:Log Server:push log to PageServer push log to 从计算节点 归档 Log优劣势分析:优势:引入LogServer,降低主计算节点的负载(主从计算节点的日志同步)...

2019-11-05 23:40:59 2743

原创 Write-Behind-Logging

论文地址:https://www.ixueshu.com/document/9cd210e04def3c2b318947a18e7f9386.html硬件背景:传统的HDD盘具有高数据密度,价格低廉,持久化稳定的优点,但也无法摆脱机械盘寻道带来的开销,而且顺序访问和随机访问的性能差异巨大。SSD相比HDD来说具备更加好的读写性能,其读写时延相比HDD来说低3个数量级。但针对DBMS系统...

2019-11-05 07:06:45 867

原创 MySQL B+Tree的锁分析(含5.6、5.7和其他深度分析)

目录几点关键的背景正确的B+树并发控制机制需要满足以下几点要求:一些名词SMO过程MySQL5.6 SMO分析MySQL 5.6 SMO代码分析MySQL 5.6 SMO过程分析MySQL5.7 SMO分析MySQL 5.7SMO代码分析MySQL 5.7SMO过程分析几点关键的背景正确的B+树并发控制机制需要满足以下几点要求:正确的读操作:...

2019-10-27 23:33:05 1058

原创 副本数据一致性的一些分析

目录一致性模型分析线性一致性(强一致性,strict consistency)顺序一致性(Sequential Consistency)因果一致性(Casual Consistency)腾讯朋友圈的例子参考资料一致性模型分析线性一致性(强一致性,strict consistency)对一致性的要求:任何一次读都能读到某个数据的最近一次写的数据。 系统中的所...

2019-10-25 11:29:56 444

原创 待整理的知识点

插入意向锁和隐式锁 hyperscale分析 ok 云数据库分析 ok ART分析 新引擎分析 OK ...

2019-10-24 16:38:07 177 1

转载 Disk is Tape, Flash is Disk

这张图让我想到之前在使用Redis时看到Jim Gray那句被坊间流传许久的话:"Tape isDead, Disk is Tape, Flash is Disk, RAM Locality is King".(磁带已死,磁盘是新磁带,闪存是新磁盘,随机存储器局部性是为王道.) 这句话的原始出处在此:http://www.signallake.com/innovation/Flash...

2019-10-15 19:33:37 142

原创 bLSM: A General Purpose Log Structured Merge Tree

bLSM 提出了一种新的合并调度器来限制写入延迟,从而保持稳定的写入吞吐量,并且还使用 bloom 过滤器来提高性能。Data management workloads are increasingly write-intensive and subject to strict latency SLAs. This presents a dilemma:Update in place syst...

2019-10-07 23:34:31 11994

转载 TokuDB的索引结构–分形树的实现

TokuDB和InnoDB最大的不同在于TokuDB采用了一种叫做Fractal Tree的索引结构,使其在随机写数据的处理上有很大提升。目前无论是SQL Server,还是MySQL的innodb,都是用的B+Tree(SQL Server用的是标准的B-Tree)的索引结构。InnoDB是以主键组织的B+Tree结构,数据按照主键顺序排列。对于顺序的自增主键有很好的性能,但是不适合随机写入,大...

2019-10-07 20:42:02 487

原创 BwTree论文的一些整理

BwTree面向场景:主要是内存场景打击点:主要是内存场景:LOCK:引入的上下文切换开销 CPU:本地更新引入的Cache coherence 写放大问题:通过增量 + append的方式减少写入数据量,增加Flush过程中的Batch效果主要方案:索引:btree 内存和磁盘都是append写,使用mapping_table解决物理地址频繁变更的问题 lock...

2019-10-06 15:02:28 563

原创 RocksDB 性能测试(全网搜集)

https://en.wikipedia.org/wiki/MyRocks#Benchmarksperconahttps://www.percona.com/blog/2018/04/30/a-look-at-myrocks-performance/http://baijiahao.baidu.com/s?id=1599227245729254474&wfr=spider&am...

2019-09-27 10:40:22 5109

原创 Building a Bw-Tree Takes More Than Just Buzz Words

无锁数据结构被吹捧为当今多核CPU的理想选择。 但是,由于几个原因,它们很难实现[10]。 首先,编写有效而健壮的free-free1代码需要开发人员弄清楚所有可能的竞争条件,它们之间的相互作用可能很复杂。 此外,并发线程彼此同步的观点通常在算法的串行版本中没有明确说明。程序员经常错误地实现无锁算法,并最终导致繁忙的循环。 另一个挑战是,无锁数据结构需要安全的内存回收,该回收要延迟到所有...

2019-09-25 10:21:26 784

原创 MySQL Page读取和淘汰过程分析

目录Page磁盘读取过程申请空闲PAGE空间刷脏页和LRU链表Page内存读取和Page淘汰的互斥Page磁盘读取过程buf_page_get_gen| | ==> rw_lock_s_lock(hash_lock);| | ==> block = (buf_block_t*) buf_page_hash_get_low(buf_pool, s...

2019-09-23 10:20:20 1050

原创 Append写入方式的收益和成本分析

目录Append写入收益:Append成本分析:首先分析Append方式对数据访问的影响:Compaction的目标:Compaction的原则:RocksDB Compaction 成本分析(逐层缓存,Batch合并):写入放大:有目的的合并:BwTree(LLAMA) 合并成本分析(这个可能不准):Append写入收益:SSD友好:追加写vs随机写...

2019-09-17 16:05:57 302

转载 Lock-Free?还是多入口?

最近一段时间,感觉大家对于Lock-Free的兴趣又高涨了起来,Lock-Free大有包治百病、一统江湖之势,特写下此文,希望对围观者有所帮助。让我们先从一个简单的场景开始:考虑一个需要频繁并发访问的Freelist,这应该是许多应用程序中最常见的结构了,如果我们使用基本设计,用一个简单的Mutex量来保护这个Freelist,那么在高并发环境下它很容易成为性能的瓶颈。然后该如何优...

2019-09-12 11:44:03 130

转载 内存屏障

RCU(Read-Copy Update),是 Linux 中比较重要的一种同步机制。顾名思义就是“读,拷贝更新”,再直白点是“随意读,但更新数据的时候,需要先复制一份副本,在副本上完成修改,再一次性地替换旧数据”。这是 Linux 内核实现的一种针对“读多写少”的共享数据的同步机制。不同于其他的同步机制,它允许多个读者同时访问共享数据,而且读者的性能不会受影响(“随意读”),读者与写者之间也...

2019-09-10 09:54:43 134

原创 Free链表的申请方式分析

MySQL理解BP是数据的管理结构,多个BP相当于把数据进行比如HASH的拆分了。原地写,每次读写,如果不在BP中,都会从对应的BP中申请一个BLOCK。RocksDBBP是数据的管理结构,同MySQL。在写场景下,多个线程并发append有序写入。貌似使用一个BLOCK不大好搞。使用内存池比较好因此从arena中申请内存到memtable。但是可以做到比如把in memt...

2019-09-05 19:44:19 209

转载 LINUX共享内存使用常见陷阱与分析

所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会即时被有访问同一段共享内存的其他进程看到。共享内存的使用大大降低了在大规模数...

2019-09-03 15:45:21 120

转载 HBase最佳实践-用好你的操作系统

终于又切回HBase模式了,之前一段时间因为工作的原因了解接触了一段时间大数据生态的很多其他组件(诸如Parquet、Carbondata、Hive、SparkSQL、TPC-DS/TPC-H等),虽然只是走马观花,但也受益良多。对视野、思维模式都有极其重要的作用,至少,扩展了大数据领域的对话圈。这里也斗胆建议朋友能在深入研究一门学问的同时博览周边学问,相信必然会大有裨益。来说正题,操作系统这...

2019-09-03 14:38:55 157

转载 内核月报

数据库内核月报 - 2014 / 10# 01 MySQL · 5.7重构 · Optimizer Cost Model# 02 MySQL · 系统限制 · text字段数# 03 MySQL · 捉虫动态 · binlog重放失败# 04 MySQL · 捉虫动态 · 从库OOM# 05 MySQL · 捉虫动态 · 崩溃恢复失败# 06 MySQL · 功能改进 · InnoDB...

2019-07-15 11:17:39 594

转载 正则基础之——贪婪与非贪婪模式

1        概述贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持。属于贪婪模式的量词,也叫做匹配优先量词,包括:“{m,n}”、“{m,}”、“?”、“*”和“+”。在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,

2016-07-24 15:31:50 353

转载 CAS原子操作实现无锁及性能分析

CAS原子操作实现无锁及性能分析 Author:Echo Chen(陈斌)Email:[email protected]:Blog.csdn.net/chen19870707Date:Nov 13th, 2014最近在研究nginx的自旋锁的时候,又见到了GCC CAS原子操作,于是决定动手分析下CAS实现的无

2015-11-26 12:22:31 562

转载 Nginx Upstream Keepalive 分析

1.  实现原理Nginx 1.1.14版本以前upstream连接建立和获取的机制如下图所示,Nginx会在一开始创建connection pool(进程间不共享,可以避免锁),提供给所有向前/后的连接。 如果要实现upstream长连接,则每个进程需要另外一个connection pool,里面都是长连接。一旦与后端服务器建立连接,则在当前请求连接结束之后不

2015-11-16 15:09:57 613

转载 nginx epoll

事件处理是Nginx处理请求的核心,每个子进程在ngx_worker_process_cycle()的循环里不断调用ngx_process_events_and_timers()函数来处理各种事件。下面,分析使用epoll机制下(Linux最常用支持大并发的事件触发机制)Nginx事件处理的过程,用源代码分析和debug信息追踪两种方法。我们从ngx_worker_proces

2015-11-13 18:14:06 490

转载 nginx连接池

1. 配置worker_connections模块:EventsModule语法: worker_connections number默认:位于main section的指令worker_connections和worker_processes可以帮助你计算你能处理的最大并发数max clients = worker_processes * work

2015-11-13 18:12:29 1251

转载 Nginx架构

nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。  当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式。  master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当wor

2015-11-13 16:40:52 1335

转载 Linux写时拷贝技术(copy-on-write)

COW技术初窥:      在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。      那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢?      在fork之后exec之

2015-08-17 15:05:51 367

转载 关于子进程继承父进程属性的小问题总结

今天看书,看到用fork创建子进程的一段样例代码:[cpp] view plaincopy#include   #include   #include     int main(void)  {      pid_t pid;      char* msg;      int k;        pri

2015-08-17 15:05:16 1443

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除