随笔分类 -  MySQL

摘要:Innodb的启动与关闭1.启动函数的流程 innobase_start_or_create_for_mysql 启动的主要步骤包括: 1. 初始化innodb的参数 2. 初始化系统结构 主要结构:srv_sys_t 3. 加载或者创建文件 ... 阅读全文
posted @ 2014-08-31 23:05 xpchild 阅读(466) 评论(0) 推荐(0)
摘要:1. 概述MVCC:即多版本一致性,在事务模型下,使用version控制数据版本,关系型数据库基本都实现了MVCC,以对表数据的读写互不阻塞,增大了并发量。 Oracle和MySQL数据库都是使用undo的机制来实现MVCC。但数据库都实现了多个事务的隔离级别,所以MVCC中对可见性的判断,也会因事... 阅读全文
posted @ 2014-08-20 19:43 xpchild 阅读(851) 评论(1) 推荐(0)
摘要:上一篇介绍了Innodb的同步机制锁:Innodb锁系列1这一篇介绍一下Innodb的事务锁,只所以称为事务锁,是因为Innodb为实现事务的ACID特性,而添加的表锁或者行级锁。这一部分分两篇来介绍,先来介绍下事务锁相关的数据结构事务锁数据结构1. 锁模式/* Basic lock modes *... 阅读全文
posted @ 2014-08-17 23:20 xpchild 阅读(589) 评论(0) 推荐(0)
摘要:提要: MySQL 5.5.39 Release版本正式从源码里删除了全局参数timed_mutexes。timed_mutexes原本用来控制是否对Innodb引擎的mutex wait进行 计时统计,以方便进行性能诊断。为什么要删除这个参数呢? 下面介绍下相关背景:Innodb的同步锁机制: ... 阅读全文
posted @ 2014-08-11 23:11 xpchild 阅读(681) 评论(0) 推荐(0)
摘要:上一篇介绍了因为子表过多,导致innodb crash的情况,但crash的原因是long semaphore waits。long semaphore waits又为何物?背景:Innodb使用了mutex和rw_lock来保护内存数据结构,同步的机制要么是互斥,要么是读写阻塞的模式, Innod... 阅读全文
posted @ 2014-08-09 21:41 xpchild 阅读(1666) 评论(0) 推荐(0)
摘要:前一篇讨论了Innodb system,表空间,文件的关系及数据结构,这一篇记录下Innodb行记录的格式。前提: 1. server层和innodb层都有自己对于record的记录格式,需要进行转换。 2. 物理文件上的记录存储,需要内存中的数据结构进行对应(任何数据都需要在内存中进行处理... 阅读全文
posted @ 2014-08-01 18:29 xpchild 阅读(1549) 评论(0) 推荐(0)
摘要:测试的用例中,因为limit的大小不同,而产生了完全不同的执行计划:1. 测试case: create table t1 ( f1 int(11) not null, f2 int(11) not null, f3 int(11) not null, f4 tinyint(1) not n... 阅读全文
posted @ 2014-07-30 16:39 xpchild 阅读(948) 评论(0) 推荐(1)
摘要:本篇先介绍 下Innodb表空间,文件相关的内存数据结构。1. 数据结构Innodb的tablespace和文件的关系,是一对多的关系,先来看三个结构体1. fil_system_struct: 表示Innodb的表空间内存cache,innodb一共包括两类tablespace,即 #defi... 阅读全文
posted @ 2014-07-29 22:47 xpchild 阅读(922) 评论(0) 推荐(0)
摘要:同步机制Innodb实现了不依赖于平台的mutex,rwlock。1. 全局变量 对于mutex, rwlock,都有一个全局链表。1. mutex全局链表:mutex_list2. rwlock全局链表:rw_lock_list 在create创建mutex 或者rwlock的时候,加入链表。... 阅读全文
posted @ 2014-07-28 21:07 xpchild 阅读(658) 评论(0) 推荐(0)
摘要:上一篇blog介绍了因为sql查询information_schema表而导致内存暴涨的case。今天顺便做了一个thd内存的监控:先来介绍下MySQL的内存: 1. 线程内内存:thd->mem_root, 线程在执行sql的过程中,申请的内存从thd->mem_root进行分配,在sql结束的... 阅读全文
posted @ 2014-07-24 20:01 xpchild 阅读(1332) 评论(0) 推荐(0)
摘要:case:下面的一条sql语句,导致mysql实例内存暴涨: select * from tables where table_name not in(select table_name from partitions group by table_name having count(*)>1 )... 阅读全文
posted @ 2014-07-23 19:25 xpchild 阅读(1533) 评论(0) 推荐(0)
摘要:问题:1. MySQL对查询的结果集如果返回,一次性还是每条?2. 客户端如何接收结果集?1. 对于有返回结果集的查询,server端和client端交互的数据包由以下组成: p1:meta data packet p2:rows packetpn-1: rows packet pn:EOF or ... 阅读全文
posted @ 2014-07-21 20:02 xpchild 阅读(1783) 评论(0) 推荐(0)
摘要:因为mysql的主从复制是逻辑复制,所以slave在apply relay log的过程中,经常会遇到错误,而参数sql_slave_skip_counter可以设置跳过多少个event,让slave sql继续。因为mysql的binlog是由event组成的。一个transaction是一个... 阅读全文
posted @ 2014-07-10 17:22 xpchild 阅读(1346) 评论(0) 推荐(0)
摘要:运维的时候,经常遇到auto_increment的疑惑:机器异常crash,重启后id回退的问题性能考虑,每次获取肯定不会持久化,内存中取值,statement复制如何保证主备一致id的取值受binlog的保护吗1. auto_increment相关的参数控制 1.1 innodb_autoinc_... 阅读全文
posted @ 2014-07-05 00:41 xpchild 阅读(1949) 评论(0) 推荐(0)
摘要:事务是关系型数据库的核心,贯穿整个源代码,先来瞅瞅相关的数据结构,揭开面纱:server层和innodb引擎层分别对应了不同的数据结构,但相互关联:server层需要引擎注册事务,以便server层能够引用。innodb层需要维持事务的状态,以及事务的状态转换的具体实现。1. 相关数据结构下面用一个... 阅读全文
posted @ 2014-07-02 23:30 xpchild 阅读(876) 评论(0) 推荐(0)
摘要:测试了两个case,属于之前blog的遗留问题: innodb如何加载数据字典 flush tables都做了什么操作先来看下innodb加载数据字典: 首次使用:select * from tt;1. 创建handler对象函数调用栈: open_binary_frm ... 阅读全文
posted @ 2014-07-01 15:48 xpchild 阅读(661) 评论(0) 推荐(0)
摘要:MySQL purge log简单吗?简单: purge log的功能很简单,purge master logs to 指定一个binlog,然后删除之前的文件系统上的binlog文件,并更新binlog.index文件。复杂: 需要保证purge的原子操作吗, 怎么保证, 有崩溃恢复吗?之前没有读... 阅读全文
posted @ 2014-06-27 14:36 xpchild 阅读(1821) 评论(0) 推荐(0)
摘要:背景: MySQL经常会遇到Too many open files,MySQL上的open_files_limit和OS层面上设置的open file limit有什么关系? 源码中也会看到不同的数据结构,TABLE, TABLE_SHARE,跟表是什么关系? MySQL flush ... 阅读全文
posted @ 2014-06-10 19:55 xpchild 阅读(3141) 评论(0) 推荐(0)
摘要:前一篇介绍了cost的计算方法,下面测试一下两表关联的查询:测试用例CREATE TABLE `xpchild` ( `id` int(11) NOT NULL, `name` varchar(100) DEFAULT NULL, `c1` int(11) DEFAULT NULL, `c2... 阅读全文
posted @ 2014-06-09 20:35 xpchild 阅读(754) 评论(0) 推荐(0)
摘要:记录MySQL 5.5上,优化器进行cost计算的方法。第一篇: 单表的cost计算数据结构:1. table_share: 包含了表的元数据,其中索引部分:key_info:一个key的结构体,代表一个索引,包含了:key_length:key的长度key_parts:key一共有多少个colum... 阅读全文
posted @ 2014-06-05 17:39 xpchild 阅读(2546) 评论(0) 推荐(0)