mysql
文章平均质量分 79
tz_sz
这个作者很懒,什么都没留下…
展开
-
6 InnoDB相关的数据结构
以下讨论的结构体或函数都是出现在innobase_start_or_create_for_mysql()中。一、srv_sys_t* srv_sys——server systemtypedef struct srv_sys_struct srv_sys_t/** The server system struct */struct srv_sys_struct{ srv_tabl原创 2013-12-28 17:05:13 · 1246 阅读 · 0 评论 -
17 mysql XA事务
一、mysql XA事务XA就是X/Open DTP(分布式事务处理模型)定义的事务管理器TM(交易中间件)与资源管理器RM(数据库)之间的接口规范。XA规范的基础是二阶段提交协议。注意:对于分布式事务,必须使用SERIALIZABLE隔离级别。mysql XA事务分为外部XA和内部XA。Mysql外部XA由外部应用程序充当事务管理器,可以用在分布式数据库代理层,如开源工具ameba,转载 2014-02-25 11:28:20 · 1723 阅读 · 0 评论 -
2 从create_new_thread看连接线程
一、数据包格式在分析create_new_thread()之前,先看一下数据包格式,所有的Mysql Net包可以归纳为:1、握手阶段(当客户端开始连接时):从服务器到客户端:握手初始化包;从客户端到服务器:客户端认证包;从服务器到客户端:OK包、Error包。2、命令包(客户端到服务器端的任一要求):从客户端到服务器端:命令包;从服务器到客户端:OK包、Error包、结果集包原创 2013-12-20 10:02:10 · 1556 阅读 · 0 评论 -
7 buffer pool的组织结构
一、buf_page_get_gen前面在“6 InnoDB相关的数据结构”一节中,已经提到了buf_pool_t的初始化;并在事务初始化时,宏buf_page_get会调用buf_page_get_gen。我们知道buf_pool中会缓存多种页:索引页、数据页、undo页等,buf_page_get_gen视为了进入database page。现把它的主要代码展示如下:buf_block原创 2013-12-31 23:25:43 · 1358 阅读 · 0 评论 -
18 MySQL加锁处理分析
http://hedengcheng.com/?p=771 by何登成这篇文章从一个简单的SQL语句delete from t1 where id = 10;,分析在各种情况下的加锁情况。以下为这篇文章的目录,感谢何博士的分享。1 背景 11.1 MVCC:Snapshot Read vs Current Read 21.2 Cluster Index转载 2014-02-27 20:14:18 · 766 阅读 · 0 评论 -
16 innDB死锁检测
一、准备工作死锁检测一般采用Wait-For-Graph算法,本例所述实现为递归式(深度优先搜索),后续改为非递归实现(栈)。参考资料:http://www.gpfeng.com/?p=426准备两个session如下:start transaction start transaction;update nkeys set c5=0 where c1=500转载 2014-02-20 17:12:49 · 959 阅读 · 0 评论 -
15 innodB的隐式锁
一、知识准备之隐式锁参考:http://www.uml.org.cn/sjjm/201205302.aspInnodb 实现了一个延迟加锁的机制,来减少加锁的数量,在代码中称为隐式锁(Implicit Lock)。隐式锁中有个重要的元素,事务ID(trx_id)。隐式锁的逻辑过程如下:A. InnoDB的每条记录中都一个隐含的trx_id字段,这个字段存在于簇索引的B+Tree中。转载 2014-02-20 11:11:52 · 2854 阅读 · 0 评论 -
13 commit after update
一、准备工作1、准备知识参考:《InnoDB 日志 回滚段 & 崩溃恢复实现详解——修改版》by 何登成当事务提交时,与undo相关的操作:insert undo:释放Rollback Segment Header Page中的Undo Slot;直接释放Insert_Undo对应的所有Undo Page,回收空间。Update undo:释放Rollbac转载 2014-01-19 22:26:50 · 766 阅读 · 0 评论 -
12 flush与fsync,checkpoint与redolog
一、flushlog file或data file的write和flush是不同的操作,写后是否立即flush受参数srv_unix_file_flush_method和srv_flush_log_at_trx_commit的影响。二、主线程中的flush每1S:若 buffer pool 中的脏页比率超过了 srv_max_buf_pool_modified_pct =转载 2014-01-12 22:02:47 · 1521 阅读 · 1 评论 -
5 从plugin_init()看存储引擎的初始化
一、plugin_initmain()------->init_server_components()-------->plugin_init(&remaining_argc, remaining_argv, ...)1、register_builtin()将plugin(类型为struct st_mysql_plugin)的指针保存到plugin_array这个动态数组和plugin_h原创 2013-12-26 09:51:14 · 1428 阅读 · 0 评论 -
11 insert buffer
一、ibuf_init_at_db_startCreates the insert buffer data structure at a database startup and initializes the data structures for the insert buffer.voidibuf_init_at_db_start(void)/*===============原创 2014-01-10 16:58:38 · 1133 阅读 · 0 评论 -
4 各种文件
一、日志文件1、错误日志2、慢查询日志:记录慢的SQL查询语言,以帮助优化。默认不开启。3、查询日志:记录了所有对Mysql数据库请求的信息,无论请求是否得到了执行。默认文件名:主机名.log。慢查询日志和查询日志也可以不记录在文件中,而放入mysql架构下的表中。4、二进制日志:记录对数据库的所有操作,但是不包括SELECT和SHOW这类操作。文件名如bin_log.转载 2013-12-21 13:47:29 · 599 阅读 · 0 评论 -
10 table—index—inode:深入buffer pool
参考:http://blog.jcole.us/2013/01/04/page-management-in-innodb-space-files/ by Jeremy Cole.一、index file segment structure根据前面第七篇文章buffer pool的组织结构,已经知道:一个Index page(也就是root page)具有两个Fseg Header,分别用于转载 2014-01-06 22:18:59 · 955 阅读 · 0 评论 -
3 查询:解析器和优化器
一、调用流程mysqld_main------>init_server_components-------->plugin_init原创 2013-12-20 20:17:32 · 916 阅读 · 0 评论 -
9 异步io的实现
部分参考:《InnoDB异步IO(AIO)实现详解》何登成一、流程buf_page_get_gen -> buf_read_page -> buf_read_page_low,在buf_read_page_low中: ...... bpage = buf_page_init_for_read(err, mode, space, zip_size, unzip,原创 2014-01-04 00:03:02 · 1307 阅读 · 0 评论 -
1 从mysqld的main()函数开始
一、sql/main.ccextern int mysqld_main(int argc, char **argv);int main(int argc, char **argv){ return mysqld_main(argc, argv);}这就是mysqld的main()函数,它只是调用了mysql_main()。二、mysqld_mainmysqld_ma原创 2013-12-18 15:20:53 · 2608 阅读 · 0 评论 -
8 buffer pool的LRU list、Flush list的flush
参考:《InnoDB Buffer Pool 管理调研》by 何登成一、LRU listLRU List 按照功能被划分为两部分:LRU_young 与 LRU_old,默认情况下, LRU_old 为链表长度的 3/8。页面读取时(get/read ahead),首先链入 LRU_old 的头部。页面第一次访问(read/write),从 LRU_old 链表移动到 LRU_young的转载 2014-01-02 10:51:12 · 2193 阅读 · 0 评论 -
14 MVCC的可见性
转自http://hedengcheng.com/?p=148 何登成一、准备create table test (id int primary key, comment char(50)) engine=innodb;create index test_idx on test(comment);insert into test values (1, ‘aaa’);insert转载 2014-02-19 20:15:15 · 1805 阅读 · 0 评论