star++
致力于研究Apache开源项目
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
mysql实用技能
幻读:两个事务非操作同一条数据,一个事务使用非等值查询,比如范围查询,另外一个事务在这个范围插入数据并且提交,那么之前范围查询会查询出之前没有的记录,被称为幻读(幻读只针对新出现的记录,比如老的记录被删除了,只能称作不可重复读)不可重复读:两个事务或者以上同时操作一条数据时候,一个事务读取数据,另外其他事务一直修改这条数据并且提交了,那么每次读到的数据都不一样,读到的确是是真实的最新数据,那么又叫不可重复读。(原子性,隔离性,持久性,最终都是体现在一致性上,都是为一致性服务的)原创 2024-07-03 17:42:35 · 143 阅读 · 0 评论 -
mysql关于如何彻底解决和理解幻读问题
mysql如何彻底解决幻读问题原创 2022-09-05 10:55:48 · 526 阅读 · 0 评论 -
mysql使用redo日志实现事务持久性
概述前面提到,为了减少io操作,加载的数据页先会放到Buffer pool,等到刷盘时机,才会真实将页数据刷到磁盘进行持久化.假设修改好的脏页,在事务已经提交的情况下,突然断电,那么修改的脏页就丢失了,这样没办法保证事务的持久性.这个时候redo日志就派上用场了.redo日志原理1.当执行一条写语句时候,首先会加载到Buffer pool的缓存页中,然后修改页中数据,加入到 flush链表中,我们知道如果这个时候断电,数据其实在只是内存中改了,会导致数据丢失, 这个修改后的脏页再也无法恢复出原创 2022-01-14 23:10:37 · 558 阅读 · 0 评论 -
mysql中的Buffer Pool
概述innodb存储引擎加载数据是按照页单位来加载的。当我们对一张表做增删改查的情况下,mysql会查找对应的表空间,根据索引找到段,根据段找到页或者区,然后将16k整页数据加载到内存,然后修改页中的记录,保存到磁盘。其实真实情况不是这样,最后一步并不是马上写回磁盘,而是先写到Buffer Pool中,等到了一定时机,才会统一刷盘的,这样mysql可以节省一些io操作,特别是操作频繁的热点数据。也就是说数据修改是暂时写到内存(Buffer Pool)的,其实会存在持久性问题,后续讨论redo,undo日志原创 2022-01-12 22:14:16 · 894 阅读 · 0 评论 -
mysql查询优化器对sql执行成本的估算
概述mysql中,有个查询优化器,是专门用来估算查询语句的成本的,然后选择一个mysql认为成本最低的方案进行执行。今天我们来了解一下常见查询sql语句的成本是怎么估算的,mysql依据是什么?估算准备知识点1mysql估算基于哪些数据a.mysql既然要估算查询成本,那么必然要进行一些计算,就像我们要去一个地方,想要知道要多久一样。 计算公式是路程除于速度。不同交通工具速度不一样,不同路线总路程也是不一样的。 b.mysql有类似于上面的数据存在。mysql每张表都有统计信息,使用命令S原创 2022-01-09 15:29:45 · 746 阅读 · 0 评论 -
mysql两表连接原理(搞懂join buf)
概述一般情况下,我们使用mysql都是使用两种查询比较多,一个是单表查询,一个是多表连接。多表连接原理还是很重要的,特别是对查询优化这块的理解。从表空间层面来看,多表都不在一个表空间,那么可想而知这个是不是更加需要考虑优化,更加需要知道其中的原理。原理1.正常情况下表连接1.两张表 stu 和stu_score,也就是一张记录学生基本信息表,一张记录学生成绩表2.现在需要join 两张表,假设 on 条件为 stu.id=stu_score.stu_id作为连接条件 3.基于stu作为驱原创 2022-01-08 11:49:14 · 1367 阅读 · 0 评论 -
mysql单表访问方法
概述所谓的访问方法就是你想查出一堆数据,然后把sql丢给mysql,然后mysql根据你的表情况(索引,数据量,查询成本),给出mysql自己认为最优的执行方式,这就是访问方法。mysql给这些执行方法取了独立名字,分别是:const,ref,ref_or_null,range,index,all,index merge等值查询(单字段单值)(走单个索引)1.const方法select * from user where id=? //id是主键(聚簇索引)select * from user原创 2022-01-04 23:59:58 · 577 阅读 · 0 评论 -
mysql表空间解析
概述前面几节,我介绍了行记录,页,索引(B+)的结构,索引的叶子和非叶子节点都是由页构成的,页的大小有16k,可以存储满行记录。那么问题来了,一张表有多个索引,那这些索引又是怎么组织起来的呢,答案就是我们今天要讲的表空间,表空间真是描述了一张表怎么合理存储多个索引的,也就是表数据(索引即数据)。表空间结构解析1.表空间整体结构1.表空间其实是一个文件,存在mysql安装时候的数据目录下面2.每创建一张表,就会生成一个.idb文件,这个文件就是表空间文件3.一个表文件中分为很多extend(原创 2022-01-03 15:04:52 · 1230 阅读 · 3 评论 -
mysql行格式解析
概述mysql行格式虽然在我们写代码的时候不太会关注这个东西,但是了解了还是对我们有一定帮助的,这样我们可以对mysql是怎么存储数据有一定了解,我们可以更好的对mysql进行一些优化和存储的空间的节省.了解行格式,其实就是了解我们插入数据库的每条记录是怎么存储的.行记录分析1.行格式分类COMPACT,Redundant,Dynamic,Compressed,由于现在默认使用的是Dynamic,我们了解这种就行了,其它 的行格式大同小异2.Dynamic行结构分析1.表例子2.dynam原创 2021-12-29 20:15:56 · 604 阅读 · 0 评论 -
mysql之千万数据试验
表结构CREATE TABLE s1 ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 INT, key3 VARCHAR(100), key_part1 VARCHAR(100), key_part2 VARCHAR(100), key_part3 VARCHAR(10...原创 2020-04-25 22:49:52 · 190 阅读 · 0 评论 -
explain详解
概述explain是用来查看sql的执行计划的,每当我们想要看看sql执行计划,或者由于性能原因更是需要分析执行计划· 。一般来说sql执行计划都是这样的,我们需要明白每个字段的含义。table字段table字段表示sql执行计划的每一步都涉及的表,具体是对哪一张表的操作举例:explain select * from s1explain select * from s1 inn...原创 2020-04-20 13:40:14 · 722 阅读 · 0 评论 -
(十五)MySql常见问题解答
一张表建多了索引会有什么问题?答:增,删,改效率会降低,并且带来大量空间的占用解说:a.我们知道每个索引都是一颗B+树,意味着每建一个索引,我们就要存储一颗B+树,B+树由n多个页组成,一个页固定大小为16kb,那么存储一颗B+树的空间为n*16kb,具体多少,由你的记录条数决定。b.B+树的内部结构就是将作为索引的列值进行从小到大排列,那么如果如果增加一条记录,那么意味着涉及到的字段有...原创 2020-02-21 22:51:14 · 263 阅读 · 0 评论 -
(十四)mysql常用命令之逻辑备份
mysqldump1.查看mysqldump命令参数格式2.具体操作(使用第一种格式 mysqldump [op] database [tables])a.备份一个数据库(mysqldump mytest<对应database> -uroot -p >dump1.sql)会把mytest数据库的表格和数据都存到dump.sql中b.备份一张表(mysql...原创 2019-07-03 00:38:07 · 422 阅读 · 0 评论 -
(十三)深入理解 一致性锁定读 与 一致性非锁定读
一致性锁定读 与 一致性非锁定读产生的原因在mysql数据库中,有一个行锁的概念。行锁有两种类型:共享锁(s),排它锁(x);x锁和s锁是不能互相兼容的,而s锁与s锁是可以互相兼容的;在mysql的设计中,在写操作的时候会自动给选定行加上x锁,也就是所谓独占锁,即在没有释放x锁之前,任何会话都不能访问锁定行,我相信这个是没有问题的;但是这样会有问题,别的会话去读加了x锁的行时在正常逻辑下,...原创 2019-06-26 03:02:44 · 2220 阅读 · 7 评论 -
(十二)mysql常用命令之索引类型和操作
索引索引是关键字与数据的关系的映射,索引是一种数据结构B+Tree,这种数据结构非叶子节点和数据页产生了映射关系。索引类型1.主键索引 primary key2.普通索引 key3.唯一索引 unique key4.全文索引 fulltext key创建索引1.创建一张表,添加了主键索引2.添加普通索引(alter table table_name add ...原创 2019-05-06 15:22:01 · 383 阅读 · 0 评论 -
(一)MySQL锁问题---MyISAM(表锁)
mysql锁问题1—MYISAM在mysql数据库中,锁是基于存储引擎的,不同的存储引擎,采用的锁机制是不一样的。常用存储引擎:MYISAM,MEMORY,INNODB。锁的类型:行级锁,页面锁,表级锁具体对应关系:存储引擎锁的类型MYISAM表级锁MEMORY页面锁INNODB行级锁...原创 2018-12-24 14:03:16 · 622 阅读 · 0 评论 -
(二)MySQL锁问题---InnoDB(行锁理论)
InnoDB与MyISAM两种存储引擎采用的锁机制是不一样的,MyISAM采用的是表锁,而InnoDB采用的是行锁(确切的说是行锁表锁共同控制)进行控制。MyISAM采用表锁机制,用大白话讲就是当需要进行对表进行读写操作的时候对整张表进行加锁,这样来限制其他端对表的访问;InnoDB采用行锁机制,用大白话讲就是当需要进行对表读写操作的时候,对需要操作的某条记录进行锁定;所以相对于MyISAM直接锁...原创 2018-12-25 15:18:04 · 532 阅读 · 0 评论 -
(五)mysql常用命令之表结构定义文件
套接字文件mysql启动的时候需要一个套接字文件pid文件mysql服务端启动的时候会有一个文件保存进程id文件可以看到进程号的文件路径查看mysqld的进程号为 9787,文件中保存的也是9787表结构定义文件从字面意思来看就知道有某个文件是来存储表定义信息的,这个文件就是.frm文件我在test数据库中建了四个表,然后就对应了四个.frm文件...原创 2019-04-16 15:11:35 · 348 阅读 · 0 评论 -
(六)mysql常用命令之InnoDB存储引擎文件
概述前面提到的错误日志,慢查询日志,二进制日志,参数配置,.frm表结构,pid,socket这些文件,都是和数据库实例相关的,但是在mysql的可插拔的设计中,设计了不同的存储引擎,那么这些存储引擎产生的文件是不同的,我们现在就来看看inndb类型存储引擎的一些文件。...原创 2019-04-16 15:23:37 · 295 阅读 · 0 评论 -
(一)mysql常用命令之字符编码
查看字符集show variables like “%char%”查看某数据库的字符编码show create database database_name查看表编码格式show create table table_name;原创 2019-04-13 17:39:55 · 187 阅读 · 0 评论 -
(二)mysql常用命令之配置文件
二进制日志文件,log-bin主要用于主从复制错误日志文件,error.log 主要记录数据库的启动关闭相关信息查询日志文件,log 主要用于监控查询中的语句存放数据库数据文件目录,/var/lib/mysql目录1.查看物理中存放数据库的文件位置2.查看数据库表结构文件(.frm文件)...原创 2019-04-14 11:00:07 · 263 阅读 · 0 评论 -
(七)mysql常用命令之索引组织表
索引组织表在InnoDB存储引擎中,表都是根据主键顺序组织排放的,这种存储引擎的表都是有主键的。确认主键方式以一我们创建了一张表 table1,定义了三个唯一索引,其中有 cc,dd是非空唯一索引,bb是允许为空插入了三条数据,我们可以通过_rowid(隐形字段)来查看记录的主键字段的值,会发现是dd这个字段作为了主键,所以选择主键的规则就是第一个申明非空唯一索引字段。确...原创 2019-04-17 12:08:30 · 229 阅读 · 0 评论 -
(三)mysql常用命令之参数文件
参数文件概念作用:用来寻找数据库各种文件所在位置,已经制定数据化启动实例的某些初始化参数查看参数mysql–help | grep my.cnf (查看参数文件位置)show variables [like param] 不添加参数进行检索,默认显示所有的参数(可以参看当前mysql所有设置的参数,如果没在my.cnf中设置,那么采用默认的)在这里我们可以看到事务的隔...原创 2019-04-14 23:41:07 · 261 阅读 · 0 评论 -
(四)mysql常用命令之日志文件
错误日志错误日志文件对mysql的启动,运行,关闭过程进行了记录。我们首先检索到log_error文件的位置,然后我们去查看这个日志文件的信息。原创 2019-04-15 11:13:20 · 598 阅读 · 0 评论 -
(八)mysql常用命令之py_innodb_page_info分析工具的使用
安装pythonapt install python下载 py_innodb_page_infogit clone https://github.com/happieme/py_innodb_page_info这样就下载成功了环境配置进入到py_innodb_page_info目录下创建一个ibds文件夹,存放需要需要分析的表空间文件测试a. pyt...原创 2019-04-18 14:15:29 · 2412 阅读 · 0 评论 -
(十)mysql常用命令之InnoDB行记录格式
概述我们知道InnoDB类型存储引擎的表都是有主键的(参考索引组织表),为了提高检索效率,会使用主键和表数据构建为一颗B+Tree,非叶子节点存储主键,叶子节点存储表数据,每个叶子节点是以页来存储的,页也就包含一个记录集合(表的多条记录),组成的这样一个数据结构也就是索引。然后我们下来来分析的就是这个索引中,叶子节点(页)中每条存储记录(行记录)的结构是怎样的?这里我举例一种格式(有多种格式...原创 2019-04-18 16:43:12 · 297 阅读 · 0 评论 -
(十一)mysql常用命令之InnoDB数据页结构
概要前面已经说过了行记录结构。我们知道在mysql的物理存储中,所有的数据都是存储在一个独立或者共享的表空间(也就是一个ibd文件)中的,而在这个文件中有一些逻辑上的划分;表空间->段->区->页->行记录,所以这次我们需要讲的就是在页中是个怎样的结构,然后怎么管理一个行记录集的。页结构图文件头,页头,文件结尾信息的大小是固定的分别为38,56,8个字节,这...原创 2019-04-19 13:30:26 · 294 阅读 · 0 评论 -
(三)MySQL锁问题---InnoDB(行锁演练)
MySQL锁问题–InnoDB(行锁演练)本片文章主要是针对上篇关于行锁的演练部分,如果没有阅读行锁理论部分,可以参考添加链接描述新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选...原创 2018-12-27 23:22:58 · 1510 阅读 · 1 评论