
MySQL内核
西门仙忍
从事数据库领域8年
展开
-
mysql数字字典相关(5.6、5.7)
目录table_cachetable_cache的使用背景table_cache的存储结构table_cachetable_cache的使用背景当我们的客户端程序提交 Query 给 MySQL 的时候,MySQL 需要对 Query 所涉及到的每一个表都取得一个表文件句柄信息,如果没有 Table Cache,那么 MySQL 就不得不频繁的进行打开关闭文件操作,无疑会对系统性能产生一定的影响,Table Cache 正是为了解决这一问题而产生的。在有了 Table Cache 之原创 2020-05-12 11:43:55 · 462 阅读 · 0 评论 -
innodb 行查找,有点老了
do_select():查询入口函数。| sub_select():查询部分join的记录。循环调用ha_innobase::rnd_next()和evaluate_join_record()获取并处理该部分的每条记录。(sql\sql_select.cc:11705)| | evaluate_join_record():处理一条查询记录。(sql\sql_select.cc:117...原创 2020-03-26 10:20:06 · 401 阅读 · 0 评论 -
MySQL8.0新特性: 新的事务锁调度VATS简介
传统的事务锁赋予方式是采用FIFS先来先服务的方式,从MySQL8.0.3开始,引入了一种新的模式CATS调度方式,全称为Contention-Aware Transaction Scheduling (或者叫做VATS, V=Variance). 顾名思义就是能够感知到事务竞争关系来实现全局最小开销的锁调度方式。举个简单的例子,trx1和trx2同时等待一条记录锁,按照传统的方式,谁先进入等...转载 2020-03-11 16:17:29 · 325 阅读 · 0 评论 -
MySQL 生成binlog的代码分析
binlog文件的内容 log event MySQL的binlog文件中记录的是对数据库的各种修改操作,用来表示修改操作的数据结构是Log event。不同的修改操作对应的不同的log event。比较常用的几种log event有:Query event、Row event、Xid event等。其中Queryevent对应的是一条SQL语句,在DDL操作和STMT格式的bi...转载 2020-03-09 18:00:52 · 1060 阅读 · 0 评论 -
MySQL 5.7 并行复制源码分析
1. 基础数据结构添加全局的事务计数器产生事务timestamp和记录当前最大事务timestamp的clock。class MYSQL_BIN_LOG: public TC_LOG{ ... public: /* Committed transactions timestamp */ Logical_clock max_committed_transaction; ...原创 2020-03-01 17:45:03 · 503 阅读 · 0 评论 -
MySQL刷脏页优化方案汇总
目录1. 改善FLU刷脏1.1 增加并发(5.7.4):1.2改善链表遍历方式:1.3平衡刷脏权重(5.7.6)1.4 用户线程在检查Redo 空间时不参与刷脏(5.7.6)1.5为page cleaner线程设置更高的优先级(5.7.6)2. 改善LRU刷脏2.1 脏页 to FreeList3. LRU和FLU刷脏分离(Percona)4. 参考链...原创 2019-12-15 18:28:23 · 850 阅读 · 0 评论 -
浅析multi range read(MRR) & batch key access(BKA) & block nested loop(BNL)
另一篇文章介绍了index condition pushdown(ICP) 这篇讲叙的是MRR和与之相关的BKA什么是MRR?MRR:multi range read。不好解释,先来看个例子:select * from tb where key_column = x 在没有MRR的情况下,它是这样得到结果的:1. select key_column转载 2014-11-27 12:12:26 · 446 阅读 · 0 评论 -
Join的实现原理及优化思路
前言前面我们已经了解了MySQLQueryOptimizer的工作原理,学习了Query优化的基本原则和思路,理解了索引选择的技巧,这一节我们将围绕Query语句中使用非常频繁,且随时可能存在性能隐患的Join语句,继续我们的Query优化之旅。 Join 的实现原理在寻找Join语句的优化思路之前,我们首先要理解在MySQL中是如何来实现Join的,只要理解了实现转载 2014-11-27 10:44:29 · 1055 阅读 · 1 评论 -
mysql数据类型和Java数据类型对照一览
MySQL Types to Java Types for ResultSet.getObject()MySQL Type NameReturn value ofGetColumnClassNameReturned as Java ClassBIT(1) (new in MySQL-5.0)BITjava.lang.Boolean转载 2014-11-16 12:58:19 · 351 阅读 · 0 评论 -
mysql编码和Java编码对应一览表
MySQL to Java Encoding Name TranslationsMySQL Character Set NameJava-Style Character Encoding NameasciiUS-ASCIIbig5Big5gbkGBKsjisSJIS (or Cp932 or MS9转载 2014-11-16 12:57:33 · 409 阅读 · 0 评论 -
mysql错误编号和jdbc对应的sql编号对应一览
Mapping MySQL Error Numbers to JDBC SQLState CodesMySQL Error NumberMySQL Error NameLegacy (X/Open) SQLStateSQL Standard SQLState1022ER_DUP_KEYS1000230001转载 2014-11-16 12:56:37 · 780 阅读 · 0 评论 -
MYSQL语句调优:MYSQL Explain 执行计划输出详解
在 explain的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让select 运行更快。如果由于不恰当使用索引而引起一些问题的话,可以运行 analyze table来更新该表的统计信息,例如键的基数,它能帮您在优化方面做出更好的选择。explain 返回了一行记录,它包括了 select语句中用到的各个表的信息。这些表在结果中按照mysql即将执行的查询中读取的转载 2014-12-19 11:28:00 · 528 阅读 · 0 评论 -
SQL标准简介
SQL是Structured Query Language的缩写,它的前身是著名的关系数据库原型系统System R所采用的SEQUEL语言。作为一种访问关系型数据库的标准语言,SQL自问世以来得到了广泛的应用,不仅是著名的大型商用数据库产品Oracle、DB2、Sybase、SQL Server支持它,很多开源的数据库产品如PostgreSQL、MySQL也支持它,甚至一些小型的产品如Acces转载 2014-12-15 11:17:13 · 1052 阅读 · 0 评论 -
初步理解MySQL(5.6)的执行计划
声明:以下均来自于MySQL英文手册5.6,本文主要针对执行计划,由于本人才疏学浅,其他部分可能会一句话带过。引言.什么是执行计划:The set of operations that the optimizer chooses to perform the most efficient query is called the “query execution plan”, als转载 2014-11-27 20:45:28 · 390 阅读 · 0 评论 -
MYSQL 5.6之DBA与开发者指南
构建下一代Web应用与服务简单来说,MySQL 5.6改进了数据库核心的各个功能领域,包括:更好的性能和可伸缩性改进InnoDB引擎的事务吞吐量改进优化器的查询执行时间和诊断更好的应用可用性,支持在线DDL/Schema修改增强开发者的灵活性,支持通过Memcached API访问InnoDB,实现NoSQL功能改进复制功能,满足高性能,自修复的分布式部转载 2014-11-27 12:23:01 · 648 阅读 · 0 评论 -
mysql日志 二
- 数据是什么 从不同的角度和层次来看,我们可以将数据库中的数据看作: A. 关系数据 B. 元组或对象 C. 存在Page中的二进制序列 因此Log中也可以记录不同的内容:- 物理的日志(Physical Log) A. 记录完整的Page B. 记录Page中被修改的部分(page中的偏移,内容和长度). 优点:因为恢复时转载 2015-01-12 18:20:24 · 513 阅读 · 0 评论 -
mysql日志 一
1. 概述很多企业选择MySQL都会担心它的数据丢失问题,从而选择Oracle,但是其实并不十分清楚什么情况下,各种原因导致MySQL会丢失部分数据。本文不讨论Oracle和MySQL的优劣,仅仅关注MySQL丢失数据的几种情况。希望能够抛砖引玉,让各位MySQL大牛们梳理出MySQL最安全或者性价比合适的适合各种应用场景的方案。2. 问题定义一般我们希望把一系列的数据作为一个转载 2015-01-12 18:17:01 · 326 阅读 · 0 评论 -
深入了解MySQL-执行计划优化
存储引擎AttributeMyISAMHeapBDBInnoDBTransactionsNoNoYesYesLock granularityTableTablePage (8 KB)RowStorageSplit fil转载 2014-11-27 12:24:44 · 1881 阅读 · 0 评论 -
jion优化原理二
Join 的实现原理在寻找Join语句的优化思路之前,我们首先要理解在MySQL中是如何来实现Join的,只要理解了实现原理之后,优化就比较简单了。下面我们先分析一下MySQL中Join的实现原理。在MySQL中,只有一种Join算法,就是大名鼎鼎的NestedLoopJoin,他没有其他很多数据库所提供的HashJoin,也没有SortMergeJoin。顾名思义,NestedL转载 2014-11-27 11:27:41 · 482 阅读 · 0 评论 -
jion优化基础一
在数据库的应用中,我们经常需要对多表进行连表操作来获得关系型的数据,因此,应该更加的掌握好SQL语句的join原理,因为,可以稍一不慎,可能一个不好的join导致数据库的全表扫描,查询出大量的无用的信息,并且对数据库性能影响极大。数据库中的join操作,实际上是对一个表和另一个表的关联,而很多错误的理解为,先把这两个表来一个迪卡尔积,然后扔到内存,用where和having条件来慢慢筛选,转载 2014-11-27 11:09:41 · 464 阅读 · 0 评论 -
初步理解MySQL(5.6)的执行计划
The set of operations that the optimizer chooses to perform the most efficient query is called the “query execution plan”, also known as the EXPLAIN plan。优化器为了最有效的执行查询而选择的一系列操作被称为执行计划。1.转载 2014-11-27 10:48:37 · 479 阅读 · 0 评论 -
MySQL系列:innodb引擎分析之基础数据结构
近一年来一直在分析关于数据库相关的源码,前段时间分析了levelDB的实现和BeansDB的实现,这两个数据库网络上分析的文章很多,也都比较分析的比较深,所以也就没有太多必要重复劳动。最近开始关注关系数据库和MYSQL,当然主要还是数据库存储引擎,首先我还是从innodb这个最流行的开源关系数据库引擎着手来逐步分析和理解。我一般分析源码的时候都是从基础的数据结构和算法逐步往上分析,遇到不明白的地方转载 2014-11-12 10:02:24 · 504 阅读 · 0 评论 -
MySQL系列:innodb引擎分析之内存管理
在innodb中实现了自己的内存池系统和内存堆分配系统,在innodb的内存管理系统中,大致分为三个部分:基础的内存块分配管理、内存伙伴分配器和内存堆分配器。innodb定义和实现内存池的主要目的是提供内存的使用率和效率,防止内存碎片和内存分配跟踪和调试。我们先来看看他们的关系和结构。以下是它的关系结构图:上图中的:ut_mem_block块是基础内存管理转载 2014-11-12 10:01:53 · 564 阅读 · 0 评论 -
MySQL系列:innodb源码分析之内存管理
在innodb中实现了自己的内存池系统和内存堆分配系统,在innodb的内存管理系统中,大致分为三个部分:基础的内存块分配管理、内存伙伴分配器和内存堆分配器。innodb定义和实现内存池的主要目的是提供内存的使用率和效率,防止内存碎片和内存分配跟踪和调试。我们先来看看他们的关系和结构。以下是它的关系结构图:上图中的:ut_mem_block块是基础内存管理转载 2015-01-13 12:16:19 · 380 阅读 · 0 评论 -
MySQL系列:innodb源码分析之mini transaction
日志是innodb一个非常重要的模块,在innodb中有两类日志:redo log和undo log。其中redolog日志是用来做数据异常恢复和数据库重启时页数据同步恢复的,redo log是建立在在mini transaction基础上。数据库在执行事务时,通过minitransaction产生redo log来保证事务的持久性。1.mini transaction三个协议转载 2015-01-13 12:09:51 · 439 阅读 · 0 评论 -
MySQL系列:innodb源码分析之redo log恢复
在上一篇《innodb源码分析之重做日志结构》中我们知道redo log的基本结构和日志写入步骤,那么redo log是怎么进行数据恢复的呢?在什么时候进行redo log的日志推演呢?redo log的推演只有在数据库异常或者关闭后,数据库重新启动时会进行日志推演,将数据库状态恢复到关闭前的状态。那么这个过程是怎么进行的呢?以下我们逐步来解析。1.recv_sys_t结构 i转载 2015-01-13 11:53:39 · 634 阅读 · 0 评论 -
MySQL系列:innodb源码分析之重做日志结构
在innodb的引擎实现中,为了实现事务的持久性,构建了重做日志系统。重做日志由两部分组成:内存日志缓冲区(redo log buffer)和重做日志文件。这样设计的目的显而易见,日志缓冲区是为了加快写日志的速度,而重做日志文件为日志数据提供持久化的作用。在innodb的重做日志系统中,为了更好实现日志的易恢复性、安全性和持久化性,引入了以下几个概念:LSN、log block、日志文件组、che转载 2015-01-13 11:53:07 · 590 阅读 · 0 评论 -
MySQL系列:innodb源码分析之page结构解析
在表空间结构分析当中,我们知道innodb的最小物理存储分配单位是page页,在MySQL-3.23版本的源码中,页只有两种页,一种是index page,一种是undo page。其类型值定义在fil0fil.h当中。 FIL_PAGE_INDEX 数据索引页,在表空间的inode page和xdes pa转载 2015-01-13 11:37:21 · 2455 阅读 · 0 评论 -
MySQL系列:innodb源码分析之文件IO
innodb作为数据库引擎,自然少不了对文件的操作,在innodb中所有需要持久化的信息都需要文件操作,例如:表文件、重做日志文件、事务日志文件、备份归档文件等。innodb对文件IO操作可以是煞费苦心,其主要包括两方面,一个是对异步io的实现,一个是对文件操作管理和io调度的实现。在MySQL-5.6版本的innodb还加入了DIRECT IO实现。做了这么多无非是优化io操作的性能。在inno转载 2015-01-13 11:14:23 · 464 阅读 · 0 评论 -
MySQL系列:innodb源码分析之表空间管理
innodb在实现表空间(table space)基于文件IO之上构建的一层逻辑存储空间管理,table space采用逻辑分层的结构:space、segment inode、extent和page.在实现层的逻辑使用了磁盘链表这种结构来管理逻辑关系。我们先来介绍磁盘链表。1.磁盘链表磁盘链表的实现fut0lst.*文件当中, innodb为了管理表空间和索引模块,定义了一个基于磁转载 2015-01-13 11:10:59 · 478 阅读 · 0 评论 -
内核月报
数据库内核月报 - 2014 / 10# 01 MySQL · 5.7重构 · Optimizer Cost Model# 02 MySQL · 系统限制 · text字段数# 03 MySQL · 捉虫动态 · binlog重放失败# 04 MySQL · 捉虫动态 · 从库OOM# 05 MySQL · 捉虫动态 · 崩溃恢复失败# 06 MySQL · 功能改进 · InnoDB...转载 2019-07-15 11:17:39 · 697 阅读 · 0 评论 -
MySQL B+Tree的锁分析(含5.6、5.7和其他深度分析)
目录几点关键的背景正确的B+树并发控制机制需要满足以下几点要求:一些名词SMO过程MySQL5.6 SMO分析MySQL 5.6 SMO代码分析MySQL 5.6 SMO过程分析MySQL5.7 SMO分析MySQL 5.7SMO代码分析MySQL 5.7SMO过程分析几点关键的背景正确的B+树并发控制机制需要满足以下几点要求:正确的读操作:...原创 2019-10-27 23:33:05 · 1393 阅读 · 0 评论 -
MySQL Page读取和淘汰过程分析
目录Page磁盘读取过程申请空闲PAGE空间刷脏页和LRU链表Page内存读取和Page淘汰的互斥Page磁盘读取过程buf_page_get_gen| | ==> rw_lock_s_lock(hash_lock);| | ==> block = (buf_block_t*) buf_page_hash_get_low(buf_pool, s...原创 2019-09-23 10:20:20 · 1163 阅读 · 0 评论