
Mysql
文章平均质量分 89
Mysql
陌隋
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL技术:存储写入性能严重抖动分析
案例描述: 通过iostat发现存储的写性能长期维持在10MB左右,而且因为写性能差已经导致数据库性能变差; 两个小时以后,iostat发现系统的写性能已经能够到100MB以上,数据库性能也恢复正常。也就是说,在对系统、数据库监控中,出现了性能波谷,存储写入性能严重抖动,为什么?一、原理过程由上原理图,进行过程解析: 1、事务提交,修改buffer_pool中的数据形成脏页,并且同时生成redo日志,将日志写入磁盘redo log中; 2、事务提交成功;假设,.转载 2021-08-23 21:59:27 · 350 阅读 · 0 评论 -
MySQL技术:commit非规律性失败案例的深入分析
一、理论知识1、关于commit原理,事务提交过程 1、寻找修改的数据页: 1、如果该数据页在内存中,则直接是内存读; 2、如果该数据页内存中没有,物理读,就从磁盘调入内存; 2、磁盘中的undo页调入内存; 3、先将原来的数据存入undo,然后修改数据(数据页成脏页); 4、修改数据的信息生成redo数据存入log_buffer(内存中的一个空间,默认16M)中;mysql> show variables like '%log_buffer%转载 2021-08-23 20:55:14 · 302 阅读 · 0 评论 -
MySQL技术:事务隔离级别
一、事务描述1、事务的四个特性 ACID 1. A:原子性 =一个事务或者都成功、或者都失败; 2. C:一致性 = 在整个事务的生命周期里面,查询到的数据是一致的; MVCC多版本并发控制:利用undo保存某一时刻数据快照,通过版本号来减少锁的争用,保证各个事务互不影响。 3. I: 隔离性 = 隔离级别; 4. D:持久性 =只要事务commit,这个事务不会因为系统的崩溃而丢失; 持久性和原子性对于所有的支持事务的数据库都是一样的,都满足。2、常见...转载 2021-08-22 16:49:37 · 200 阅读 · 0 评论 -
MySQL技术:数据库逻辑结构单元
0:数据库逻辑结构包括表空间,段,区,数据块 1、数据库在逻辑上是由多个表间组成的,表空间中存储的对象是段; 2、段,由区组成,比如数据段,索引段,和undo段; 3、区,是磁盘分配的最小单位,是物理上连续的块,一个extent的大小是1M,由64个页组成; 4、块(页),在MySQL中块就是页,是数据库中最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位,一个page的大小是16K(默认,一般也不会更改),innodb_page_size,其值应设置为操作系统块转载 2021-08-21 23:33:07 · 1415 阅读 · 0 评论 -
MySQL技术:共享表空间 VS 独立表空间
【共享表空间】 又称为system tablespace系统表空间,a small set of data files (theibdatafiles)。一、共享表空间ibdata11、数据字典(data dictionary):记录数据库相关信息2、doublewrite write buffer:解决部分写失败(页断裂)3、insert buffer:内存insert buffer数据,周期写入共享表空间,防止意外宕机4、回滚段(rollback segments)5...转载 2021-08-21 23:15:20 · 529 阅读 · 0 评论 -
MySQL技术:MVCC实现原理
MVCC 到底是什么?MVCC 即多版本控制器,其特点就是在同一时间,不同事务可以读取到不同版本的数据,从而去解决脏读和不可重复读的问题。这样的解释你看了不下几十遍了吧!但是你真的理解什么是多版本控制器吗?①生活案例:搬家最近小 Q 跟自己的女朋友需要搬到新家,由于出小区的的时候需要支付当月的物业费。于是小 Q 跟自己的女朋友同时登陆了小区提供的物业缴费系统。②悲观并发控制假设小Q正在查当月需要缴纳的费用是多少,然后进行支付的时候,此时小Q查询的这条数据是已经被锁定的。那么小Q女转载 2021-08-21 12:19:48 · 2448 阅读 · 0 评论 -
MySQL技术:latch锁争用深入分析与判断
一、latch锁是什么锁1、定义 latch锁是内存锁,是一个小型的在内存中保护list的内存锁结构。2、特点 1、不排队 2、spin,一个线程想获得一个锁,但是该锁已被另一线程持有,进行spin(空转随机时间)占用cpu间接性的等待锁的释放,然后获取去进行相关操作。 3、os waits:sleep,spin多次仍然spin 4、cpu繁忙,latch争用Q:什么是锁?A: 1、用来保护共享资源,支持并发 2、锁会影响并发 3、latc.转载 2021-08-20 22:49:51 · 845 阅读 · 0 评论 -
MySQL技术:后台线程清理工作
一、innodb_page_cleaners page cleaner线程从buffer pool中刷脏页的线程数量。1、5.7新特性 1、5.6版本以前,脏页的清理工作交由master线程的; 2、Page cleaner thread是5.6.2引入的一个新线程(单线程),从master线程中卸下buffer pool刷脏页的工作独立出来的线程(默认是启一个线程); 3、5.7开始支持多线程刷脏页;2、发起脏页的写请求 清理因为触发需要脏页回收的脏页(脏很久了、冷脏转载 2021-08-19 22:12:21 · 1265 阅读 · 0 评论 -
MySQL技术:InnoDB存储引擎关键特性之checkpoint
一、日常关注的问题1、我们的日志生成速度? 1、每天生成多少日志、产生多少redo logmysql> show global status like 'Innodb_os_log_written';+-----------------------+--------+| Variable_name | Value |+-----------------------+--------+| Innodb_os_log_written | 107008 |+-转载 2021-08-19 20:53:48 · 1115 阅读 · 0 评论 -
MySQL技术:InnoDB存储引擎关键特性之刷新邻接页-异步IO
一、刷新邻接页功能1、工作原理 当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新。这样做的好处显而易见,通过AIO可以将多个IO写入操作合并为一个IO操作,增大写入量,减少了物理写IO,故该工作机制在传统机械磁盘下有着显著的优势。 1、在写入次数基本不增加的情况下,增加了写入的量; 2、加速了脏页的回收; 3、充分利用double write每次1M写入的特征; 4、这个功能打开以后会发现iostat里面的wrqm转载 2021-08-18 22:23:11 · 295 阅读 · 0 评论 -
MySQL技术:InnoDB存储引擎关键特性之自适应哈希索引
1.为什么要出现自适应哈希索引?哈希是一种非常快的查找方法,一般情况下查找的时间复杂度是O(1) 而MySql数据库中的索引B+树的一般高度为3~4层,所以如果用索引B+树查找的话一般要进行3-4次的查找 由于某些应用中可能会频繁的进行某一类的SQL操作,这些SQL操作甚至会访问相同的索引页,所以为了更快的对这些热点页进行查询,InnoDB存储引擎会为这些热点页建立哈希索引2.哈希查找为什么是O(1)?哈希表是一种线性表,也就是我们常说的数组,也就是说存储的物理地址是连续的,可以直接通过ind转载 2021-08-18 22:00:14 · 421 阅读 · 0 评论 -
MySQL技术:InnoDB存储引擎关键特性之double write
1.为什么要有两次写如果说插入缓冲(Insert Buffer)给InnoDB带来的是性能上的提升,那么两次写(doublewrite)带给InnoDB的就是数据页的可靠性 当发生数据库宕机时,可能InnoDB存储引擎正在写入到某个页到表中,而这个页只写了一部分,比如16KB的页,只写了4KB,之后就发生了宕机,这种情况就称为部分写失效。 面对这种情况,其实我们可以想到的就是通过重做日志进行恢复,这的确是一个办法,但是我们要知道,重做日志是对页的物理操作(例如:偏移量2000,写‘hello wor转载 2021-08-17 22:59:16 · 2589 阅读 · 1 评论 -
MySQL buffer pool的预读机制
一、预读机制 InnoDB在I/O的优化上有个比较重要的特性为预读,预读请求是一个i/o请求,它会异步地在缓冲池中预先回迁多个页面,预计很快就会需要这些页面,这些请求在一个范围内引入所有页面。InnoDB以64个page为一个extent,那么InnoDB的预读是以page为单位还是以extent? 数据库请求数据的时候,会将读请求交给文件系统,放入请求队列中;相关进程从请求队列中将读请求取出,根据需求到相关数据区(内存、磁盘)读取数据;取出的数据,放入响应队列中,最后数据库就会从.转载 2021-08-17 21:10:31 · 368 阅读 · 0 评论 -
重学MySQL系列06-InnoDB 对 Buffer Pool 的奇思妙想
前言相信很多小伙伴在面试中都被问过「为什么要用缓存?」,大部分人都是回答:「减少数据库的磁盘IO压力」。但是MySQL真的有如此不堪吗?每次增删改查都要去走磁盘IO吗?今天就聊聊InnoDB对Buffer Pool的奇思妙想。Buffer Pool先梳理出问题,再思考如何解决问题。假设我们就是InnoDB,我们要如何去解决磁盘IO问题?这个简单,做缓存就好了,所以MySQL需要申请一块内存空间,这块内存空间称为Buffer Pool。Buffer Pool是申请下来了转载 2021-08-17 21:08:00 · 217 阅读 · 0 评论 -
MySQL技术:InnoDB存储引擎关键特性之插入缓冲
一.Insert Buffer在探讨插入缓冲特性之前,我们必须先弄懂InnoDB聚集索引和非聚集索引的插入过程,因为插入缓冲就是针对于非聚集索引的插入效率而诞生的 如果对于 聚集索引和非聚集索引的概念还不是很清楚的朋友可以看看我的这篇博客:《MySQL索引的原理-聚集索引,非聚集索引的底层实现》1.1 聚集索引和非聚集索引的插入1.1.1聚集索引的插入在InnoDB存储引擎中,主键是行的唯一标识符,通常应用程序中行记录插入的顺序就是按照主键递增的顺序进行插入的 聚集索引有这样的特点:行物理转载 2021-08-16 23:50:12 · 648 阅读 · 0 评论 -
MySQL索引的原理-聚集索引,非聚集索引的底层实现
一.B(B-)树与B+树的简介在了解Mysql数据库索引的实现之前,就必须知道B树与B+树的相关知识,否则根本无法进行学习。1.1 B(B-)树首先明确一个概念:B树就是B-树 这里仅仅对B树做一个简单的介绍1)B树是平衡树,类似于二叉排序树,所以左子节点的数据一定小于父节点,右子节点的数 据一定大于父节点2)但是B树每一个节点的结构是一个线性表,分别存储关键字(key:也就是数据)和指向子 节点的指针 ...转载 2021-08-15 22:05:57 · 634 阅读 · 0 评论 -
MySQL技术:MySQL—InnoDB存储引擎体系架构
1.存储引擎1.1概念首先明确一个概念,存储引擎是基于表的,不是基于数据库的 其次存储引擎指的是表的底层物理结构的实现,也就是表在底层是如何存储的,不同的存储引擎存储表的物理结构不同 MySQL数据库最大的特点就是插件式的表存储引擎,即支持多种存储引擎,目前默认的存储引擎是InnoDB,但是其还支持:MyISAM,NDB,Memory,Archive,Federated,Maria等存储引擎,不同的存储引擎有着自己管理表和存储表的方式 下图为Mysql数据库的体系结构图,可以看到底层第二层为多转载 2021-08-15 21:52:40 · 578 阅读 · 0 评论 -
重学MySQL系列05-redo log与binlog
今天就来聊聊InnoDB是如何保证redo log与binlog两份日志之间的逻辑一致。两阶段提交redo log(重做日志)让InnoDB存储引擎拥有了崩溃恢复能力。binlog(归档日志)保证了MySQL集群架构的数据一致性。虽然它们都属于持久化的保证,但是则重点不同。在执行更新语句过程,会记录redo log与binlog两块日志,以基本的事务为单位,redo log在事务执行过程中可以不断写入,而binlog只有在提交事务时才写入,所以redo log与binlog的写入时机不一转载 2021-08-15 18:26:40 · 788 阅读 · 0 评论 -
重学MySQL系列04-binlog
前言上篇详细聊了redo log(重做日志),但是在MySQL数据库中还有一种二进制日志叫binlog(归档日志)。redo log它是物理日志,记录内容是“在某个数据页上做了什么修改”,属于InnoDB存储引擎。而binlog是逻辑日志,记录内容是语句的原始逻辑,类似于“给ID=2这一行的c字段加1”,属于MySQL Server层。binlog不管用什么存储引擎,只要发生了表数据更新,都会产生binlog日志。那binlog到底是用来干嘛的?可以说MySQL数据库的数据备转载 2021-08-14 22:35:29 · 200 阅读 · 0 评论 -
重学MySQL系列03-redo log
前言说到MySQL,有两块日志一定绕不开,一个是InnoDB存储引擎的redo log(重做日志),另一个是MySQL Server层的binlog(归档日志)。只要是数据更新操作,就一定会涉及它们,今天就来聊聊redo log(重做日志)。redo logredo log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。比如MySQL实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。上一篇讲过.转载 2021-08-12 23:29:14 · 569 阅读 · 0 评论 -
重学MySQL系列02-InnoDB的内存组件
前言MySQL中执行一条SQL语句,相应表数据的读写都是由存储引擎去操作的(更新数据、查询数据)。在这个过程中,存储引擎需要决策几件事情 数据是从内存查,还是从硬盘查 数据是更新在内存,还是更新在硬盘 内存里的数据什么时候同步到硬盘 所以存储引擎会按照内部逻辑与内存、硬盘交互。我们可以按需选择存储引擎,比如常见的InnoDB、MyISAM、Memory等等。众多存储引擎中,InnoDB是最为常用的,从MySQL5.5.8版本开始,InnoDB是默...转载 2021-08-12 23:08:43 · 209 阅读 · 0 评论 -
重学MySQL系列01-揭开面纱,显露架构
前言目前大部分的后端开发人员对MySQL的理解可能停留在一个黑盒子阶段。对MySQL基本使用没什么问题,比如建库、建表、建索引,执行各种增删改查。所有很多后端开发人员眼中的MySQL如下图所示导致在实际工作中碰到MySQL中死锁异常、SQL性能太差、异常报错等问题时,直接百度搜索。然后跟着博客捣鼓就解决了,可能自己都没搞明白里面的原理。为了解决这种知其然而不知其所以然的问题,阿星的重学MySQL系列会带着大家去探索MySQL底层原理的方方面面。这样大家碰到MySQL的一些异常转载 2021-08-12 22:20:48 · 162 阅读 · 0 评论 -
MySQL性能优化(五):分区
由于公司使用的是mysql数据库,在存储hive表数据结构时,数量已经达到了千万级别,需要进行分区存储,对这方面在之前的hive外部分区表有些了解,mysql是不是相同的道理,这里我在同事那里看到一些文章,作为学习使用;一: 分区简介分区是根据一定的规则,数据库把一个表分解成多个更小的、更容易管理的部分。就访问数据库应用而言,逻辑上就只有一个表或者一个索引,但实际上这个表可能有N个物理分区对象组成,每个分区都是一个独立的对象,可以独立处理,可以作为表的一部分进行处理。分区对应用来说是完全透明的,不影转载 2020-06-10 22:08:23 · 3847 阅读 · 0 评论 -
MySQL性能优化(四):分表
为什么要分表 如果一个表的每条记录的内容很大,那么就需要更多的IO操作,如果字段值比较大,而使用频率相对比较低,可以将大字段移到另一张表中,当查询不查大字段的时候,这样就减少了I/O操作 如果一个表的数据量很少,那么查询就很快;如果表的数据量非常非常大,那么查询就变的比较慢;也就是表的数据量影响这查询的性能。 表中的数据本来就有独立性,例如分别记录各个地区的数据或者不同时期的数据,特别是有些数据常用,而另外一些数据不常用。 大表对DDL操作有一定的影响,如创建索引,添加字转载 2020-06-09 08:40:15 · 309 阅读 · 1 评论 -
MySQL性能优化(三):索引
索引原理如果一本新华字典没有目录,想要查找某个字,就不得不从第一页开始查找,一直找到最后一页(如果要找的字在最后一页),这个过程非常耗时,这种场景相当于数据库中的全表扫描的概念,也就是循环表中的每一条记录看看该记录是否满足条件,扫描次数为表的总记录数。新华字典中都有目录,都有查找方法(比如按拼音查找、按部首查找)。假如按拼音查找,我们根据拼音就能迅速定位到要找的汉字,而这个汉字后面还有这个汉字对应的页数,我们直接翻到该页就能找到,整个查找过程非常快,用时非常短。这个原理就是数据库中索引的原理。这里的转载 2020-06-04 22:31:45 · 246 阅读 · 0 评论 -
MySQL性能优化(二):优化数据库的设计
数据库设计数据库命名:数据库名的命名一般和项目的名称保持一致,不要随意的起名字。数据库编码: 尽量采用utf8mb4而不使用utf8。MySQL 的“utf8”实际上不是真正的UTF-8,真正的UTF-8是每个字符最多四个字节,而MySQL的“utf8”只支持每个字符最多三个字节。表的设计数据库表结构的设计是最基础也是最重要的,因为一旦数据库表设计完毕并投入使用,将来再进行修改就相对比较麻烦,特别数据量大时增加字段修改字段类型都比较麻烦,因此在进行数据库设计的时候一定要尽可能的考虑周到。.转载 2020-06-03 18:33:42 · 308 阅读 · 0 评论 -
MySQL性能优化(一):多种优化方式介绍
我们常见的数据库性能优化就是SQL语句优化,确实SQL优化是开发者接触到最多的也是最常有的优化手段。作为开发人员我们接触最多的也就是SQL语句的优化,SQL语句的优化除了调整SQL语句外更多的是通过添加索引来加速查询,表结构(合理设计字段、拆分字段到其它表、分表等)的优化也是我们优化的主要手段。SQL优化是我们学习的重点,我们将全面详细讲解以上SQL优化,但是SQL优化并不是数据库优化的全部,一般来说数据库性能优化可以通过以下几个方面来优化: 硬件:傻子都知道你买个好服务器比你现在用的笔记本数据.转载 2020-06-03 16:27:52 · 295 阅读 · 1 评论 -
MySQL索引的原理,B+树、聚集索引和二级索引的结构分析
简介索引是一种用于快速查询行的数据结构,就像一本书的目录就是一个索引,如果想在一本书中找到某个主题,一般会先找到对应页码。在mysql中,存储引擎用类似的方法使用索引,先在索引中找到对应值,然后根据匹配的索引记录找到对应的行。B树索引大多数存储引擎都支持B树索引。b树通常意味着所有的值都是按顺序存储的,并且每一个叶子也到根的距离相同。B树索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取数据。下图就是一颗简单的B数。B树的查询流程:如上图我要从找到E字母,查找流程如下转载 2020-06-03 15:34:01 · 588 阅读 · 0 评论 -
深读源码-java同步系列之mysql分布式锁
问题(1)什么是分布式锁?(2)为什么需要分布式锁?(3)mysql如何实现分布式锁?(4)mysql分布式锁的优点和缺点?简介随着并发量的不断增加,单机的服务迟早要向多节点或者微服务进化,这时候原来单机模式下使用的synchronized或者ReentrantLock将不再适用,我们迫切地需要一种分布式环境下保证线程安全的解决方案,今天我们一起来学习一下mysql分布式锁如何实现分布式线程安全。基础知识mysql中提供了两个函数——get_lock('key', timeo转载 2020-05-26 22:01:39 · 182 阅读 · 0 评论