Mysql-存储引擎问题

问题一: 说一说你了解的 Mysql 存储引擎及其适用的场景???

  • mysql 常用的引擎

    • myisam: 不支持事务, mysql5.6 之前默认的引擎, 最常用的非事务存储引擎

      • 表方式存储, 无序, 表级锁, 读写操作相互堵塞; 不适合高并发的场景, 适合读操作远大于写操作

      • 支持 Btree, 空间, 全文索引

      • check table myIsam; 检查 myisam 表; 查看是否出现损坏

      • repair table myIsam; 这样的表索引表会出现问题, 这样可以修复

      • myisampack -b -f myIsam; 压缩表文件

    • CSV: 以 CSV 格式存储的非事务型存储引擎, general_log 表就是使用的这种存储引擎方式

      • 所有的列都不能为 null; 不支持索引

      应用场景: 作为数据交换的中间表使用,

    • Archive: 不支持事务, 只允许查询和新增数据而不允许修改的非事务型存储引擎

      • 表数据使用 zlib 压缩, 节约存储空间, 比 myisam75%, 比 InnoDB25%

      • 只支持 InsertSelect

      • 只可以在自增的 ID 上新建索引, 不能在其他列上增加索引

      日志和数据采集类的应用, 数据归档存储,

    • Memory: 一种读写快速;存储在内存中的非事务性的存储引擎

      • 所有字段长度固定

      • 支持 Btree, 和 Hash 索引

      用于缓存字典映射表, 缓存周期性分析数据

    • InnoDB: 一种常用的事务型存储引擎, 5.6 之后是默认的引擎

      • 支持 ACID 操作

      • 数据按主键聚集存储, 主键的大小会影响到索引的查询效率

      • 支持行级锁及MVCC

      • 支持 BTree 和自适应 Hash 索引

      • 支持全文和空间索引 5.7 以上支持

      大多数 OLTP 场景

    • NDB: mysql 集群所使用的内存型事务存储的引擎

      • 支持行级锁, 支持高可用集群, 支持 Ttree 索引

      需要数据完全同步的高可用场景

问题二: 在什么情况下,InnoDB 无法在线修改表结构???

  • InnoDB 不支持在线修改表结构的场景

    • 添加全文索引, create fulltext index name on table(colum);

    • 添加空间索引; alter table geom add spatial index(g);

    • 删除主键: alter table table_name drop primary key;

    • 增加自增列: alter table table_name add column id int auto_increment not null primary key;

    • 修改列类型: alter table table_name change c1 c2 new_type

    • 修改表字符集: alter table tab_name character set = 'character_name';

问题三: 在无法进行在线修改表 结构的情况下, 要如何操作???

  • 在线 DDL 存在的问题

    • 有部分语句不支持在线 DDL

    • 长时间的 DDL 操作会引起严重的主从延迟

    • 无法对 DDL 操作进行资源限制

  • 如何更加安全的执行 DDL ??

    • pt-online-schema-change [options] DSN; 使用这个工具, 使用一个新表来覆盖原先的表;

      • 使用: pt-online-schema-change --alter='add column column_name timestamp' --execute D=database, t=table_name, u=root, p=xxxx

问题四: InnoDB 是如何实现事务 ???

  • 事务: 一组要执行的 sql; 要么都成功, 要么失败; 这组 sql 可是一条; 也可以是多条;

    • 原子性(A): 一个事务中的所有的操作, 要么全部完成, 要么不完成, 不会结束在中间某个环节

    • 一致性(C): 在事务开始之前和事务结束之后, 数据库的完整性没有被破坏

    • 隔离性(I): 事务的隔离性要求每个读写事务的对象与其他事务的操作对象能相互分离, 即该事务提交之前对其他事务都不可见

    • 持久性(D): 事务一旦提交了, 其结果就是永久性的, 就算发生了故障事故, 数据库也能将数据恢复;

  • 四个特性的实现方式:

    • 原子性: 使用回滚日志(Undo log): 用于记录数据修改前的状态

    • 一致性: 重作日志(Redo log): 用于记录数据修改后的状态

    • 隔离性: : 用于资源隔离; 共享锁排他锁, 相互互斥

    • 持久性: Redo log + Undo log 实现

问题五: InnoDB 读操作是否会阻塞写操作 ???

  • 查询需要对资源会添加 共享锁(S)

  • 数据修改需要对资源加排它锁 (X)

  • 排它锁和排它锁是不兼容的; 但是共享锁和共享锁是兼容的

  • 客户端的 update 不会阻塞 select 操作;

MVCC(多版本并发控制)实现:

-通过 Undo logRedo log 来实现;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,410评论 1 8
  • MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在...
    时待吾阅读 1,542评论 0 4
  • msyql -uroot -p123456 msyqladmin -uroot -p123456 GPG keys...
    nhsf阅读 1,345评论 0 0
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,724评论 0 30
  • 雨声渐渐地住了,窗帘后隐隐地透进清光来。推开窗户一看,呀!凉云散了,树叶上的残滴,映着月儿,好似萤光千点,...
    吉珊艳阅读 275评论 0 1