InnoDB

每日一面

◇◆丶佛笑我妖孽 提交于 2021-01-05 13:32:04
本问题参考自: https://www.zhihu.com/question/437916819/answer/1661679374, 解答为 个人原创 Key TakeAways InnoDB 引擎中 有三种 AutoIncrement 锁模式 : innodb_autoinc_lock_mode=0(traditional lock mode):获取表锁, 语句执行结束后释放 innodb_autoinc_lock_mode=1(consecutive lock mode,MySQL 8.0 之前默认 ):对于不确定插入数量的语句(例如 INSERT ... SELECT , REPLACE ... SELECT 和 LOAD DATA )和 innodb_autoinc_lock_mode=0 一样,其他的确定数量的语句在执行前先 批量获取 id , 之后再执行语句 。 innodb_autoinc_lock_mode=2(interleaved lock mode,MySQL 8.0+ 默认 ):采用 乐观锁 , CAS 更新计数器获取。 AutoIncrement 计数器在 MySQL 8.0 之前,存储在内存中,在 MySQL 8.0 之后,持久化存储到磁盘。通过每次更新写入 Redo Log,并在检查点刷入 innodb 引擎表中记录下来。 AutoIncrement

[初级]深入理解乐观锁与悲观锁

我们两清 提交于 2021-01-05 10:19:43
在 数据库的锁机制 中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。 乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。 无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcache、hibernate、tair等都有类似的概念。 针对于不同的业务场景,应该选用不同的并发控制方式。所以,不要把乐观并发控制和悲观并发控制狭义的理解为DBMS中的概念,更不要把他们和数据中提供的锁机制(行锁、表锁、排他锁、共享锁)混为一谈。其实,在DBMS中,悲观锁正是利用数据库本身提供的锁机制来实现的。 下面来分别学习一下悲观锁和乐观锁。 悲观锁 在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作都某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。 悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。 悲观锁,正如其名,它指的是对数据被外界

Is it possible to “catch” the invalid value in MySQL when I get a foreign key constraint error?

ⅰ亾dé卋堺 提交于 2021-01-05 05:39:45
问题 I'm importing a CSV file of ~150k rows into a MySQL (InnoDB) table. At some point during the import, there's a failure because of a foreign key constraint error. It shows which column the failure is occuring on: Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`db`.`table`, CONSTRAINT `fk` FOREIGN KEY (`otherTableId`) REFERENCES `otherTable` (`otherTableId`)) Is it possible to "catch" what that value is? I haven't tried anything yet, because I don't know

Is it possible to “catch” the invalid value in MySQL when I get a foreign key constraint error?

て烟熏妆下的殇ゞ 提交于 2021-01-05 05:33:48
问题 I'm importing a CSV file of ~150k rows into a MySQL (InnoDB) table. At some point during the import, there's a failure because of a foreign key constraint error. It shows which column the failure is occuring on: Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`db`.`table`, CONSTRAINT `fk` FOREIGN KEY (`otherTableId`) REFERENCES `otherTable` (`otherTableId`)) Is it possible to "catch" what that value is? I haven't tried anything yet, because I don't know

Is it possible to “catch” the invalid value in MySQL when I get a foreign key constraint error?

穿精又带淫゛_ 提交于 2021-01-05 05:33:45
问题 I'm importing a CSV file of ~150k rows into a MySQL (InnoDB) table. At some point during the import, there's a failure because of a foreign key constraint error. It shows which column the failure is occuring on: Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`db`.`table`, CONSTRAINT `fk` FOREIGN KEY (`otherTableId`) REFERENCES `otherTable` (`otherTableId`)) Is it possible to "catch" what that value is? I haven't tried anything yet, because I don't know

MySQL事务隔离级别以及脏读、幻读、不可重复读示例

♀尐吖头ヾ 提交于 2021-01-04 16:39:46
事务的隔离性 MySQL是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话(Session)。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就是对于服务器来说可能同时处理多个事务。当数据库上有多个事务同时执行的时候,就可能出现脏读(Dirty Read)、不可重复读(Non-Repeatable Read)、幻读(Phantom Read)的问题,为了解决这些问题,就有了 “隔离级别” 的概念。 理论上在某个事务对某个数据进行访问时,其他事务应该进行排队,当该事务提交之后,其他事务才可以继续访问这个数据。但一般情况下隔离得越严实,效率就会越低。因此很多时候,我们都要在隔离性和效率二者之间寻找一个平衡点。 事务并发执行遇到的问题 脏读(Dirty Read): 脏读是指一个事务读到了另一个未提交事务修改过的数据。 如小王的账户中有100的余额,接下来有两个事务对小王的账户进行访问。 会话A 会话B begin; update xxx set balance = balance+50 where client_no = ‘小王客户号’ ; begin; select balance from xxx where client_no = ‘小王客户号’ ;

CTO要我把这份MySQL规范贴在工位上!

送分小仙女□ 提交于 2021-01-04 08:42:55
“ 因为工作岗位的原因,负责制定了关于后端组数据库的规约规范,作为所有产品线的规范,历经几版的修改,最终形成下边的文本。 图片来自 Pexels 规范在整个后端执行也有大半年的时间,对于整个团队在开发阶段就减少不恰当的建表语句、错误 SQL、错误的索引有积极的意义,故分享出来给大家参考。 下边分为建表规约、SQL 规约、索引规约三个部分,每部分的每一条都有强制、建议两个级别,大家在参考时,根据自己公司的情况来权衡。 建表规约 【强制】 : ① 存储引擎必须使用 InnoDB 解读: InnoDB 支持事物、行级锁、并发性能更好,CPU 及内存缓存页优化使得资源利用率更高。 【强制】:②每张表必须设置一个主键 ID,且这个主键 ID 使用自增主键(在满足需要的情况下尽量短),除非在分库分表环境下 解读: 由于 InnoDB 组织数据的方式决定了需要有一个主键,而且若是这个主键 ID 是单调递增的可以有效提高插入的性能,避免过多的页分裂、减少表碎片提高空间的使用率。 而在分库分表环境下,则需要统一来分配各个表中的主键值,从而避免整个逻辑表中主键重复。 【强制】:③必须使用 utf8mb4 字符集 解读: 在 MySQL 中的 UTF-8 并非“真正的 UTF-8”,而 utf8mb4”才是真正的“UTF-8”。 【强制】:④数据库表、表字段必须加入中文注释 解读: 大家都别懒。 【强制

超全的数据库建表/SQL/索引规范,适合贴在工位上!

↘锁芯ラ 提交于 2021-01-04 08:36:29
背景 ​ 因为工作岗位的原因,负责制定了关于后端组数据库的规约规范,作为所有产品线的规范,历经几版的修改,最终形成下边的文本。 规范在整个后端执行也有大半年的时间,对于整个团队在开发阶段就减少不恰当的建表语句、错误SQL、错误的索引有积极的意义,故分享出来给大家参考。 下边分为 建表规约、SQL规约、索引规约 三个部分,每部分的每一条都有 强制、建议 两个级别,大家在参考时,根据自己公司的情况来权衡。 一、建表规约 【强制】(1) 存储引擎必须使用InnoDB 解读: InnoDB支持事物、行级锁、并发性能更好,CPU及内存缓存页优化使得资源利用率更高。 【强制】(2)每张表必须设置一个主键ID,且这个主键ID使用自增主键(在满足需要的情况下尽量短),除非在分库分表环境下 解读: 由于InnoDB组织数据的方式决定了需要有一个主键,而且若是这个主键ID是单调递增的可以有效提高插入的性能,避免过多的页分裂、减少表碎片提高空间的使用率。 而在分库分表环境下,则需要统一来分配各个表中的主键值,从而避免整个逻辑表中主键重复。 【强制】(3)必须使用utf8mb4字符集 解读: 在Mysql中的UTF-8并非“真正的UTF-8”,而utf8mb4”才是真正的“UTF-8”。 【强制】(4) 数据库表、表字段必须加入中文注释 解读: 大家都别懒。 【强制】(5) 库名、表名、字段名均小写

mysql,redis

蹲街弑〆低调 提交于 2021-01-04 07:36:30
1、搭建mysql服务器,并实现主主复制、半同步复制 存储引擎: 表类型:也称为“表类型”,表级别概念,不建议在同一个库中的表上使用不同的ENGINE; CREATE TABLE ... ENGINE[=]STORAGE_ENGINE_NAME ... SHOW TABLE STATUS 常见的存储引擎: MyISAM, Aria, InnoDB, MRG_MYISAM, CSV, BLACKHOLE, MEMORY, PERFORMANCE_SCHEMA, ARCHIVE, FEDERATED InnoDB:InnoBase Percona-XtraDB, Supports transactions, row-level locking, and foreign keys 数据存储于“表空间(table space)"中: (1) 所有数据库中的所有类型为InnoDB的表的数据和索引存储于同一个表空间中; 表空间文件:datadir定义的目录中 文件:ibdata1, ibdata2, ... (2) innodb_file_per_table=ON,意味着每表使用单独的表空间文件; 每表的数据文件(数据和索引,存储于数据库目录)存储于自己专用的表空间文件中,并存储于数据库目录下: tbl_name.ibd 表结构的定义:在数据库目录,tbl_name.frm 事务型存储引擎

Percona-Tookit工具包之pt-sift

风格不统一 提交于 2021-01-03 23:44:49
Preface We've got a lot of files related with system performance which generated by pt-stalk in directory "/var/lib/pt-stalk" in my last blog.We can use "cat","more","less" to print the contents of them but it is really not convenient to do so. Introduce pt-sift is the right tool helping us to retrieve diagnostic data easily.There're poor options of the tool to learn.Therefor,it's easy enough to sift the contents we need with no time. Procedure Usage 1 pt-sift FILE|PREFIX|DIRECTORY Examples Print the output of the files generated by pt-stalk. 1 [root@zlm2 09 : 50 : 42 /var/lib/pt- stalk] 2 #pt