![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL修炼成神之路
文章平均质量分 70
舍人_1
这个作者很懒,什么都没留下…
展开
-
MySQL 中的几种锁
MySQL 中的锁。原创 2024-07-14 12:23:17 · 497 阅读 · 0 评论 -
什么是回表,如何解决回表问题
执行这样一条SQL: select name from A where name="s;name字段是有索引,所以MYSQL在通过name进行査询的时候,是需要扫描两颗B+tree树的。下面表中:主键id是聚簇索引,name是辅助索引。原创 2024-05-23 23:56:22 · 254 阅读 · 0 评论 -
为什么说change Buffer写缓冲区,仅适用于辅助索引页
应用的场景:对于写多读少的场景,页面在写完以后马上被访问到的概率是比较小的,这时使用change Buffer效果最好什么情况下进行merge?如果索引设置了唯一性,在进行修改时,InnoDB就必须要做唯一性校验,因此必须查询磁盘,做一次10操作。change Bufer作用:在进行DML操作的时候,如果请求的是辅助索引(非唯一索引)并且没有在缓冲池中,并不会立刻将磁盘页加载到缓冲池,而是在CB记录缓冲变。change buffer: 写缓冲区,是针对于二级索引页的更新优化措施。改,不会在CB中操作。原创 2024-05-22 23:40:57 · 285 阅读 · 0 评论 -
Buffer Pool中是如何管理Page页
3)lru ist :表示正在使用的缓冲区,管理cean page和dity pae,该缓冲区以 midpoint 为基点,前面的链表称为new 列表区,存放经常被访问的数据,占63%,后面。注意:脏页在fush链表和LRU链表中都存在,但是两者互不影响,LRU链表负责管理page的可用性和释放,而fush list负责管理脏页的刷盘操作。2)flush list:表示的是需要刷新到磁盘的缓冲区,管理dirty page,内部page是按照修改时间排序。Page根据状态可以分为3中类型。原创 2024-05-19 09:59:47 · 290 阅读 · 0 评论 -
什么是Buffer Pool,介绍一下Buffer Pool
Buffer Pool:缓冲池,用来缓存表数据和索引数据的,减少磁盘IO。Buffer Pool有缓冲数据页(Page)和对缓存数据页进行描述的控制块组成。原创 2024-05-18 17:19:46 · 457 阅读 · 0 评论 -
InnoDB存储引擎的内存结构,都有哪几部分组成,各自的作用是什么
从MySQL5.5版本开始,默认使用的就是InnoDB存储引擎,它擅长处理事务,具有自动崩溃恢复的特性,使用非常广泛.。InnoDB存储引擎架构主要由两部分组成,内存结构和磁盘结构。原创 2024-05-18 16:53:34 · 134 阅读 · 0 评论 -
MySQL架构
MySQL属于关系型数据库,而关系型数据库的存储是以表的形式进行的,对于表的创建,数据的存储,检索,更新等都是由MySQL存储引擎完成的。研究过SQL Server和Oracle的读者可能很清楚,这两种数据库的存储引擎只有一个,而MySQL的存储引擎种类比较多,如MyIsam存储引擎,InnoDB存储引擎和Memory存储引擎。●当向某个表写入数据的时候,必须将和这个表相关的所有缓存设置为失效,如果缓存内容很多,则消耗也会很大,可能使系统僵死,因为这个操作是靠全局锁操作来保护的。原创 2024-05-13 22:52:26 · 1322 阅读 · 0 评论 -
如何对生存环境中的数据库进行压测
这个压测结果会根据每个人的机器的性能不同有很大的差距,你要是机器性能特别高,那你可以开很多的并发线程去压测,比如100个线程,此时可能会发现数据库每秒的TPS有上千个,如果你的机器性能很低,可能压测出来你的TPS才二三十个,QPS才几百个,这都是有可能的。举个例子,之前在我门的一个项目的生产环境中,据我们观察,一台4核8G的机器如果每秒抗下500+的请求,那么他的CPU负载就已经很高了,基本上最多可能也就是去抗下每秒1000+的请求,而且那个时候CPU负载基本会打满,机器有挂掉的风险。原创 2024-04-23 20:31:18 · 545 阅读 · 0 评论 -
互联网公司的生产环境数据库是如何进行性能测试的
(2)网络负载:这个主要是要看看你的机器带宽情况下,在压测到一定的QPS和TPS的时候,每秒钟机器的网卡会输入多少MB数据,会输出多少MB数据,因为有可能你的网络带宽最多每秒传输100MB的数据,那么可能你的QPS到1000的时候,网卡就打满了,已经每秒传输100MB的数据了,此时即使其他指标都还算正常,但是你也不能继续压测下去了。这个指标是很关键的,因为之前我们在数据库架构原理中讲解过,你在内存中更新的脏数据库,最后都会由后台IO线程在不确定的时间,刷回到磁盘里去,这就是随机IO的过程。原创 2024-04-21 16:19:54 · 749 阅读 · 0 评论 -
生产环境下数据库机器配置如何规划
对于这类系统的数据库机器选型,就不在我们的考虑范围之内了。但是在我们的专栏中,我们希望能够教会大家较为专业化的数据库使用经验,包括数据库的整体架构原理,还有就是如何规划生产环境下的数据库,包括当你有一个生产库之后,要做的事情就是设计压测方案,包括对你的数据库进行压测,包括对你的数据库部署可视化监控系统,等等。我们主要关注的是有一定并发量的互联网类的系统,对数据库可能会产生每秒几百,每秒几千,甚至每秒上万的并发请求量,对于这类场景下,我们应该选择什么样的机器去部署数据库,才能比较好的抗下我们的系统压力。原创 2024-04-20 17:12:26 · 587 阅读 · 0 评论 -
聊聊binlog是什么
这时候肯定有同学会问了,最后在redo日志中写入commit标记有什么意义呢?说白了,他其实是用来保持redolog日志与binlog日志一致的。我门来举个例子,假设我门在提交事务的时候,一共有上图中的5、6、7三个步骤,必须是三个步骤都丸行完毕,才算是提交了事务。那么在我门刚完成步骤5的时候,也就是redo log刚刷入磁盘文件的时候,mysql宕机了,此时怎么办?这个时候因为没有最终的事务commit标记在redo日志里,所以此次事务可以判定为不成功。原创 2024-04-18 22:51:57 · 1212 阅读 · 0 评论 -
初步了解InnoDB存储引擎的架构设计
因为我们想一下,在我们更新“id=10”这一行数据的时候,肯定是不允许别人同时更新的,所以必须要对这行记录加独占锁。当我们把要更新的那行记录从磁盘文件加载到缓冲池,同时对他加锁之后,而且还把更新前的旧值写入undo日志文件之后,我们就可以正式开始更新这行记录了,更新的时候,先是会更新缓冲池中的记录,此时这个数据就是脏数据了。当这个参数的值为0的时候,那么你提交事务的时候,不会把redolog buffer里的数据刷入磁盘文件的,此时可能你都提交事务了,结果mysql宕机了,然后此时内存里的数据全部丢失。原创 2024-04-17 00:08:38 · 1065 阅读 · 0 评论 -
为了执行SQL语句,MySQL的架构是怎样设计的
举个例子,比如执行器可能会先调用存储引擎的一个接口,去获取users”表中的第一行数据,然后判断一下这个数据 的“id”字段的值是否等于我们期望的一个值,如果不是的话,那就继续调用存储引擎的接口,去获取“users”表的下一行数据。所以对数据库而言,我们的数据要不然是放在内存里,要不然是放在磁盘文件里,没什么特殊的地方!今天给大家留一个小的思考题,就是你先别管MySQL有哪些存储引擎,你就从业务场景来出发考虑,有的场景可能是 高并发的更新,有的场景可能是大规模数据查询,有的场景可能是允许丢失数据的。原创 2024-04-15 21:19:21 · 1599 阅读 · 1 评论 -
你的系统是如何跟MySQL打交道的
所以一般我们必须要使用一个数据库连接池,也就是说在一个池子里维持多个数据库连接,让多个线程使用里 面的不同的数据库连接去执行SQL语句,然后执行完SQL语句之后,不要销毁这个数据库连接,而是把连接放 回池子里,后续还可以继续使用。常见的数据库连接池有DBCP,C3PO,Druid,等等,大家如果有兴趣的话,可以去搜索一下数据库连接池的 使用例子和代码,甚至探索一下数据库连接池的底层原理,但这个不是我们专栏的重点,我们就不会拓展了。同时我们可能会有多个系统同时去访问一个数据库,这都是有可能的。原创 2024-04-13 23:51:05 · 914 阅读 · 0 评论