数据库源码原理
数据库码农
博客已经迁移到 简书,URL = http://www.jianshu.com/u/69fa0ec8790f
展开
-
Redis内存分配简单分析
Redis内存管理 1.Redis内存申请内存方式有三种: (1)系统自带的malloc/free方式进行申请/释放。 (2)使用tcmalloc进行内存的申请/释放。 (3)使用jemalloc进行内存申请/释放。 /* Explicitly override malloc/free etc when usin原创 2016-05-03 09:44:06 · 823 阅读 · 0 评论 -
MySQL内存分配
mysql内存分配 1.MySQL内存申请公式: 1.1 per-thread buffers: 每个线程缓冲内存针对每个线程连接分配的。每个线程的connection buffer和result buffer 开始是给定net_buffer_length大小,可以动态增长到max_allowed_packet字节的大小。在原创 2016-05-03 09:43:51 · 1787 阅读 · 0 评论 -
Innodb 插件初始化
Innodb插件的加载定义在mysql/include/mysql/Plugin.h中mysql_declare_plugin,具体的调用位置在ha_innodb.cc中,都是以变量的方式定义。Ha_innodb.cc是定义innodb存储引擎的初始化以及相关重要接口的定义。mysql_declare_plugin(innobase){ MYSQL_STORAGE_ENGINE_PLUGIN,原创 2016-11-23 16:20:46 · 755 阅读 · 0 评论 -
Innodb Status源码分析
Innodb Status源码分析 作者 Perrynzhou 时间 2016-11-22 23:46 版本 V1.0目录 1. 函数调用关系 3原创 2016-11-23 16:12:07 · 1176 阅读 · 0 评论 -
事务属性和线程实现
两种主要的事务ID类型:全局ID和本地ID。事务管理器分配全局ID,当一个事务需要多个事务资源参与时候需要全局ID。如果资源管理器也分配事务ID,那么它们是与此全局事务ID相关联的本地ID,因为它们指向同一个事务。链式事务,应用程序执行的事务序列形成一个链,一个事务接一个事务的执行,中间没有间隔。非链式模型,程序完成一个事务后,不需要立即开始执行一个事务,例如可以使用start开始一个事务,com原创 2017-01-17 10:32:10 · 863 阅读 · 0 评论 -
InnoDB体系架构
InnoDB buffer pool 基本核心点 1.BP中管理所有的block,每个block中都存放了每个page信息。 2.BP 主要是减少磁盘和CPU数据之间速度的差异,InnoDB BP 核心参数 innodb_buffer_pool_size,目前在innodb内核中 只有该参数大于1.5G才能使用多BP结构。 3.BP 中三种链表:原创 2017-01-13 16:29:22 · 595 阅读 · 0 评论 -
博客迁移
大家好,鄙人博客已经迁移到如下地址: https://www.jianshu.com/u/69fa0ec8790f原创 2018-05-16 19:51:10 · 271 阅读 · 0 评论 -
innodb_flush_logs_at_trx_commit源码行为
1.innodb_flush_logs_at_trx_commit模式: 该参数定义有三种值:0、1、2;默认为1如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。如果innodb_flus原创 2016-05-03 09:44:12 · 510 阅读 · 0 评论 -
innodb redo buffer的认识
InnoDB Redo的结构漫谈(1) 作者:@明天会更好(群号:196380905) 1.Redo 日志: redo日志的结构是物理到页,逻辑到记录;采用的是物理逻辑日志。innodb redo日志是基于m原创 2016-05-03 09:44:26 · 503 阅读 · 0 评论 -
innodb中master线程的调度的算法改进(mysql 5.6.26)
innodb中master线程的调度的算法改进(mysql 5.6.26) 作者:周琳 QQ:715169549 源码交流群:196380905 1.master线程的调度: /**********************************************原创 2016-05-03 09:44:30 · 287 阅读 · 0 评论 -
redis的一个操作的代码执行流程
原创 2016-05-03 09:46:02 · 610 阅读 · 0 评论 -
InnoDB MVCC浅谈
作者:周琳//转载请标注出出处1.行记录隐藏列的意义可以从row_search_for_mysql(storage/innobase/row/row0sel.cc, line 3661)函数开始,这个函数是mysql服务器层面搜索记录的函数,该函数有一个重要的参数就是row_prebuilt_t* prebuilt,该参数是包含了查询的记录的信息。进行Debug调试可以发现内存中一行原创 2016-05-03 09:45:53 · 1572 阅读 · 0 评论 -
Seconds_Behind_Master的计算
MySQL复制中seconds_behind_master的计算 1.seconds_behind_master定义为从库相对于主库的延迟时间。 具体的计算公式为: clock_of_slave - last_timestamp_executed_by_SQL_thread-clock_diff_with_master. 备原创 2016-05-03 09:43:47 · 1268 阅读 · 0 评论 -
innnodb 线程在做什么?
1.master 线程的主代码位于 (1)storage/innobase/srv/srv0srv.cc (2)storage/innobase/buf/buf0flu.cc srv_master_do_idle_task()每10秒中的操作。 srv_master_do_active_tasks()每秒中的操作。 1秒中的算法做的事情(主循环):原创 2016-05-03 09:43:42 · 871 阅读 · 0 评论 -
Mysql Join_buffer_size的使用原理
1.mysql中的join_buffer_size是定义在class JOIN_CACHE(sql_join_buffer.h) 中的 uchar *buff;void JOIN_CACHE::set_constants() 设置buff的大小bool JOIN_CACHE::alloc_buffer() 申请buff大小的内存void JOIN_CACHE::free()原创 2016-05-03 09:43:38 · 6464 阅读 · 0 评论 -
mysqld执行的函数栈
我是在mysql中的row_search_for_mysql的函数设置断点,该函数式存储引擎入口函数 以上为调试程序的当前上所有的线程,线程的函数栈信息如下Thread 25 (Thread 0x7fffdfa0e700 (LWP 8232)):#0 row_search_for_mysql (buf=0x2112930 "\377", mode=1, prebuilt原创 2016-05-03 09:43:22 · 645 阅读 · 0 评论 -
[置顶]innodb动态内存管理
1.InnoDB内存管理分配采用内存堆方式,从内存池申请和innodb buffer pool申请,按照不同的内存类型采用不同内存分配。 在innodb内存管理中有三种内存类型: (1)动态内存,该内存是从内存池中进行申请. (2)缓冲内存,该内存是从buffer pool中进行分配 (3)自适应哈希索引。 如下定义了三种内存类型:原创 2016-05-03 09:46:09 · 724 阅读 · 0 评论 -
Innodb额外内存池的分配策略以及性能
Innodb额外内存池的分配策略以及性能 备注:未经同意,严禁转载,谢谢合作。//内存池结构体/** Data structure for a memory pool. The space is allocated using the buddyalgorithm, where free list i contains areas原创 2016-05-03 09:44:40 · 1033 阅读 · 0 评论 -
[置顶]Innodb Buffer Pool内部结构
Innodb Buffer Pool内部结构 1. Innodb Buffer 功能Innodb buffer pool的主要功能存储外存页面在内存中的镜像.镜像有如下2种镜像:(1)只读镜像:只读镜像读取的是非脏页。(2)更新镜像:更新镜像为buffer pool中的脏页。Innodb实现了行级多版本(MVCC),而不是整个页的多版本。Oracle在实现中原创 2016-05-03 09:46:06 · 539 阅读 · 0 评论