搬马

导航

 

MySQL存储引擎:

  表类型:

    CREATE TABLE ... ENGINE=

  InnoDB:

    处理大量的短期事务;

    数据存储在“表空间”中;

      (1) 所有InnoDB表的数据和索引放置于同一个表空间中;

            表空间文件:datadir定义的目录下

               数据文件:ibdate1,ibdata2,....

      (2) 每个表单独使用一个表空间存储表的数据和索引;

        Innodb_file_per_table=ON

        数据文件(数据和索引):tb1_name.ibd

        表格式定义:tab1_name.frm

    基于MVCC来支持高并发,支持所有的四个隔离级别,默认级别为REPEATABLE READ;间隙锁防止幻读;

    使用聚集索引

    支持“自适应hash索引”

    锁粒度:行级锁

 

    MariaDB (XtraDB (percona))

  特性总结:

    数据存储:表空间

    并发:MVCC,间隙锁

    索引:聚集索引、辅助索引

    性能:预计操作、自适应hash、插入缓存区

    备份:支持热备(xtrabacup)

 

  MyISAM:

    支持全文索引(FULLTEXT index)、压缩、空间函数(GIS);但不支持事务,且为表级锁;

    崩溃后无法安全恢复

    适用场景:只读(或者写较少)、表较小(可以接受长时间进行修复操作)

      Aria:crash-safe

    文件:

      tb1_name.frm:表格式定义

      tb1_name.MYD:数据文件

      tb1_name.MYI:索引文件

    特性总结:

      加锁和并发:表级别

      修复:手工或自动修复、但可能丢失数据

      索引:非聚集索引

      延迟更新索引键

      压缩表

    行格式:dynamic,fixed,compressed,compact,redundent

 

  其它的存储引擎:

    CSV:将普通的CSV(字段通过逗号分隔)作为MySQL表使用;

    MRG_MYISAM:将多个MyISAM表合并成为一个虚拟表;

    BLACKHOLE:类似于/dev/null,不真正存储任何数据;

    MEMORY:所有数据都保存于内存中,内存表;支持hash索引;表级锁;

      临时表

    PERFORMANCE_SCHEMA:伪存储引擎;其内部数据只有在mysql启动起来才会存在,关闭消失

    ARCHIVE:仅支持SELECT和INSERT操作;支持行级锁和专用缓存区;

    FEDERATED:用于访问其它远程MYSQL服务器一个代理,它通过创建一个到远程MYSQL服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取;

      在MariaDB上实现是FederatedX

  

  MariaDB支持的其它存储引擎:

    OQGraph

    SphinxSE

    TokuDB

    Cassandra

    CONNECT

    SQUENCE

并发控制:

  锁:

    读锁:共享锁

    写锁:独占锁

  锁粒度:

    表级锁

    行级锁

  锁策略:在锁粒度及数据安全性寻求的平衡机制;

    每种存储引擎都可以自行实现其锁策略和锁粒度;

    MySQL在服务器级也实现了锁,表级锁;用户可显示请求;

      (1) LOCK TABLES
        tbl_name [[AS] alias] lock_type
        [, tbl_name [[AS] alias] lock_type] ...

      lock_type:
        READ [LOCAL]
        | [LOW_PRIORITY] WRITE

        UNLOCK TABLES

      (2) FLUSH TABLES tb_name[,...] [WITH READ LOCK]

      (3) SELECT clase [FOR UPDATE] [WITH READ LOCK]

 

MySQL事务:

  事务:一组原子性的SQL查询,或者说一个独立工作单元。

    事务日志

  ACID测试:

    A:atomicity,原子性:整个事务中的所有操作要么全部成功执行,要么全部失败后回滚;

    C:consistency,一致性:数据库总是从一个一致性状态转换为另一个一致性状态;

    I:Isolation,隔离性:一个事务所做出的操作在提交 之前,是不能为其它所见;隔离有多种隔离级别;

    D:durability,持久性:一旦事务提交,其所做的修改会永久保存于数据库中;

  事务:

    启动事务:START TRANSACTION

      ....

      ....

    结束事务:

      (1) COMMIT:提交

      (2) ROLLBACK:回滚

    注意:只有事务型存储引擎方能支持此类操作;

    建议:显示请求和提交事务,而不要使用“自动提交”功能;

      autocommit={1|0}

    事务支持savepoint    

      SAVEPOINT identifier
      ROLLBACK [WORK] TO [SAVEPOINT] identifier
      RELEASE SAVEPOINT identifier

    事务隔离级别:

      READ UNCOMMITED(读未提交)

      READ COMMITED(读提交)

      REPEATABLE READ(可重读)

      SERIALIZABILE(可串行化)

      可能存在问题:

        脏读;

        不可重复读;

        幻读;

        加锁读;

      tx_isolation:服务器变量, 默认为REPEATABLE-READ;可在SESSION级进行悠;

      SET tx_isolation=' '

        READ-UNCOMMITED

        READ-COMMITED

        REPEATABLE-READ

        SERIALIZABLE

      MVCC:多版本并发控制

    死锁:

      两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源的状态;

    事务日志:

      事务日志的写入类型为“追加”,因此其操作为“顺序IO”;此日志通常被称为“预定式日志(write ahead logging)”;

        innodb_log_file_size

        innodb_log_files_in_group

        innodb_log_group_home_dir

  

  

posted on 2019-09-16 12:49  搬马  阅读(218)  评论(0编辑  收藏  举报