InnoDB

面试官:你怎么连MySQL死锁产生原因都不知道?

99封情书 提交于 2020-10-09 11:17:04
一、Mysql 锁类型和加锁分析 1、锁类型介绍: MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 算法: next KeyLocks锁,同时锁住记录(数据),并且锁住记录前面的Gap Gap锁,不锁记录,仅仅记录前面的Gap Recordlock锁(锁数据,不锁Gap) 所以其实 Next-KeyLocks=Gap锁+ Recordlock锁 2、加锁分析: http:// hedengcheng.com/? p=771 二、死锁产生原因和示例 1、产生原因: 所谓死锁<DeadLock>:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB。 死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。 那么对应的解决死锁问题的关键就是:让不同的session加锁有次序 2、产生示例: 案例一 需求

面试官:你怎么连MySQL死锁产生原因都不知道?

一曲冷凌霜 提交于 2020-10-09 11:16:34
一、Mysql 锁类型和加锁分析 1、锁类型介绍: MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 算法: next KeyLocks锁,同时锁住记录(数据),并且锁住记录前面的Gap Gap锁,不锁记录,仅仅记录前面的Gap Recordlock锁(锁数据,不锁Gap) 所以其实 Next-KeyLocks=Gap锁+ Recordlock锁 2、加锁分析: http:// hedengcheng.com/? p=771 二、死锁产生原因和示例 1、产生原因: 所谓死锁<DeadLock>:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB。 死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。 那么对应的解决死锁问题的关键就是:让不同的session加锁有次序 2、产生示例: 案例一 需求

mysql性能优化(二)

谁说胖子不能爱 提交于 2020-10-09 03:05:47
mysql 性能优化(二) query cache 的限制 所有的子查询中的外部查询 sql 语句,不会被 cache (缓存) 在 procedure , function 以及 trigger 中的 query 不被 cache 包含其他很多每次执行可能得到不一样的结果函数 query 不能被 cache 在 /etc/my.cnf 文件,在 [mysqld] 下面添加 query_cache_size=256M query_cache_type=1( 开启 ) 重启后生效 6.max_connect_error 是一个 mysql 中与安全有关的计数器值,负责阻止过多的尝试失败的客户端,以防止暴力破解。修改配置文件 /etc/my.cnf [mysqld] 下添加 max_connect_errors= 次数 重启服务生效 7.sort_buffer_size 每个进行线程分配大小缓冲区,增加这值加速 order by 或 group by 操作 Sort_Buffer_Size 是一个 connection 级参数,在每个 connection ( session )第一次需要使用这个 buffer 的时候,一次性分配设置的内存。 Sort_Buffer_Size 并不是越大越好,由于是 connection 级的参数,过大的设置 + 高并发可能会耗尽系统内存资源。例如:

Mysql 8.0版本开始,不允许创建 MyISAM 分区表

一个人想着一个人 提交于 2020-10-09 00:49:02
从MySQL 8.0版本开始,就不允许创建 MyISAM 分区表了,只允许创建已经实现了本地分区策略的引擎。 到目前为止,只有InnoDB和NDB这两个引擎支持本地分区策略。 【1】实际测试 (1)数据库版本号 # 获取版本号 SELECT VERSION(); # 8.0.12 (2)建表(InnoDB引擎) CREATE TABLE `t_innodb` ( `ftime` DATETIME NOT NULL, `c` INT(11) DEFAULT NULL, KEY (`ftime`) ) ENGINE=INNODB DEFAULT CHARSET=latin1 PARTITION BY RANGE (YEAR(ftime)) (PARTITION p_2017 VALUES LESS THAN (2017) ENGINE = INNODB, PARTITION p_2018 VALUES LESS THAN (2018) ENGINE = INNODB, PARTITION p_2019 VALUES LESS THAN (2019) ENGINE = INNODB, PARTITION p_others VALUES LESS THAN MAXVALUE ENGINE = INNODB); 创建成功。 (3)建表(MyiSAM引擎) CREATE TABLE `t

腾讯T3大牛总结的500页MySQL实战笔记意外爆火,P8看了直呼内行

大兔子大兔子 提交于 2020-10-09 00:20:13
前几天逛知乎的时候看到一个话题: MySQL没前途了吗? 最近几年,似乎总有一种声音在说,MySQL可能不太行了,原因无非是这么几条,MySQL功能不如PG强大,原生没有分库分表不如TIDB,OLAP性能差。 可事实真的如此吗? 首先,MySQL的官网是这么介绍自己的: MySQL是世界上最受欢迎的数据库! 其次,我们直接看下数据库引擎对数据库管理系统的排名按其受欢迎程度排列,看看MySQL到底行不行!(网址:https://db-engines.com/en/ranking_trend/relational+dbms) 从上图可以明显的看出,MySQL紧随它“老爹”Oracle排名第二,而且MySQL 8.0无论在功能还是性能(整体上),都是目前最好的MySQL版本。 特别是在性能优化相关以及管理、复制、安全方面的功能提升,直呼真香! MySQL作为一款免费的关系型数据库(开源),对于企业成本来说,无疑是 真香!真香!真香! 其他的先不多说了,直接上干货吧,跟着腾讯T3大牛来深度的学习一下MySQL。 目录 由于文档内容过多,共计有500页,因此为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的可以按照图片中获取到 部分内容展示 深入浅出索引(上) 索引的常见模型 InnoDB 的索引模型 索引维护 小结 深入浅出索引(下) 覆盖索引 最左前缀原则 索引下推

mysql 8.0 安装教程

大憨熊 提交于 2020-10-08 04:25:12
官网下载 官方安装教程(win) windows 压缩包方式安装 压缩包安装官方教程 官方步骤: 1. Extract the main archive to the desired install directory 解压安装包到自定义安装目录 2. Optional: also extract the debug-test archive if you plan to execute the MySQL benchmark and test suite 可选项:若想执行mysql基准和测试套件,可解压官网下载的调试测试包 3. Create an option file 创建可选配置文件:定义mysql服务器启动参数 完整配置 配置文件优先级:my.ini > my.cnf 配置文件放置目录:msyql 安装根目录即可 [mysqld] # mysql安装目录 # set basedir to your installation path basedir=E:/mysql # mysql数组目录 # set datadir to the location of your data directory datadir=E:/mydata/data 4. Choose a MySQL server type mysqld: mysql正常工作模式 mysqld-debug:

MySQL基础及sql语句

别说谁变了你拦得住时间么 提交于 2020-10-08 01:01:40
MySQL基础 MySQL 数据库开源免费,能够跨平台,支持分布式,性能也不错,可以和 PHP、Java 等 Web 开发语言完美配合,非常适合中小型企业作为 Web 数据库(网站数据库),其中数据存储在硬盘中 一、关键字: 关键字: 某字段或者多个字段能够唯一标识一条记录 主关键字: 某一个关键字能够唯一标识一条记录 候选关键字: 除了主键之外的其他关键字 外键: 值为其他表的主键值,可以为空但不能重复(一对一关系不能重复,一对多关系可以重复) 二、范式: 遵守级别越高,冗余度越低 第一范式: 字段不能再分(必须有) 第二范式:必须有主键(不必要一定要遵守) 第三范式:除了主键之外不能再有候选关键字(不必要一定要遵守)(不常用) 第四范式(不用) 三、关系: 一对一:两张表 一对多:两张表 多对多:需要使用至少三张表实现,只有外键的表叫做中间表或连接表 四、字段类型: 1、字符型: char:20个字符的空间,无论写了几个字符,有一些浪费空间,但是实际开发中使用的是char,运行更快 varchar:仅占输入的字符大小的空间,是动态的,但是会占用CPU计算时间,运行慢;但是在保存的数据特别大时,必须使用varchar 2、整型: int:4个字节 bigint:8个字节 tinyint:1个字节 smallint:2个字节 mediumint:3个字节 3、浮点型: double

Uber为什么放弃Postgres选择迁移到MySQL?

*爱你&永不变心* 提交于 2020-10-07 19:00:01
作者 | Evan Klitzke 译者 | 无明 策划 | 小智 Uber 的早期架构包含了一个用 Python 开发的单体后端应用程序,这个应用程序使用 Postgres 作为数据存储。从那个时候开始,Uber 的架构已经发生了巨大变化,变成了微服务,并采用新的数据平台模型。具体地说,之前使用 Postgres 的地方,现在改用 Schemaless,一种构建在 MySQL 之上的新型数据库分片层。在本文中,我们将探讨 Postgres 的一些缺点,并解释为什么我们要在 MySQL 之上构建 Schemaless 和其他后端服务。 1 Postgres 架构 我们遭遇了 Postgres 的诸多限制: 低效的写入操作 低效的数据复制 数据损坏问题 糟糕的副本 MVCC 支持 难以升级到新版本 我们将通过分析 Postgres 的表和索引在磁盘上的表示方式来探究以上这些限制,并将其与 MySQL 的 InnoDB 存储引擎进行比较。请注意,我们的分析主要是基于我们对较旧的 Postgres 9.2 版本系列的经验。据我们所知,在本文中讨论的内部架构在较新的 Postgres 发行版中并未发生显著变化,并且至少自 Postgres 8.3 发行版(现在已近 10 岁)以来,9.2 版本的基本设计都没有发生显著变化。 磁盘表示 一个关系型数据库必须能够执行一些关键任务: 提供插入

四万字的 MySQL 详细入门学习(附带练习题)

核能气质少年 提交于 2020-10-07 10:41:54
写在前面:本博客是根据动力节点课程所写的笔记,原视频链接: https://www.bilibili.com/video/BV1fx411X7BD?p=1 关于这篇博客,可能内容比较基础,很多细节的东西没讲到,后面我还会继续跟进这篇博客,做好修改。 目录 一、数据库简介 二、安装MySQL 三、DB、DBMS、SQL的关系 四、表 五、SQL语句的分类 六、导入初始化数据 七、查看表结构以及表中的数据 八、MySQL的常用命令 九、查询简介及简单查询 十、条件查询 十一、排序查询 十二、分组查询 十三、去重查询 十四、连接查询 十五、子查询 十六、联表查询 十七、分页查询 十八、表的创建 十九、插入数据 二十、修改数据 二十一、删除数据 二十二、修改表结构 二十三、约束 二十四、存储引擎 二十五、事务 二十六、索引 二十七、视图 二十八、数据库的导入导出 二十九、设计三范式 三十、作业题 一、数据库简介 回到目录 在学习数据库之前,我们回忆一下在IO流中所学习的一个序列化流和反序列化流,可以向文件中存入对象,也可以从文件中取出对象,这无疑是存储和取出数据的一种形式。 我们学习数据库,也是为了操作数据,其包括对数据的增加、删除、修改、和查询,那你就会问了,既然二者功能相同,那为什么不能直接用序列化流呢? 那肯定是因为【数据库管理系统】来操作数据更加简单啊

MySQL之数据库结构设计

本小妞迷上赌 提交于 2020-10-07 07:22:00
本文主要介绍了在数据库结构设计过程中需要考虑的一些问题,来源于以往工作、项目经历以及网络资料等,如果有不准确的地方,欢迎指正交流。 在数据库结构的设计过程中,务必注意以下两点: 减少数据冗余,节约数据库存储空间; 尽量避免在数据维护过程中出现更新、插入、删除异常。 一般我们按照如下步骤开始: 需求分析 :全面了解产品设计的存储需求,保证数据的安全性和完整性 逻辑设计 :设计数据的逻辑存储结构,处理数据实体之间的逻辑关系,解决数据冗余和数据维护异常 物理设计 :根据具体所使用数据库的特点进行表结构设计 维护优化 :根据实际情况,对索引、存储结构等进行优化 其中 1、2 是确立大方向;3 是对 1、2 的具体实施(本文会介绍一些注意事项和建议,详见下文);4 是后期的迭代优化。 <!-- more --> 1. 如何进行物理设计 1.1. 定义数据库、表、字段的命名规范 可读性 表意性 长名 1.2. 选择合适的存储引擎 1.2.0. 如何选择 首选 InnoDB ,适用于大部分场景 参考因素:事务、备份、崩溃恢复、各存储引擎的专有特性(详见下文) 注意: 尽量不要混合使用多种存储引擎 1.2.1. MyISAM v5.5 之前默认 文件组成 .frm 表结构 .MYD 数据 .MYI 索引 特性 表级锁 基本的表损坏修复,非事务性,会造成数据丢失 支持「全文索引」 支持数据压缩(