![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 81
马小屑
这个作者很懒,什么都没留下…
展开
-
我劝!这位年轻人不讲MVCC,耗子尾汁!
上一篇文章中白日梦有和大家介绍过 undo log 默认存放在共享表空间文件中,同在MySQL5.6 MySQL5.7中也允许你将undo log拿到单独的表空间中去,但是不论怎样,undo log总会以真实存在的文件的形式存在于磁盘上,当然了MySQL5.7的undo truncate机制 结合purge线程可以将不需要的undo log清除掉,为undo log文件瘦身,但是在这个版本之前的MySQL的undo log的体量会不断的增大,再加上大量的长事务,很可能会将磁盘打爆。...原创 2022-08-05 16:25:35 · 133 阅读 · 0 评论 -
什么情况会导致 MySQL 索引失效?
联合索引不满足最左匹配原则。模糊查询最前面的为不确定匹配字符。索引列参与了运算。索引列使用了函数。索引列存在类型转换。索引列使用 is not null 查询。原创 2022-08-05 13:55:53 · 2214 阅读 · 1 评论 -
了解MySQL数据页吗?说说什么是页分裂吧!
在MySQL的设定中,同一个表空间内的一组连续的数据页为一个extent(区),默认区的大小为1MB,页的大小为16KB。约定好了数据的组织方式,那MySQL的作用不就是:按照约定数据规则将数据文件中的数据加载进内存,然后展示给用户看,以及提供其他能力吗?而你想得到的id = xxx的数据,就是这个数据页众多行中的一行。在InnoDB存储引擎中,数据页是InnoDB磁盘管理的最小的数据单位,数据页的默认大小为16KB。然后随着你将数据写入。就导致后一个数据页中的所有行并不一定比前一个数据页中的行的id大。.原创 2022-08-05 13:50:27 · 679 阅读 · 0 评论 -
聚簇索引之B+Tree是如何长高的
这一篇笔记简述一下MySQL的B+Tree索引到底是咋回事?聚簇索引索引到底是如何长高的。一点一点看,其实蛮好理解的。MySQL进行CRUD是在内存中进行的,也就是在Buffer Pool中。然后你也知道了当内存中没有MySQL需要的数据时,MySQL会从Disk中通过IO操作将数据读入内存中。读取的单位呢就是:数据页一般数据页长下面这样数据页没错,数据页中存储着真实的数据,而且数据页在内存中是以双向联表的方式组织起来的!如下图页分裂之前。...原创 2022-08-05 13:35:12 · 219 阅读 · 0 评论 -
面试官:了解 MySQL的数据行吗?行溢出机制呢?谈谈看!
你品一品蓝色的话,让一个数据页中可以存放更多的数据行是一个多么激动人心的事,MySQL以数据页为单位从磁盘中读数据,如果能做到让一个数据页中有更多的行,那岂不是单行使用的数据页空间变少了,且整体的效率直线飙升?在MySQL设定中,当varchar列长度达到768byte后,会将该列的前768byte当作prefix存放在行中,多出来的数据溢出存放到溢出页中,然后通过一个偏移量指针将两者关联起来,这就是行溢出机制。那就意味着一个数据页中能存储越多的数据行,MySQL整体的进行的IO次数就越少,性能就越快。..原创 2022-08-05 13:12:13 · 232 阅读 · 0 评论 -
大家常说的表空间到底是什么?究竟什么又是数据表呢?
关于这个共享表空间,直观上看,如果这个表空间能为multiple tables.存储数据,那么它就可以被称为共享表空间,所以你可以认为系统表空间是共享表空间。这里的user其实就是数据表。大家不用纠结为啥它叫表空间、为啥表空间会对应着磁盘上的物理文件,因为MySQL就是这样设计、设定的。共享表空间的体量依然会不断的增长,并且你即使你不断的使用undo进行rollback,共享表空间大小也不会缩减就好了。这个ibdata1文件是系统表空间,也是默认的表空间,也是默认的表空间物理文件,也是传说中的共享表空间。.原创 2022-08-05 13:09:29 · 738 阅读 · 0 评论 -
LSN、Checkpoint?MySQL的崩溃恢复是怎么做的?
那MYSQL重启,由于未来得及commit,脏数据页没有刷新到磁盘上,所以重启时得到的数据时不准确的,但是,实际上MySQL会根据方才的redo log重做。因此内存中的缓存页磁盘成为磁盘上的数据页,也就是说磁盘上的数据页的LSN变成300。说明数据页中缺失了一部分数据。随着MySQL的运行,Buffer Pool中的数据页会被修改成脏数据页,当你开启事物进行一系列的操作时MySQL会为你不停的记录一堆日志,拿redo log来说,rodo log也是需要往先往内存中写,再以块的形式刷新回磁盘。...原创 2022-08-05 13:04:39 · 296 阅读 · 0 评论 -
【干货】分库分表最佳实践
MySQL单表(innoDB)可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW以下是最佳状态,因为这时它的BTREE索引树高在3~5之间。1.单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表;如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。2.实际情况受mysql机器配置等多方面影响,可能数据量很大但性能依旧不错,但考虑后续发展一定要进行分库分表考虑。如何高效的使用分库分表,核心是做到尽量的路由到最少的表,最好是只路由到一个表里面。...原创 2022-08-02 11:47:41 · 538 阅读 · 0 评论 -
你我都会遇到的需求:如何导出MySQL中的数据~ 简单!实用!
使用这个参数后会开启mysql_use_result模式,MySQL每读到一行数据,就会立刻将这行数据返回给客户端,虽然交互的次数多了点,但是直接解决掉客户端内存消耗问题。如果你的SQL要捞出的数据量动辄几十几百G,或者TB级别,且依然使用上面的方式拉数据的话,就极有可能打爆内存。第二种方式如下,在登录MySQL时指定好用哪个数据库和要执行的SQL语句,并将SQL的执行结果一股脑重定向到你指定的文件中。tee的功能是把你与MySQL-Server之间的交互记录都记录到你指定的文件中去。...原创 2022-08-02 10:54:33 · 151 阅读 · 0 评论 -
嗨!不来看一下如何骚气十足的登陆MySQL嘛?
mysql.sock应该是mysql的主机和客户机在同一host(物理服务器)上的时候,使用unixdomainsocket做为通讯协议的载体,它比tcp快。如果你没有配置环境变量,系统就不能直接识别mysql命令,需要你进入到mysql安装目录下的bin文件下,找到mysql命令,然后执行登陆的动作。在mysql中用户的信息会存放在mysql数据库下的user表中可以像下面这样查看到所有用户信息。看起来我们需要了解一下mysql.sock的作用,因为通过它我们可以实现mysql的本地登陆。...原创 2022-08-02 10:21:46 · 91 阅读 · 0 评论 -
删库后!除了跑路还能干什么?
Hi,欢迎订阅白日梦的MySQL专题!这篇文章我们一起闲聊,如果你不小心把MySQL中的数据删了,除了跑路还能干啥?看完本篇你将了解常见的数据库备份方式、mysqldump实战、一条binlog长啥样、什么是gtid?什么是binlog位点?mysqlbinlog数据恢复实战。GTID(globaltranscationidentifier)它是MySQL5.6版本中添加进来的新特性,使用GTID可以唯一的标识一个事物。我用大白话描述一下GTID常见的作用1.写undolog。...原创 2022-07-31 15:51:57 · 93 阅读 · 0 评论 -
MySQL常见的索引
目录一、导读二、聚簇索引三、二级索引四、联合索引4.1、什么是联合索引4.2、左前缀原则4.3、联合索引的分组&排序五、覆盖索引六、倒排索引七、推荐阅读一、导读在MySQL中,不仅为主键创建的聚簇索引选用的数据结构是B+Tree,像辅助索引,二级索引、覆盖索引、联合索引等等其实都是B+Tree。...原创 2022-07-31 15:48:42 · 723 阅读 · 0 评论 -
MySQL两阶段提交串讲
而两阶段提交的机制可以保证这两个日志文件的逻辑是高度一致的。一般当我们的功能函数中有批量的增删改时,我们会添加一个事物包裹这一系列的操作,要么这一组操作全部执行成功,只要有一条SQL执行失败了我们就全部回滚。也就是说当这个参数为ON时,你使用的DAO持久层框架发送给数据库的SQL其实都会被放在一个事物中执行,然后这个事物被自动提交,而我们对这个过程是无感知的。当然,两阶段提交能做到足够的安全还需要你合理的设置redolog和binlog的fsync的时机,而这块知识点所涉及到的参数前几篇文章已经说过。...原创 2022-07-31 14:15:30 · 170 阅读 · 0 评论 -
阿里一面,给了几条SQL,问需要执行几次树搜索操作?
有位朋友去阿里面试,他说面试官给了几条查询SQL,问需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~~本文我们分九个索引知识点,一起来探讨一下。如果有不正确的话,欢迎指出哈,一起学习~面试官考点之索引是什么?面试官考点之索引类型面试官考点之为什么选择B+树作索引结构面试官考点之一次索引搜索过程面试官考点之覆盖索引面试官考点之索引失效场景面试官考点之最左前缀面试官考点之索引下推面试官考点之大表添加索引复制代码https。...原创 2022-07-28 13:47:30 · 66 阅读 · 0 评论 -
MySQL:当你CRUD时BufferPool中发生了什么?十张图就能说清楚
你知道的,MySQL对数据的增删改查都是内存中完成的,这块内存就是Buffer Pool。你可以像下面这样查看下你的MySQL的Buffer的Buffer Pool的默认大小上图中的0.125单位为GB,转换成MB就是 1024* 1/8 = 128MB总结来说,就是MySQL启动后就会为我们初始化好这块Buffer Pool。如下图:你可以看着上图,然后读下面这段话:MySQL以数据页为单位,从磁盘中读取数据。数据页被读取到内存中,所谓的内存其实就是Buffer Pool。Buffer Pool中维护的数原创 2022-07-28 13:34:26 · 80 阅读 · 0 评论 -
MySQL事务已提交,数据一定就不会丢失吗?
画外音如上文所说,应用程序系统调用完write之后(不可能每次write后都立刻flush,这样写日志很蠢),就认为写成功了,操作系统何时fsync,应用程序并不知道,如果操作系统崩溃,数据可能丢失。(2)配置为2和配置为0,安全性差异巨大,操作系统崩溃的概率相比MySQL应用程序崩溃的概率,小很多,设置为2,只要操作系统不崩溃,也绝对不会丢数据。假如某一时刻,数据库崩溃,还没来得及将数据页刷盘,数据库重启时,会重做redolog里的内容,以保证已提交事务对数据的影响被刷到磁盘上。...原创 2022-07-23 10:44:31 · 446 阅读 · 0 评论 -
五个维度着手MySQL的优化,我和面试官都聊嗨了
水平分,主要是为了解决存储的瓶颈;垂直分,主要是为了减轻并发压力。原创 2022-07-23 09:33:59 · 607 阅读 · 0 评论