2024-01-23
短连接短连接模型特性
连接成本高。正常的网络连接三次握手外,还需要做登录权限判断和获得这个连接的数据读写权限。
max_connections 参数控制mysql连接上限,超过这个值就会报错“Too many connections”。
mysq机房负载比较高,请求时间变长,连接的时间也会变长。再有新连接,很可能会超过 max_connections 的限...
阅读全文
2024-01-23
只要 redo log 和 binlog 保证持久化到磁盘,就能确保 MySQL 异常重启后,数据可以恢复。
binlog 的写入机制其实,binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。
一个事务的 binlog 是不能被拆开的,因此不论这...
阅读全文
2024-01-23
一个 InnoDB 表包含两部分,即:表结构定义和数据。在 MySQL 8.0 版本以前,表结构是存在以.frm 为后缀的文件里。而 MySQL 8.0 版本,则已经允许把表结构定义放在系统数据表中了。
innodb_file_per_table表数据既可以存在共享表空间里,也可以是单独的文件。这个行为是由参数innodb_file_per_table 控制...
阅读全文
2024-01-23
平时执行很快的更新操作,其实就是在写内存和日志,而MySQL 偶尔“抖”一下的那个瞬间,可能就是在刷脏页(flush)。
当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。
什么情况会引发数据库的 flush 过程呢?
对应的就是 InnoDB 的 redo log...
阅读全文
2024-01-23
根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。
全局锁全局锁:就是对整个数据库加锁。全局锁的典型使用场景是,做全库逻辑备份。
不带事务
MySQL 提供了一个加全局读锁的方法,命令是Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会...
阅读全文
2024-01-23
隔离性与隔离级别事务,ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),I就是隔离性。
当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non reapeatable read)、幻读(phantom read)的问题,为了解决这些问题,...
阅读全文
2024-01-23
常见的索引常见三种哈希表、有序数组和搜索树
哈希表哈希表索引是一种键-值(key-value)存储结构。如果key hash之后出现冲撞,value会拉出来一个链表。
哈希表这种结构适用于只有等值查询的场景
有序数组按照字段递增的顺序进行排序。如果是等值查询使用二分法就可以快速得到,这个时间复杂度是 O(log(N))。
有序数组在等值查询和范围查询场景中的...
阅读全文
2024-01-23
redo log(重做日志)InnoDB修改数据的基本流程,如果我们想修改DB上某行数据的时候,InnoDB会把数据从磁盘读取到内存的缓冲池上进行修改,这时数据在内存被修改,与磁盘中的数据有差异,我们把这样差距的数据称之为脏页。InnoDB并不是把脏页每次都要刷新到磁盘,如果每次都要刷新到磁盘就会产生海量io操作,会严重的损耗InnoDB的处理性能。但是现在...
阅读全文
2024-01-23
在平时工作中我经常会找慢sql查询,然后我习惯的找出来慢sql,会使用explain命令去查看sql查询执行计划,看下这个sql是不是扫描的全表查询,还在通过索引查询。我就去记录一下我平常如何优化sql。
1explain select * from test;
使用expain出来的信息有12列,分别是id、select_type、table、part...
阅读全文
2024-01-23
MySQL基本架构mysql基本架构图:
MySQL大概分server层和储存引擎层两部分。
server层分上面的图片几个主要组件。主要是有Mysql核心服务,跨存储引擎层的功能都在server层实现,比如储存过程、触发器、视图等。
储存引擎层主要负责数据的提取和存储,其中架构模式是插拔式,支持InnoDB、MyISAM、Memory等多个引擎。现在最常...
阅读全文