- 博客(27)
- 收藏
- 关注
原创 索引对idus(增删改查)的影响
索引的原理: 索引是一个B+二叉树。从原理上说B+二叉树的特性 决定了对insert、update、delete、select的影响和作用。索引优点:查询效率变快。索引缺点:建立索引过多,会影响insert速度。如果新insert一个值,会导致B+二叉树进行再平衡重整,这个过程B+二叉树进行重新整理,索引越大,索引越多,重新整理的时间花费越大。所以有时候再进行大批量insert插入时,
2017-02-28 17:03:38 4879
原创 lock0lock.c里面函数总结
google了大部分资料,结合自己的理解,总结下lock0lock.c文件里函数lock_deadlock_recursive():死锁判断 死锁日志产生lock_deadlock_trx_print():死锁中事务信息处理打印lock_deadlock_lock_print():每个事务持有、等待的锁信息lock_rec_print():记录被锁的信息死锁
2017-02-27 18:15:42 1138
原创 mysql源码心得--how to read mysql source
1、深入了解某一模块前,要一步步来,否则会有很大的挫败感。首先了解下模块重要的数据结构和算法 2、设置断点,了解执行流程,了解重要函数 3、接下来深入阅读重要函数的源码,同时回顾与其他模块(已经了解过)的交互衔接。关于资料寻找 手中要有系统的书,另外利用google搜索优势(不要用百度,百度搜索出来的资料太差了),搜索出来的老外的经典文章 系统的书推荐 《
2017-02-25 10:46:49 1212
翻译 mysql 索引页物理结构--physical structer of an innodb index
mysql 索引页物理结构-physical structer of an innodb indexhttps://dev.mysql.com/doc/refman/5.7/en/innodb-physical-structure.html除了空间索引,innodb索引是B数数据结构。空间索引使用R数,其是用于索引多维数据的专用数据结构。索引记录存储在其B-tree或R-tree的叶子
2017-02-24 10:16:44 2383 1
转载 graphviz绘制流程图
日常的开发工作中,为代码添加注释是代码可维护性的一个重要方面,但是仅仅提供注释是不够的,特别是当系统功能越来越复杂,涉及到的模块越来越多的时候,仅仅靠代码就很难从宏观的层次去理解。因此我们需要图例的支持,图例不仅仅包含功能之间的交互,也可以包含复杂的数据结构的示意图,数据流向等。但是,常用的UML建模工具,如VISIO等都略显复杂,且体积庞大。对于开发人员,特别是后台开发人员来说,命令
2017-02-23 18:00:05 547
原创 C 语言中&&,||,&,|的区别
&&:逻辑与,前后条件同时满足表达式为真||:逻辑或,前后条件只要有一个满足表达式为真&:按位与|:按位或&&和||是逻辑运算,&与|是位运算假如a = 0xaa ,b = 0x55a&&b = true ,在计算机中true以非0值表示,不同的编译器true值也不一样,一般为1a||b = true,a&b = 0; 值唯一a|b = 0xff; 值唯一“&&”跟“|”
2017-02-23 17:11:00 25981
原创 锁相关的几个重要函数
记录下锁相关的几个重要函数: lock_table (): 负责加表锁lock_rec_lock():锁记录的重要函数row_lock_table_autoinc_for_mysql(): 负责管理表auto increment自增锁的重要函数。自增锁 是表基本锁。实现在/innobase/row/row0mysql.cc 源码中(ps: auto_increment 自增锁 因
2017-02-23 17:09:52 389
原创 5.6之后新特性
在5.6之后版本中,如果binlog格式设置为statement 。那么 insert .....select .....语句将是不安全。如下报警信息 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statements writing to
2017-02-23 09:17:11 348
原创 mysql 批量update更新数据
#!/bin/sh mysqlconn="mysql -uroot"db="dbname"table1="tablename"while($mysqlconn -N -e "select item_id from $db.$table1 where matching_status = 0 limit 1;")do #echo 1 $mysqlconn
2017-02-20 15:57:30 2947
原创 mysql rr 隔离级别解决幻读
幻读概念: 幻读是指在同一事务下当A用户读取某一范围的数据行时,B事务在该范围内插入了新行,当A用户再读取该范围的数据行时,会发现有新的“幻影”行(即读取到了B事务插入的数据)。 即违背事务隔离性要求。 为解决这个问题,出现了谓词锁(predict lock)。 next-key locking算法就是为了解决幻读问题。测试:session 1 root@lo
2017-02-18 23:02:50 4391
原创 mysql 死锁检测变量innodb_deadlock_detect
mysql 5.7.15 之后 增加了innodb_deadlock_detect 函数,控制是否打开死锁检测。关闭死锁检测,在性能上有非常大的提高,曾经在其他mysql分支增加了这个参数,而官方版本直到5.7.15才增加了这个参数,默认是打开的。
2017-02-18 22:05:53 4603
原创 mysql lock_rec_insert_check_and_lock 设置断点调试
LOCK_MAX_DEPTH_IN_DEADLOCK_CHECK 死锁检测等待图中wait-for-graph定义深度搜索的次数,如果搜索200次就认定为死锁。 lock queue: 锁队列设置断点函数 lock_rec_insert_check_and_lock insert into 操作函数调用过程#0 btr_cur_ins_lock_and_undo (
2017-02-17 21:25:30 1118
转载 gdb 中layout的使用
layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:layout src:显示源代码窗口layout asm:显示汇编窗口layout regs:显示源代码/汇编和寄存器窗口layout split:显示源代码和汇编窗口layout next:显示下一个layoutlayout prev:显示上一个layoutCtrl + L:刷新窗口Ctr
2017-02-17 17:18:12 3054
原创 mysql insert 相关的锁函数lock_rec_insert_check_and_lock 源码
/*============ RECORD LOCK CHECKS FOR ROW OPERATIONS ====================*//*********************************************************************//**Checks if locks of other transactions prevent
2017-02-16 18:01:26 624
原创 innodb中不同语句设置不同锁类型
在锁读的过程中,一个update 或一个delete 经常设置记录锁在每一个索引记录上。这与where条件中是否排除此条索引记录没有关系。innodb认不出扩展的where扩展条件,只会认出那些索引区间被扫描。The locks are normally next-key locks that also block inserts into the “gap” immediately be
2017-02-16 13:18:50 407
原创 mysql insert 加锁流程
INSERT sets an exclusive lock on the inserted row. This lock is an index-record lock, not a next-key lock (that is, there is no gap lock) and does not prevent other sessions from inserting into the ga
2017-02-16 11:21:12 6121 3
转载 insert into 加锁机制
关于MySQL innodb Insert into 加锁的机制的文章网上很少,个人对于insert 的加锁机制比较感兴趣,所以通过此wiki对研究的过程做个总结,如有不对的地方,欢迎指正。我先把官方文档对于insert 加锁的描述贴出来INSERT sets an exclusive lock on the inserted row. This lock is an index-
2017-02-15 09:38:57 1892
原创 mysql5.5.31 log0log.c中log_write_up_to 函数代码
/******************************************************//**This function is called, e.g., when a transaction wants to commit. It checksthat the log has been written to the log file up to the last
2017-02-14 09:46:43 646
转载 GDB调试利器
1. gdb 调试利器GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c++程序员,gdb是必不可少的工具;1.1. 启动gdb对C/C++程序的调试,需要在编译前就加上-g选项:$g++ -g hello.cpp -o hello调试可执行文件:$gd
2017-02-08 17:23:49 276
原创 vs2013 调试mysql
参考链接http://blog.csdn.net/cdsdtt123/article/details/39341003http://blog.csdn.net/u012107685/article/details/39085317
2017-02-08 17:22:01 799
原创 innodb_flush_log_at_trx_commit 参数
innodb_flush_log_at_trx_commit 三种取值 0 、1、2 对性能有很大影响,现在从源码瞧瞧是如何实现定义。涉及的文件以及函数调用如下:innobase/srv/srv0srv.c中srv_master_thread() innodbase/trx/trx0trx.c 中 trx_commit_off_kernel() ( 查看log_write_up_to(
2017-02-06 14:54:10 586
原创 kernel_mutex--mysql5.5.18
在mysql innodb中,随处可见的kernel_mutex。全局锁,事务开始的一段代码段 /trx/trx0trx.c 中 trx_start()函数/****************************************************************//**Starts a new transaction.@return TRUE */
2017-02-06 13:24:44 326
原创 mysql启动流程
mysql主函数main()在/sql/main.cc 里,main.cc里调用mysqld_main()函数,mysqld_main函数在/sql/mysqld.cc里 int mysqld_main(int args,char **argv) 在4783行开始mysqld_main()函数实现。有对不同平台的实现,如windows平台通过文件执行全部命令static v
2017-02-04 16:30:43 632
原创 innodb 引擎相关模块
mysql插件式存储引擎模式。因此引擎相关的代码都在storage目录下,在storage目录下,各个引擎单独自己的目录:blockhole 、csv、federated、heap、innobase、myisam、ndb、perfschema。特别注意的是perfschema在引擎目录下。 主要关注innobase:btr:B+tree 源码相关buf:buffer 缓存源码相关
2017-02-04 13:57:52 325
原创 mysql的核心类和重要的源码文件
sql/sql_select.cc :包含着一些优化函数和一些数据检索算法的具体实现 ITEM_类 ITEM_类是mysql的每一个子系统都要用到的东西。之所以称之为ITEM_类,是因为从ITEM基类派生出许多子类甚至孙类。这些派生类被用来存储和处理mysql系统里的许多种数据,其中包括:参数、标识符时间、字段、函数、数值、字符串等。ITEM基类定义在/sql/item.h源代
2017-02-04 09:29:19 996
转载 mysql 源码阅读入口
mysql源码太多,初次看到不免让人没有头绪,如果根据特定需求,分模块的去阅读分析,查找特定功能如何实现之类的需求,可以从有限的几个入口看起,有两个主要入口:服务器启动,客户端请求处理。市面上的书大部分都是通过客户端请求处理来讲起如何阅读mysql源码,举的例子通过select 查询,如《深入理解mysql核心技术》以及《深入理解mysql》两本书。 1 服务器初始化启动过程,包含参数以及参
2017-02-04 09:10:28 8389
原创 mysql 命令集合添加 --mysql5.5.31
5.6之后新功能特性引进,此sql命令集合会继续变化。在/sql/sql_lex.cc 中 mysqld.cc中 两者完全一致enum enum_sql_command { SQLCOM_SELECT, SQLCOM_CREATE_TABLE, SQLCOM_CREATE_INDEX, SQLCOM_ALTER_TABLE, SQLCOM_UPDATE, SQLCOM_INS
2017-02-03 11:03:45 802
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人