
数据库-mysql
文章平均质量分 85
数据库相关文章都在此栏中
吴法刚
从现在我下了一个决定把自己学习过的东西都写成文章发表出来,大家共同学习共同探讨,知识无边界。。欢迎交流技术
展开
-
第 18 章_主从复制
在实际工作中,我们常常将Redis作为缓存与MySQL配合来使用,当有请求的时候,首先会从缓存中进行查找,如果存在就直接取出。如果不存在再访问数据库,这样就提升了读取的效率,也减少了对后端数据库的访问压力。Redis的缓存架构是高并发架构中非常重要的一环。此外,一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是采用数据库集群的方案,做主从架构、进行读写分离,这样同样可以提升数据库的并发处理能力。原创 2023-02-21 08:50:36 · 202 阅读 · 0 评论 -
第 17 章_其他数据库日志
中继日志只在主从服务器架构的从服务器上存在。从服务器为了与主服务器保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。然后,从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据同步。搭建好主从服务器之后,中继日志默认会保存在从服务器的数据目录下。从服务器名 - relay-bin.序号。从服务器名 - relay-bin.index,用来定位当前正在使用的中继日志。原创 2023-02-21 08:50:07 · 232 阅读 · 0 评论 -
第 16 章_多版本并发控制
在MVCC机制中,多个事务对同一个行记录进行更新会产生多个历史快照,这些历史快照保存在Undo Log里。如果一个事务想要查询这个行记录,需要读取哪个版本的行记录呢?这时就需要用到ReadView了,它帮我们解决了行的可见性问题。ReadView就是事务在使用MVCC机制进行快照读操作时产生的读视图。当事务启动时,会生成数据库系统当前的一个快照,InnoDB为每个事务构造了一个数组,用来记录并维护系统当前活跃事务的ID(“活跃"指的就是,启动了但还没提交)。这里介绍了MVCC在。原创 2023-02-21 08:48:53 · 246 阅读 · 0 评论 -
MySQL innoDB 间隙锁产生的死锁问题
线上经常偶发死锁问题,当时处理一张表,也没有联表处理,但是有两个mq入口,并且消息体存在一样的情况,频率还不是很低,这么一个背景,我非常容易怀疑到,两个消息同时近到这一个事务里面导致的,但是是偶发的,又模拟不出来什么场景会导致死锁,只能利用自己有限的知识分析业务代码简化成下面也就是说先update ,select , insert 这么一个顺序表中存在dm_code ,erp 唯一索引。原创 2023-02-04 18:55:30 · 948 阅读 · 0 评论 -
第 15 章_锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(比如订单、金额等),我们就需要保证这个数据在任何时刻最多只有一个线程在访问,保证数据的完整性和一致性。在开发过程中加锁是为了保证数据的一致性,这个思想在数据库领域中同样很重要。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时锁机制。原创 2023-02-04 18:49:59 · 562 阅读 · 0 评论 -
第14章_MySQL事务日志 redolog 和 undolog
这个和磁盘的扇区有关,机械磁盘默认的扇区就是512字节,如果你要写入的数据大于512字节,那么要写入的扇区肯定不止一个,这时就要涉及到盘片的转动,找到下一个扇区,假设现在需要写入两个扇区A和B,如果扇区A写入成功,而扇区B写入失败,那么就会出现。我们知道mysql默认一页的大小是16k。对于更新主键的操作,会先把原来的数据deletemark标识打开,这时并没有真正的删除数据,真正的删除会交给清理线程去判断,然后在后面插入一条新的数据,新的数据也会产生undo log,并且undo log的序号会递增。原创 2022-12-24 20:11:23 · 913 阅读 · 0 评论 -
第13章_事务基础知识
命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。能看出在 MySQL 中,只有InnoDB 是支持事务的。原创 2022-12-24 18:43:10 · 145 阅读 · 0 评论 -
第12章_数据库其它调优策略
节省系统资源响应的速度。原创 2022-12-24 18:04:19 · 888 阅读 · 0 评论 -
第11章_数据库的设计规范(理论了解)
范式的定义会使用到主键和候选键,数据库中的键(Key)由一个或者多个属性组成。超键候选键外键主属性非主属通常,我们也将候选键称之为“码”,把主键也称为“主码”。因为键可能是由多个属性组成的,针对单个属性,我们还可以用主属性和非主属性来进行区分。原创 2022-12-24 15:10:09 · 1000 阅读 · 0 评论 -
第10章_索引优化与查询优化
理解方式一:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。**理解方式二:**非聚簇复合索引的一种形式,它包括在查询里的SELECT、JOIN和WHERE子句用到的所有列(即建索引的字段正好是覆盖查询条件中所涉及的字段)。简单说就是,索引列+主键包含SELECT 到 FROM之间查询的列。原创 2022-12-24 15:08:44 · 1200 阅读 · 2 评论 -
mysql优化之 mysql Explain 使用详解
mysql优化之 mysql Explain 使用详解使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。➤ 通过EXPLAIN,我们可以分析出以下结果:表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询- 使用方式explain .........原创 2022-12-06 08:15:32 · 554 阅读 · 1 评论 -
高级_09.性能分析工具的使用
当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。整个流程划分成了和两个部分。字母 S 的部分代表观察(会使用相应的分析工具),字母 A 代表的部分是行动(对应分析可以采取的行动)。我们可以通过观察了解数据库整体的运行状态,通过性能分析工具可以让我们了解执行慢的SQL都有哪些,查看具体的SQL执行计划,甚至是SQL执行中的每一步的成本代价,这样才能定位问题所在,找到了问题,再采取相应的行动。详细解释一下这张图:首先在S1部分,我们需要观察服务器的状态是否存在周期性的波动。如果,原创 2022-12-06 08:14:38 · 260 阅读 · 0 评论 -
第 08 章_索引的创建与设计原则
MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。从上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。按,索引可以分为 2 种:聚簇索引和非聚簇索引。按照进行划分,分成单列索引和联合索引。普通索引唯一性索引主键索引单列索引多列(组合、联合)索引最左前缀全文索引补充:空间索引使用可以设置索引为。空间索引只能建立在空间数据类型上,这样可以提高系统获取空间数据的效率。MySQL中的空间数据类型包括GEONETRY、POINT、LINESTRIN原创 2022-12-04 23:13:09 · 245 阅读 · 0 评论 -
第07章_InnoDB数据存储结构
每一个页都有一个单独的页号,就跟你的身份证号码一样,InnoDB通过页号可以唯一定位一个页。InnoDB都是以页为单位存放数据的,如果数据分散到多个不连续的页中存储的话需要把这些页关联起来,FIL_PAGE_PREV和FIL_PAGE_NEXT就分别代表本页的上一个和下一个页的页号。这样通过建立一个双向链表把许许多多的页就都串联起来了,保证这些页之间不需要是物理上的连续,而是逻辑上的连续。代表当前页面的校验和(checksum)。什么是校验和?就是对于一个很长的字节串来说,我们会通过某种算法来计算一个比原创 2022-12-04 21:30:01 · 160 阅读 · 0 评论 -
第06章_索引的数据结构
从图中可以看出,我们插入了一条主键值为320的用户记录之后需要两个新的数据页:现在因为存储目录项记录的页不止一个,所以如果我们想根据主键值查找一条用户记录大致需要3个步骤,以查找主键值为 20 的记录为例:一个B+树的节点其实可以分成好多层,规定最下边的那层,也就是存放我们用户记录的那层为第 0 层,之后依次往上加。之前我们做了一个非常极端的假设:存放用户记录的页 最多存放3条记录 ,存放目录项记录的页 最多存放4条记录 。其实真实环境中一个页存放的记录数量是非常大的,假设所有存放用户记录的叶子节点代表原创 2022-12-03 21:58:21 · 107 阅读 · 0 评论 -
第05章_存储引擎
使用案例如下。原创 2022-12-02 09:33:18 · 136 阅读 · 0 评论 -
第 04 章_逻辑架构
以某些系统函数举例,可能同样的函数的两次调用会产生不一样的结果,比如函数NOW,每次调用都会产生最新的当前时间,如果在一个查询请求中调用了这个函数,那即使查询请求的文本信息都一样,那不同时间的两次查询也应该得到不同的结果,如果在第一次查询时就缓存了,那第二次查询的时候直接使用第一次查询的结果就是错误的!缓冲池的作用就是提升I/o效率,而我们进行读取数据的时候存在一个“局部性原理”,也就是说我们使用了一些数据,大概率还会使用它周围的一些数据,因此采用“预读”的机制提前加载,可以减少未来可能的磁盘I/О操作。原创 2022-12-02 09:32:58 · 189 阅读 · 0 评论 -
第03章_用户与权限管理
确认权限时,MySQL首先 检查user表 ,如果指定的权限没有在user表中被授予,那么MySQL就会继续 检查db表 ,db表是下一安全层级,其中的权限限定于数据库层级,在该层级的SELECT权限允许用户查看指定数据库的所有表中的数据;如果在该层级没有找到限定的权限,则MySQL继续 检查tables_priv表 以及 columns_priv表 ,如果所有权限表都检查完毕,但还是没有找到允许的权限操作,MySQL将 返回错误信息 ,用户请求的操作不能执行,操作失败。取消用户的某些权限。原创 2022-11-16 08:23:02 · 457 阅读 · 0 评论 -
第02章_MySQL的数据目录
MySQL 系统自带的数据库,这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,可以用来 监控 MySQL 服务的各类性能指标。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息。MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。MySQL数据库文件的存放路径:/var/lib/mysql/原创 2022-11-16 08:21:37 · 210 阅读 · 0 评论 -
mysql查看死锁
Mysql 查询是否存在锁表有多种方式,这里只介绍一种最常用的。在发生死锁时,这几种方式都可以查询到和当前死锁相关的信息。解除死锁如果需要解除死锁,有一种最简单粗暴的方式,那就是找到进程id之后,直接干掉。查看当前正在进行中的进程杀掉进程对应的进程 id验证(kill后再看是否还有锁)......原创 2022-07-01 21:37:56 · 43866 阅读 · 0 评论 -
sql 时间格式
仅仅学习记录sql的日期格式化转化# 2. MySQL 数据库中日期与时间函数 FROM_UNIXTIME(), UNIX_TIME() …原创 2022-04-07 19:53:39 · 315 阅读 · 0 评论 -
sql 中的left join 的坑请大家绕着走
背景:最近工作中一直和sql 打交道,由于平时用的少,也不怎么写多表联查的情况,但是最近项目中存在大量的多表联查的sql,让自己走了一些小坑A left join B 中未必A就是小表,或者说A未必是1:N中的 NA表namecode张三001B表corecode23001234001select * from a left join B on a.code = b.code结果 不是一条数据而是2条数据这个比较好理解,自己当原创 2022-03-27 17:20:18 · 843 阅读 · 0 评论 -
java代码备份mysql数据库
生成环境的数据库我们需要不断的进行备份,不然服务器出现故障,会是灾难性的直接添加我的代码package com.hrp.task;import com.alibaba.fastjson.JSON;import com.base.exception.SysException;import com.base.util.UUIDLong;import com.hrp.sys.dao.SysLogMapper;import com.hrp.sys.service.BackUpService;imp原创 2020-09-20 20:46:32 · 479 阅读 · 0 评论 -
告别慢SQL,如何去写一手好SQL ?
MySQL性能最大数据量最大数据量抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。博主曾经操作过超过4亿...原创 2020-03-07 16:43:52 · 185 阅读 · 0 评论 -
关于max()/min()和group by 的坑
写项目写了 5年一直使用对象性数据,最近又开始使用关系型数据,又回到sql上面的书写了 ,但是昨天遇到 group by 和 max一起使用的问题实现功能:目前两张表 一个历史记录表 一个对历史记录的审核表 我需要根据历史记录表中的每一个pointer 字段 group by pointer 后取最新的一条记录 ?此时我发现historyId 根本不是最大的...原创 2019-09-11 09:27:02 · 6218 阅读 · 0 评论