随笔分类 - MySQL
摘要:完成了sql的解析过程后,开始进入优化器:调用的流程分为: mysql_select: JOIN::prepare: JOIN::optimize: JOIN::exec: prepare过程: 组装各个组件,包括:stepup tables, fields, con...
阅读全文
摘要:sql请求发送到server端,需要经过解析器生成内部的数据结构对象,以方便进行优化和生成执行计划。解析器主要做了两件事情,词法分析和语法分析。词法和语法分析:mysql使用lex词法分析器,yacc语法分析器进行分析,最后保存到lex对象结构中。例如: select id, name fr...
阅读全文
摘要:MySQL源码自定义了hash表,因为hash表具有O(1)的查询效率,所以,源码中大量使用了hash结构。下面就来看下hash表的定义:【源代码文件include/hash.h mysys/hash.c】typedef uint my_hash_value_type;typedef uchar *...
阅读全文
摘要:MySQL源码中自己定义了许多数据结构,放在mysys的目录下,源码中通常都使用这些数据结构来组织存放数据,也更容易实现跨平台。下面先来看下MySQL定义的动态数组:【源代码include/array.h mysys/array.c】typedef struct st_dynamic_array{ ...
阅读全文
摘要:information_schema是MySQL下的DB, 存储了数据库的数据字典,但OS系统上,并没有information_schema下表的数据和结构文件。所以,MySQL在针对information_schema下的表进行查询的时候,在内存中构造了memory引擎的临时表,把数据填充进去...
阅读全文
摘要:slave的几个类结构: Master_info:用于IO线程的参数,包括连接master实例的信息。 Relay_log_info:用于sql线程,表示relay log相关的信息。 Slave_worker:继承Relay_log_info,包括一个job队列,用于并行的worker线程。...
阅读全文
摘要:限制并发select的patch,代码量很少,主要是为了学习mysql的源码,yy一下。增加两个全局控制变量: thread_limit_min thread_limit_max增加一个条件变量: COND_thread_running_limit增加一个新的错误码: concurr...
阅读全文
摘要:为了方便自己测试和监控,写了三个监控的脚本。 分别监控: 主机【cpu,mem,disk,fs,net】 oracle mysql 脚本如下:hmon.py: monitor Linux os system including cpu,memory,disk,net,file s...
阅读全文
摘要:在双1的情况下,两阶段提交的过程环境准备:mysql 5.5.18, innodb 1.1 version配置: sync_binlog=1 innodb_flush_log_at_trx_commit=1 autocommit=0设置断点: sql_parse.cc::dispatch...
阅读全文
摘要:MySQL server为每一个connection建立一个thread为其服务,虽然thread create比着fork process代价高,单高并发的情况下,也不可忽略。 所以增加了Thread cache,重载了exit方式,cache Thread到一个队列中,当有新的THD请求时,从...
阅读全文
摘要:启动mysqld,并进入listen阶段函数调用栈:mysqld_main(): my_init();初始化变量,锁,错误串 my_thread_global_init(): 初始化互斥锁,信号量,线程独享变量 load_defaults();查找my.cnf sys_var_init()...
阅读全文

浙公网安备 33010602011771号