MySql高性能笔记 - (一)Mysql基础知识

MySql高性能笔记 - (一)Mysql基础知识

1. 读写锁:###

  1. 读锁 - 共享锁:互相不阻塞的。多个客户在同一刻可以同时读取同一个资源,而互不干扰。
  2. 写锁 - 排它锁:一个写锁会阻塞其他的写锁和读锁,保证只有一个用户能执行写操作,防止其他用户读取正在写入的同一资源。

2. 锁粒度:##

  1. 尽量只锁定要修改的部分数据。
  2. 表锁:开销小,它会锁定整张表。
  3. 行级锁:可以最大程度的支持并发处理,同时带来最大的锁开销。行级锁是在存储引擎层实现的,InnoDB和XtraDB实现了行级锁,

3. 死锁:

  1. 发生举例:
    • 第一条sql进行update A行数据,锁定了A行数据,尝试去执行update B行数据。
    • 第二条sql进行update B行数据,锁定了B行数据,尝试去执行update A行数据。
  2. 解决方案:
    • InnoDB会提前检测死锁循环依赖,返回错误。发生以后目前处理方法是,将持有最少行级排他锁的事务进行回滚。

4. 事务:

  1. 事务是一组原子性的sql语句,如果数据库成功地执行所有语句,那么久执行。如果一条语句崩溃,那就所有语句都不会执行。要么全执行,要么全失败。

  2. ACID:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)

    • 原子性:一个事务必须视为一个不可再分的最小工作单元。整个事务要么都提交成功,要么都失败回滚。
    • 一致性:数据库总是从一个一致性状态转换到另一个一致性状态。
    • 隔离性:一个事务在最终提交之前,对其他事务是不可见的。
    • 持久性:一旦事务提交,讲永久保存在数据库中。及时系统崩溃,也不会丢失。
  3. Mysql默认采用自动提交事务模式 autocommit。

     `show variables like 'autocommit';
     +---------------+-------+
     | Variable_name | Value |
     +---------------+-------+
     | autocommit    | ON    |
     +---------------+-------+
     1 行于数据集 (0.04 秒)
     `
    

5.隔离级别:

  1. Read Uncommitted(未提交读):事务中的修改,及时没有提交,对其他事务也是课件的。其他事务可以读取未提交的数据,成为脏读。一般很少使用。
  2. Read Committed(提交读)(不可重复读):事务的修改,在提交之前对其他事务都不可见。会导致A事务在修改一行数据之前,B 输入做过读取;A事务提交成功以后,B事务在读取引起不一样的结果。
  3. Repeatable Read(可重复读):解决在同一事务多次读取同样记录的结果一致,读取的数据在本事务内防止其他事务对其修改。但是防止不了此时做新增,引起幻读幻读问题。InnoDB和XtraDB通过版本并发控制MVCC,解决幻读问题。Mysql默认隔离级别。
  4. Serializable(可串行化):最高的隔离级别。通过强制的事务串行执行,避免幻读问题。在读取每一行数据上都加锁,导致大量的锁征用问题。

Innodb对四种类型都支持,脏读和串行化应用场景不多,读提交、重复读用的比较广泛。

隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
Read Uncommitted Yes Yes Yes No
Read Committed No Yes Yes No
Repeatable Read No No Yes No
Serializable No No No Yes

6. 版本并发控制MVCC

可以认为MVCC是行级锁的一个变种,但是他避免了很多情况的加锁操作,降低开销。实现了非阻塞的读操作,和写操作的锁定必要行。MVCC的实现是通过保存数据在某个时间点的快照实现的。分为乐观并发控制、悲观并发控制。

InnoDB的MVCC是通过在没行记录后面保存三个隐藏的列。

  • DB_TRX_ID:6byte的标识,每处理一个事务,就自动+1.
  • DB_ROLL_PTR:7byte的标识,一条undo log记录,记录操作前的ROW值。
  • DB_ROW_ID:6byte,若没有主键才会有。
  1. select操作:
    • 对于select的操作,只有同时满足如下2个条件才返回行记录
    • 行的修改版本号小于等于该事务版本号
    • 行的删除版本号要么没有被定义,要么大于事务版本号。
    • 如果行的修改或者删除版本号大于事务号,说明行是被修改事务后启动的事务修改或者删除的。在可重复读的隔离级别下,后开始的事务堆数据的影响不应该被先开始的事务看见,所以应该忽略后开始的事务的更新或者删除操作。
  2. insert操作:
    新插入的行,行的修改版本号为更新为该事务的事务号。
  3. update操作:
    更新行的时候,InnoDB会把原来行复制一份,并把当前的事务号作为改行的修改版本号。把原来的记录标记为已删除版本号是事务版本号。
  4. delete操作:
    对于删除,InnoDB直接把改行的删除版本号修改为当前事务号,相当于标记为删除,而不是物理的删除。真是的删除是在InnoDB的purge线程去做的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容