MySQL源码分析
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
yzs87
专注于PostgreSQL、MySQL、GreenPlum及其生态
展开
-
innodb 物理行格式 compressed (怎么16进制中找不到最大最小伪记录)
从.ibd16进制内容可以看到,该压缩格式的页没有infimum和supremum记录。page0zip.cc::/* Please refer to ../include/page0zip.ic for a description of thecompressed page format. */参考page0zip.ic理解压缩页格式/* The infimum and原创 2015-05-08 22:46:14 · 877 阅读 · 0 评论 -
innodb RC级别下加锁特殊情况
In MySQL5.7, when READ COMMITTED isolation level is used, or the deprecated innodb_locks_unsafe_for_binlogsystem variable is enabled, there is no InnoDB gap locking exceptfor foreign-key constraint原创 2015-05-02 21:06:34 · 1455 阅读 · 0 评论 -
limits on mysql
1、limits of joinsThe maximum number of tables that can be referenced in a single join is 61. This also applies to the number of tables that can be referenced in the definition of a view.2、表最多可以有原创 2015-05-17 15:26:02 · 992 阅读 · 0 评论 -
innodb外键限制
定义上:innodb permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are listed as the first colu原创 2015-05-27 21:12:23 · 1363 阅读 · 0 评论 -
transaction on mysql的一个有用网址
https://blogs.oracle.com/mysqlinnodb/原创 2015-05-23 21:32:14 · 715 阅读 · 0 评论 -
关于undo log格式中事务ID和undo_no
undo_no_t undo_no;/** Undo number */typedef ib_id_t undo_no_t;/** The generic InnoDB system object identifier data type */typedef ib_uint64_t ib_id_t;事务对象struct trx_t{...undo_n原创 2015-06-25 21:57:06 · 937 阅读 · 0 评论 -
mysql innodb插入意向锁
innodb中有插入意向锁,专门针对insert,如果插入前,该间隙已经由gap锁,那么Insert会申请插入意向锁。那么这个插入意向锁的作用是什么?1、为了唤起等待。因为该间隙已经有锁,插入时必须阻塞。插入 意向锁的作用具有阻塞功能。2、插入意向锁是一种特殊的间隙锁,既然是一种间隙锁,为什么不直接使用间隙锁? 间隙锁之间不互斥,不能够阻塞即唤起等待,会造成幻读。3、为什么原创 2015-06-07 10:32:17 · 4763 阅读 · 1 评论 -
innodb table level lock 与lock table语句关系
DDL语句只申请意向级别的表锁。在lock table语句中,mysql会申请mysql级别表锁,同时innodb也会申请innodb级别表锁。前提是innodb_table_locks=1https://www.percona.com/blog/2012/07/31/innodb-table-locks/ MySQL Table level locks and Innodb Ta原创 2015-05-24 17:31:21 · 2172 阅读 · 0 评论 -
innodb purge操作
Purge搜集的几个感觉不错的文章一、http://blog.sina.com.cn/s/blog_aed82f6f010195me.html由于每次DML操作都会生成Undo页,系统需要定期对这些undo页进行清理,也就是所谓purge操作。在5.5之前这些都是在master线程中完成,但5.5及之后的版本可以通过innodb_purge_threads来转载 2015-06-11 22:57:28 · 1840 阅读 · 0 评论 -
innodb 乐观插入因空间不够导致失败,进入悲观插入阶段,这个空间的限制大小
btr_cur_optimistic_insert{.../*检查分裂页时是否有足够的空间预留给未来记录的update*/if (leaf && !zip_size && dict_index_is_clust(index) && page_get_n_recs(page) >= 2 && dict_index_get_spa原创 2015-07-09 22:16:31 · 1174 阅读 · 0 评论 -
关于innodb purge thread和master thread
由innodb_purge_threads控制purge线程数。(>= 5.6.5)的版本中该值默认为1,最大值为32。默认值1表示innodb的purge操作被分离到purge线程中,master thread不再做purge操作。The number of background threads devoted to the InnoDB purge operatio原创 2015-06-13 00:23:57 · 5488 阅读 · 1 评论 -
Efficiently traversing InnoDB B+Trees with the page directory--slot
Efficientlytraversing InnoDB B+Trees with the page directory1、the purpose of the page directoryAs described in the posts mentioned above,all records in INDEX pages are linked together in a singl翻译 2015-07-03 23:12:43 · 1316 阅读 · 0 评论 -
网上查到关于innodb自增锁的详细完整的讲解--感觉不错
http://my.oschina.net/xinxingegeya/blog/342075讲述了innodb_autoinc_lock_mode不同配置下锁情况和优缺点,及为什么默认配置1而不是2Configurable InnoDB Auto-Increment Locking As described in the previous section, InnoD转载 2015-06-12 22:25:51 · 1748 阅读 · 2 评论 -
为什么innodb表最大支持64TB
innodb的页号是一个32bit int类型数值,一页大小16KB,那么最多有2^32 * 16kb原创 2015-07-05 22:10:42 · 2181 阅读 · 0 评论 -
快速预热innodb buffer pool
当innodb_buffer_pool_size大到几十GB或是百GB的时候,因为某些日常升级更新或是意外宕机,而必须要重新启动mysqld服务的之后,就面临一个问题,如何将之前频繁访问的数据重新加载回buffer中,也就是说,如何对innodb buffer pool进行预热,以便于快速恢复到之前的性能状态。如果是光靠Innodb本身去预热buffer,将会是一个不短的时间周期,业务高峰时,数据转载 2015-06-14 09:48:18 · 642 阅读 · 0 评论 -
innodb page页利用率
主键page利用率71%,其他索引利用率约52%原创 2015-07-06 22:22:18 · 592 阅读 · 0 评论 -
innodb之change buffer被动merge
被动merge情景一,二级索引页空间不足:ibuf0ibuf.cc:: ibuf_insert_low1、当尝试缓存插入操作时,如果预估二级索引page的空间不足,可能导致索引分裂,则定位到尝试缓存的page no在ibuf tree中的位置,最多merge 8个page,merge方式为异步,即发起异步读取索引页请求。 说明: Buffered:当前二级索引页已经缓存的记录原创 2015-08-08 00:36:56 · 1802 阅读 · 0 评论 -
进行mysql压力测试需要注意的几点
1、填充测试数据比物理内存还要大,至少超过innodb_buffer_pool_size 值,不能将数据全部装载到内存中,除非你的本意就想测试全内存状态下的MySQL性能。2、每轮测试完成后,都重启mysqld实例,并且用下面的方法删除系统cache,释放swap(如果用到了swap的话),甚至可以重启整个OS。[root@imysql.com]# sync -- 将脏数据刷新到磁盘原创 2015-08-11 22:53:25 · 1515 阅读 · 0 评论 -
innodb之change buffer主动merge
一、srv0srv.cc:: srv_master_thread说明:1、 主线程有3种状态:ACTIVE、IDLE、SHUTDOWN状态2、 ACTIVE:srv_master_do_active_tasks()3、 IDLE:srv_master_do_idle_tasks()4、 SHUTDOWN:srv_master_do_shutdown_tasks1、sr原创 2015-08-02 18:34:00 · 1130 阅读 · 0 评论 -
mysql5.6和mysql5.7分配undo回滚段的区别
1、mysql5.7中分为2类:临时表空间回滚段和普通回滚段。2、mysql5.6中没有区分。As ofMySQL 5.7.2, 32 undo logs are reserved for use by temporary tables and are hosted in the temporary table tablespace (ibtmp1). To allocat原创 2015-08-31 22:22:31 · 2262 阅读 · 0 评论 -
innodb_flush_log_at_trx_commit
如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,转载 2015-08-17 21:34:16 · 555 阅读 · 0 评论 -
计算mysql内存使用
计算mysql内存使用mysqlused mem =key_buffer_size + query_cache_size +innodb_buffer_pool_size + innodb_additional_mem_pool_size+innodb_log_buffer_size+max_connections * (read_buffer_size+ read_rnd_b转载 2015-08-18 22:49:53 · 3038 阅读 · 0 评论 -
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
刚安装好mysql5.7后,默认带有密码,但是不知道是什么。添加skip-grant-tables启动,进去改好密码后,重启。再次执行语句时报错:ERROR 1820 (HY000): You must SET PASSWORD before executing this statement需要使用下面语句重新设置一次密码: SET PASSWORD = PASSWORD('123原创 2015-09-05 19:53:39 · 947 阅读 · 0 评论 -
死锁的4种类型(重点在最后一个)
一、死锁的4种类型1、不同表的相同行两个表,两行记录交叉获得和申请锁。条件:1) 两个事务分别操作两个表、相同表的同一行记录2) 申请的锁互斥3) 申请的顺序不一致事务1事务2Begin;Begin;Select *from t1 where id=1 for update;原创 2015-10-18 11:07:45 · 4064 阅读 · 0 评论 -
innodb_flush_method&innodb_flush_log_at_trx_commit
1、innodb_flush_log_at_trx_commitInnodb_flush_log_at_trx_commit控制何时刷磁盘,而innodb_flush_method控制如何刷。innodb_flush_log_at_trx_commit 参数解释:0(延迟写): log_buff --每隔1秒-->log_file —实时—> disk1(实时写,实时刷):lo原创 2015-09-16 21:16:24 · 882 阅读 · 0 评论 -
select ... for update& lock in share mode加锁情况
今天测试了下两种情况下加锁情况,怎么加锁个数不一样。for update的话,二级索引对应聚集索引会加锁,lock in share mode的话,不会加。for update对应聚集索引加了锁,但是lock in share mode没加1、表结构:CREATE TABLE `c` ( `id1` int(11) NOT NULL DEFAULT '0', `id2`原创 2015-09-18 23:15:29 · 726 阅读 · 0 评论 -
que0que.cc:: Short introduction to query graphs
A query graphconsists of nodes linked to each other in various ways. The execution starts atque_run_threads() which takes a que_thr_t parameter. que_thr_t contains twofields that control query graph e翻译 2015-09-19 22:39:49 · 841 阅读 · 0 评论 -
mysql5.7新特性
转自姜大神http://www.innomysql.net/article/14411.htmlInnoDB存储引擎本身也不是完美的,特比是和Oracle、PostgreSQL、Microsoft SQL Server的对比中,首当其冲的就是InnoDB B+树索引的那把大锁所导致的性能瓶颈。当进行DML操作时,可能进行树结构的变更,这把大锁可能会导致并发的DML操作变成串行(具体可见转载 2015-10-24 23:11:49 · 1665 阅读 · 0 评论 -
mysql磁盘满时操作
当磁盘空间写满了之后,MySQL是无法再写入任何数据的,包括对表数据的写入,以及binlog、binlog-index等文件。当然了,因为InnoDB是可以把脏数据先放在内存里,所以不会立刻表现出来无法写入,除非开启了binlog,写入请求才会被阻塞。当MySQL检测到磁盘空间满了,它会:每分钟:检查空间是否得到释放,以便写入新数据。当发现有剩余空间了,就会继续写入数据,一切照转载 2015-09-23 22:45:43 · 3243 阅读 · 0 评论 -
Innodb redo log之flush list
Innodb redo log之flush listInnodb维护一个flush list链表,保存所有的脏页。脏页按照第一次修改的时间顺序进行排序。在mtr_commit中将redo从mtr->log中刷到redo log buffer中后,产生LSN后,通过判断LSN决定是否将该页放到flush list中。mtr_commitmtr_log_reserve_原创 2015-11-22 10:37:47 · 981 阅读 · 0 评论 -
mysql字符串查询大小写问题
1、引入问题在进行研究innodb隐式锁转换显示锁时,看到代码有这么一段:else if (0 == cmp_dtuple_rec(entry, rec, offsets)) {/* The delete marks of rec and prev_version should beequal for rec to be in the state required byprev原创 2015-11-01 10:52:08 · 1073 阅读 · 0 评论 -
innodb double write
https://www.percona.com/blog/2006/08/04/innodb-double-write/#more-72One of very interesting techniques Innodb uses is technique called “doublewrite” It means Innodb will write data twice w转载 2015-11-17 22:14:51 · 938 阅读 · 0 评论 -
mysql5.7.9编译
mysql5.7.9版本的源码编译和以往有所不同。Source Installation System Requirements 1、 cmake,http://www.cmake.org2、 推荐使用GUN make3.7.5,或更新版本:http://www.gnu.org/software/make/3、 GCC 4.4.6或更新;Clang 3.3或更新;vi原创 2015-12-13 11:42:29 · 615 阅读 · 0 评论 -
mysql5.7.9启用多实例
1、初始化 [mysql5.7@promote ~]$ mysqld --datadir=/home/mysql5.7/data/data1 --initialize [mysql5.7@promote ~]$ mysqld --datadir=/home/mysql5.7/data/data2 --initialize 2、配置文件 [mysq原创 2015-12-20 19:37:27 · 3476 阅读 · 0 评论 -
mysqlbinlog解析
原文:http://www.tuicool.com/articles/6RvUnqV用MySQL 行格式的复制的Slave经常会遇到复制出错1062和1032 错误,一般是镜像异常宕机导致主从复制数据不一致所致,但是有些库本身很大,重建成本很大,并且这些库的数据一致性用户可能都不是太关心的,所以之前的处理办法一般是遇到主键冲突的就跳过,遇到找不到key的就用mysqlbinlog解析一下转载 2016-01-10 21:47:46 · 2020 阅读 · 0 评论 -
mysqlbinlog解析的几篇经典文章
MYSQL BINLOG相关源码浅析:http://www.woqutech.com/?p=1757MySQL Row格式Binlog的解析:http://www.tuicool.com/articles/6RvUnqV原创 2015-12-26 20:26:20 · 561 阅读 · 0 评论 -
MYSQL数据丢失讨论
转自http://www.woqutech.com/?p=7691. 概述很多企业选择MySQL都会担心它的数据丢失问题,从而选择Oracle,但是其实并不十分清楚什么情况下,各种原因导致MySQL会丢失部分数据。本文不讨论Oracle和MySQL的优劣,仅仅关注MySQL丢失数据的几种情况。希望能够抛砖引玉,让各位MySQL大牛们梳理出MySQL最安全或者性价比合适的适合转载 2015-12-26 20:30:27 · 566 阅读 · 0 评论 -
innodb_fast_shutdown的内幕
参数innodb_fast_shutdown提醒了我一直没研究过的innodb特性之一——insert buffer。首先简述这个参数,然后谈谈insert buffer的实现。Innodb_fast_shutdown告诉innodb在它关闭的时候该做什么工作。有三个值可以选择: 1. 0表示在innodb关闭的时候,需要purge all, merge insert buf转载 2016-02-07 16:24:47 · 590 阅读 · 0 评论 -
MySQL · 性能优化· 5.7.6 InnoDB page flush 优化
http://blog.csdn.net/longxibendi/article/details/44489149在上期的月报中,我们已经详细介绍了Oracle MySQL以及社区分支最新的对InnoDB page flush的优化。在最近release的5.7.6版本中又有了进一步的改进。主要包括以下几点修改修改一、更精确的loop时间Page clean转载 2016-02-09 10:19:22 · 2227 阅读 · 0 评论 -
[MySQL 5.6] 5.6新参数 (完全版)
http://mysqllover.com/?p=575以下列出了MySQL 5.6的一些新参数 || 老参数新功能,有一些的说明只是参照的文档,还没有从代码求证。这些参数的分类也显示了5.6在不同层面的改进(or regression?)不定期更新Ing…/////////////////////////////////////////Serv转载 2016-02-09 10:21:13 · 1192 阅读 · 0 评论