![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
assasinSteven
本人暂时没啥说的......
请鼓掌......
展开
-
死锁案例 七
一、前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二、案例分析2.1 业务场景业务开发同学想同步数据,他们的逻辑是通过 update 更新操作,如果更新记录返回的 affect_rows为0,然后就调用 insert 语句进行插入初始化。如果插入失败则再进行更新操作,多个会话并发操作的情况下就出现死锁。2.2 环境说明MySQL 5.6.24 事务隔离原创 2020-10-09 09:41:03 · 476 阅读 · 0 评论 -
死锁案例 六
一、前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二、案例分析2.1 环境说明MySQL 5.6.24 事务隔离级别为 RR create table tx ( id int not null primary key auto_increment , c1 int not null default 0, c2...原创 2020-10-09 09:40:10 · 278 阅读 · 0 评论 -
为什么选择B+树作为数据库索引结构?
背景首先,来谈谈B树。为什么要使用B树?我们需要明白以下两个事实:【事实1】不同容量的存储器,访问速度差异悬殊。以磁盘和内存为例,访问磁盘的时间大概是ms级的,访问内存的时间大概是ns级的。有个形象的比喻,若一次内存访问需要1秒,则一次外存访问需要1天。所以,现在的存储系统,都是分级组织的。最常用的数据尽可能放在更高层、更小的存储器中,只有在当前层找不到,才向更低层、更大的存储器中寻找。这也就解释了,当处理大规模数据的时候(指无法将数据一次性存入内存),算法的实际运行时间,往往取决于数据在不原创 2020-09-29 17:57:58 · 167 阅读 · 0 评论 -
死锁案例 五
一、前言死锁其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发朋友都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。本文是源于生产过程中一个死锁案例。二、背景知识官方文档[1]中表述:"REPLACE is done like an INSERT if there is no collision on a unique key. Otherwise, an exclusive next-key lock is placed o原创 2020-09-17 08:49:07 · 202 阅读 · 0 评论 -
死锁案例 四
一、前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。本文介绍一例三个并发insert 导致的死锁,根本原因还是在于insert 唯一键申请插入意向锁这个特殊的GAP锁。其实称呼插入意向锁 为 Insert Intention Gap Lock 更为合理。二、案例分析2.1 环境准备Percona server 5.6 RR模式 CREATE TABLE `..原创 2020-09-17 08:47:13 · 127 阅读 · 0 评论 -
死锁案例 三
一、前言死锁其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发朋友都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二、背景知识2.1 insert 锁机制在分析死锁案例之前,我们先学习一下背景知识 insert 语句的加锁策略。我们先来看看官方定义:An insert intention lock is a type of gap lock set by INSERT operations prior to row in原创 2020-09-17 08:46:35 · 114 阅读 · 0 评论 -
死锁案例 二
一 前言 死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。本文源于我们的生产案例:并发申请gap锁导致的死锁案例,与之前的 死锁案例一不同,本案例是因为RR模式下两个事务中的sql可以获取同一个gap锁,导致对方事务的insert 相互等待,导致死锁的。二 案例分析2.1测试环境准备Percona server 5.6.24 事务隔离级别为RR CREATE TABLE `t...原创 2020-09-17 08:45:59 · 118 阅读 · 0 评论 -
死锁案例 一
一、前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二、案例分析2.1 环境说明MySQL 5.6 事务隔离级别为 RR。 CREATE TABLE `ty` ( `id`int(11) NOT NULL AUTO_INCREMENT, `a`int(11) DEFAULT NULL, `b`int(11) D...原创 2020-09-17 08:45:12 · 196 阅读 · 0 评论 -
死锁 二
一、前言每个MySQL DBA和开发大概率都会遇到死锁问题,本文是自己对死锁相关知识总结,介绍死锁是什么,MySQL如何检测死锁/处理死锁,死锁的案例,以及如何避免死锁。二、死锁死锁是并发系统中常见的问题,同样也会出现在数据库系统的并发读写请求场景中。当两个及以上的事务,双方都在等待对方释放已经持有的锁或因为加锁顺序不一致造成循环等待锁资源,就会出现"死锁"。举例来说A 事务持有X1锁 ,申请X2锁,B 事务持有X2锁,申请X1 锁。A和B 事务持有锁并且申请对方持有的锁进入循环等待,.原创 2020-09-17 08:44:34 · 118 阅读 · 0 评论 -
死锁日志 一
一 前言 工欲善其事必先利其器,前面分析了很多死锁案例,并没有详细的介绍如何通过死锁日志来诊断死锁的成因。本文将介绍如何读懂死锁日志,尽可能的获取信息来辅助我们解决死锁问题。二 日志分析2.1 场景为了更好的学习死锁日志,我们需要提前了解死锁场景MySQL 5.6 事务隔离级别为RR CREATE TABLE `ty`( `id`int(11)NOTNULL AUTO_INCREMENT, `a`int(11)DEFAULT NULL, ...原创 2020-09-17 08:43:25 · 223 阅读 · 0 评论 -
MySQL是怎么处理并发操作的?
问题: 为什么需要锁? MySQL 中锁分类? 什么是事务? 事务的隔离级别 MySQL 是怎么实现事务机制的? MVCC 机制 总结 为什么需要锁?相信大家都比较熟悉电商系统中库存管理的场景,对于日常活动促销、618、双 11 等场景,会在规定时间内对商品进行促销活动,假设现在有一款 HHKB 机械键盘要参与促销活动,数据库中准备了 10 件,促销活动开始时,多位买家开始争抢,每卖出一件商品,库存减 1,直到卖完,那么怎么能保证商品转载 2020-08-29 11:20:17 · 1152 阅读 · 0 评论 -
使用Xenon实现MySQL高可用集群
使用Xenon实现MySQL高可用集群1、Xenon 介绍https://github.com/radondb/xenon#VIP就是对外提供服务的IP,比如jdbc配置就是写这个VIPxenon 架构介绍,每个MySQL 节点安装了一个agent ,agent的作用:ping 一下本来MySQL是否存活,然后把本地的gtid 获取出来,写入到local index ,看各节点的local index的gtid 谁大,谁大谁做作为主库。每个agent 都有一个心跳信息,...翻译 2020-06-23 19:03:54 · 3023 阅读 · 1 评论 -
数据量太大下,如何做到毫秒级响应?
我们的痛点 系统架构要求 勘探 MySQL Sharding 和MHA的缺点什么是 TiDB?我们如何使用 TiDB 我们架构中的 TiDB TiDB 的性能指标 我们学到了什么 更快地导入数据 减少查询延迟 评估资源 对 TiDB 3.0 的期望下一步是什么知乎,在古典中文中意...原创 2020-01-03 10:35:31 · 1237 阅读 · 0 评论 -
php往mysql中插入10万数据,你是如何实现,又如何优化
假如说我有这样一个表,我想往这个表里面插入大量数据CREATETABLEIFNOTEXISTS`user_info`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'自增主键',`name`varchar(255)NOTNULLdefault''COMMENT'姓名',`age`int(11)NOTNUL...原创 2020-01-03 10:36:43 · 842 阅读 · 0 评论 -
商品SKU系统
如何设计库存,哪些库存呢?分类属性的库存:不同颜色 不同尺码的属性的库存,这些就体现了商品的SKU,至于什么是SKU,自己去百度一下哈,所以首先我们就要设计商品Sku表以及关系表了总体思路1.商品关联商品类别,商品类别关联多个商品属性,其中指定某几个商品属性为SKU关键字段。例如,服装类别的颜色、尺码属性。2.多个SKU商品属性值组合生成唯一的商品SKUID。例如,红色、L=100...转载 2020-01-04 13:40:36 · 1108 阅读 · 0 评论 -
Mysql主从同步的实现原理与配置实战
1、什么是mysql主从同步?当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。2、主从同步有什么好处? 水平扩展数据库的负载能力。 容错,高可用。Failover(失败切换)/High Availability 数据备份。 3、主从同步的原理是什么?首先我们来了解master-slave的体系结构。如下图:...原创 2020-01-05 14:16:40 · 105 阅读 · 0 评论 -
MySQL 对于千万级的大表要怎么优化?
首先采用Mysql存储千亿级的数据,确实是一项非常大的挑战。Mysql单表确实可以存储10亿级的数据,只是这个时候性能非常差,项目中大量的实验证明,Mysql单表容量在500万左右,性能处于最佳状态。针对大表的优化,主要是通过数据库分库分表来解决,目前比较普遍的方案有三个:分区,分库分表,NoSql/NewSql。实际项目中,这三种方案是结合的,目前绝大部分系统的核心数据都是以RDBMS存储为...原创 2020-01-05 14:16:54 · 233 阅读 · 0 评论 -
数据库优化方案中写入数据量增加时,如何实现分库分表?
我们知道在高并发下数据库的一种优化方案:读写分离,它就是依靠主从复制的技术使得数据库实现了数据复制为多份,增强了抵抗大量并发读请求的能力,提升了数据库的查询性能的同时,也提升了数据的安全性,当某一个数据库节点,无论是主库还是从库发生故障时,我们还有其他的节点中存储着全量的数据,保证数据不会丢失。此时,你的电商系统的架构图变成了下面这样:这时,公司 CEO 突然传来一个好消息,运营推广持续带来了...原创 2020-01-06 14:23:33 · 1442 阅读 · 0 评论 -
如何用MySQL中的正则表达式过滤掉配送单?
需求最近在用mysql做一个配送单的筛选的需求,比如一个订单表里的订单号有多种,比如以A,B,C,D,F开头的订单,我要同时过滤掉A,B与C的订单,那我要如何做呢?这里你们有其他方法的话,不妨留言哈!方法很简单,你可别想到用like哈!这里就会用到mysql的正则表达式REGEXP去匹配。sql如下:SELECTorder_id,ware_id,`status`,upda...原创 2020-01-06 14:23:47 · 107 阅读 · 0 评论 -
MySQL事务隔离级别
好久没碰数据库了,只是想起自己当时在搞数据库的时候在事务隔离级别这块老是卡,似懂非懂的。现在想把这块整理出来,尽量用最简洁的语言描述出来,供新人参考。首先创建一个表 account。创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB)。表的结构如下:然后往表中插入两条数据,插入后结果如下:为了说明问题,我们打开两个控制台分别进行登录来...原创 2020-01-06 14:25:07 · 104 阅读 · 0 评论 -
对比分析PDO和Mysqli
php操作mysql数据库,大家都知道有三种驱动,mysql mysqli pdo,其中mysql在php7之后被废除了。不是本文重点。咱现在来分析一下mysqli和PDO的区别,下面一张表用来说明他们的区别连接方式//PDO$pdo=newPDO("mysql:host=localhost;dbname=database",'username','passwor...原创 2019-12-30 16:24:06 · 182 阅读 · 0 评论 -
Mysql主从同步的实现原理与配置
1、什么是mysql主从同步?当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。2、主从同步有什么好处? 水平扩展数据库的负载能力。 容错,高可用。Failover(失败切换)/High Availability 数据备份。 3、主从同步的原理是什么?首先我们来了解master-slave的体系结构。如下图:...原创 2019-12-29 00:31:47 · 211 阅读 · 0 评论 -
MySQL锁
数据库锁知识不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下),即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的。因为这些锁数据库隐式帮我们加了,只会在某些特定的场景下才需要手动加锁。对于UPDATE、DELETE、INSERT语句,InnoDB会自动给涉及数据集加排他锁(X) MyISAM在执行查询语句SE...原创 2019-12-27 10:00:34 · 185 阅读 · 0 评论 -
在数据库设计和表创建时,避免挖坑的考虑
在数据库设计和表创建时,我们首要考虑的就是性能咯,不然的话,在后期数据更新到千亿级别时,再来优化,那成本就加大了。或者说你给后期的开发人员挖了一个大坑吧!考虑到性能,那你在设计的时候会考虑到哪些问题了,下面将来详细的介绍。设计表时要注意:1 表字段避免null值出现,null值很难查询优化且占用额外的索引空间,推荐默认数字0代替null。2 尽量使用INT而非BIGINT,如果非负...原创 2019-12-27 09:55:31 · 319 阅读 · 0 评论 -
MySQL 对于千万级的大表要怎么优化?
首先采用Mysql存储千亿级的数据,确实是一项非常大的挑战。Mysql单表确实可以存储10亿级的数据,只是这个时候性能非常差,项目中大量的实验证明,Mysql单表容量在500万左右,性能处于最佳状态。针对大表的优化,主要是通过数据库分库分表来解决,目前比较普遍的方案有三个:分区,分库分表,NoSql/NewSql。实际项目中,这三种方案是结合的,目前绝大部分系统的核心数据都是以RDBMS存储为...原创 2019-12-27 09:54:04 · 145 阅读 · 0 评论 -
【总结】 面试中,经常考到的MySQL题有哪些呢?
1. 如何设计一个高并发的系统① 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引的优化② 使用缓存,尽量减少数据库 IO③ 分布式数据库、分布式缓存④ 服务器的负载均衡2. 锁的优化策略① 读写分离② 分段加锁③ 减少锁持有的时间④ 多个线程尽量以相同的顺序去获取资源等等,这些都不是绝对原则,都要根据情况,比如不能将锁的粒度过于细化,不然可...原创 2019-05-10 10:51:24 · 188 阅读 · 0 评论 -
Mysql语句性能优化52条
1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。3,应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索...原创 2019-05-10 14:41:49 · 138 阅读 · 0 评论 -
MySQL 四种隔离级别
什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。另外,这篇分布式事务不理解?一次给你讲清楚!推荐大家阅读。事务的 A...原创 2019-05-10 14:44:21 · 91 阅读 · 0 评论 -
MySQL优化原理
说起MySQL的查询优化,相信大家积累一堆技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。MySQL 逻辑架构如果能在头脑中构建一幅MySQL...原创 2019-05-14 22:38:16 · 162 阅读 · 0 评论 -
面试中那些经典的数据库问题总结
一、为什么用自增列作为主键1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是...转载 2019-05-16 12:18:20 · 235 阅读 · 0 评论 -
PHP+Redis实现延迟任务 实现自动取消订单,自动完成订单
简单定时任务解决方案:使用redis的keyspace notifications(键失效后通知事件) 需要注意此功能是在redis 2.8版本以后推出的,因此你服务器上的reids最少要是2.8版本以上;(A)业务场景:1、当一个业务触发以后需要启动一个定时任务,在指定时间内再去执行一个任务(如自动取消订单,自动完成订单等功能)2、redis的keyspace notifica...原创 2019-05-16 12:23:13 · 1939 阅读 · 1 评论 -
MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎0. 查看 MySQL 支持的存储引擎可以在 mysql 客户端中,使用 show engines;命令可以查看MySQL支持的引擎:mysql> show engines;+--------------------+---------+--------------------------------------------------...原创 2019-06-25 19:32:10 · 115 阅读 · 0 评论 -
24 个数据库面试问题
一、为什么用自增列作为主键1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,...翻译 2019-07-09 16:05:43 · 162 阅读 · 0 评论 -
怎么保证缓存与数据库的双写一致性?
分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么如何解决一致性问题?最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新的时候,先更新数据库,然后再删除缓存。为什么...原创 2019-08-16 20:14:21 · 91 阅读 · 0 评论 -
攻破MySQL性能瓶颈必知的调优技巧
一、前言MySQL调优对于很多程序员而言,都是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。今天给大家讲解MySQL的优化实战,助你高薪之路顺畅!图 - MySQL查询过程二、优化的哲学注意...原创 2019-08-16 20:21:11 · 189 阅读 · 0 评论 -
优化秒杀抢购时的超发
高并发下的数据安全我们知道在多线程写入同一个文件的时候,会存现“线程安全”的问题(多个线程同时运行同一段代码,如果每次运行结果和单线程运行的结果是一样的,结果和预期相同,就是线程安全的)。如果是MySQL数据库,可以使用它自带的锁机制很好的解决问题,但是,在大规模并发的场景中,是不推荐使用MySQL的。秒杀和抢购的场景中,还有另外一个问题,就是“超发”,如果在这方面控制不慎,会产生发...原创 2019-08-27 19:33:14 · 213 阅读 · 3 评论 -
MySQL实现主从复制过程详解
首先安装俩数据库,一个作为主库,一个作为从库,安装步骤不做说明.主从复制配置过程1、主从服务器分别作以下操作: 1.1、版本一致 1.2、初始化表,并在后台启动mysql 1.3、修改root的密码2、修改主服务器master: #vi /etc/my.cnf [mysqld] log-bin=mysql-bin //[必须]启用二进制日...原创 2019-05-14 22:49:11 · 115 阅读 · 0 评论