存储引擎及读写锁实现并发访问控制

2018-10-13  本文已影响18人  任总

一、存储引擎:

表类型:也称为“表类型”,表级别概念,不建议在同一个库中的表上使用不同的ENGINE;

1、引擎管理命令

格式:CREATE TABLE ... ENGINE[=]STORAGE_ENGINE_NAME ...
显示信息:SHOW TABLE STATUS

2、常见的存储引擎种类:

MyISAM, Aria, InnoDB, MRG_MYISAM, CSV, BLACKHOLE, MEMORY, PERFORMANCE_SCHEMA, ARCHIVE, FEDERATED

InnoDB:InnoBase
Percona-XtraDB, Supports transactions, row-level locking, and foreign keys

3、数据和索引存储

格式一:数据和索引存储于同一个表空间中

所有数据库中的所有类型为InnoDB的表的数据和索引存储于同一个表空间中;
表空间文件:datadir定义的目录中
文件:ibdata1, ibdata2, ...

格式二:数据和索引存储于各自专用的表空间中

innodb_file_per_table=ON,意味着每表使用单独的表空间文件;
每表的数据文件(数据和索引,存储于数据库目录)存储于自己专用的表空间文件中,并存储于数据库目录下: tbl_name.ibd

4、表结构的定义:

在数据库目录,tbl_name.frm

二、Innodb事务型存储引擎

特点:

总结:

数据存储:表空间;
并发:MVCC,间隙锁,行级锁;
索引:聚集索引、辅助索引;
性能:预读操作、内存数据缓冲、内存索引缓存、自适应Hash索引、插入操作缓存区;
备份:支持热备;

三、MyISAM存储引擎:

特点:

适用场景:

只读或读多写少的场景、较小的表(以保证崩溃后恢复的时间较短);

文件:

每个表有三个文件,存储于数据库目录中
tbl_name.frm:表格式定义;
tbl_name.MYD:数据文件;
tbl_name.MYI:索引文件;

总结:

加锁和并发:表级锁;
修复:手动或自动修复、但可能会丢失数据;
索引:非聚集索引;
延迟索引更新;
表压缩;

行格式:

DEFAULT默认格式
DYNAMIC行长度
FIXED固定行长度
COMPRESSED行中的数据做压缩存储
REDUNDANT对行中的数据做冗余存储
COMPACT记住存储格式

五、其它的存储引擎:

MariaDB额外支持很多种存储引擎:

OQGraph、SphinxSE、TokuDB、Cassandra、CONNECT、SQUENCE、...

搜索引擎:

java语言研发的lucene,
c++语言研发的 sphinx
lucene:Solr, ElasticSearch

查看引擎状态信息

SHOW ENGINE INNODB STATUS;
SHOW ENGINE MyISAM STATUS;

六、数据库的并发控制

数据库管理中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。

1、锁:Lock

2、锁类型 :

读锁:共享锁,可被多个读操作共享;
写锁:排它锁,独占锁;

3、锁粒度:

表锁:在表级别施加锁,并发性较低;
行锁:在行级别施加锁,并发性较高,但维持锁状态的成本较大;

4、锁策略:

在锁粒度及数据安全性之间寻求一种平衡机制;

存储引擎:级别以及何时施加或释放锁由存储引擎自行决定;
MySQL Server:表级别,可自行决定,也允许显式请求;

5、锁类别:

显式锁的使用:

(1) LOCK TABLES锁表

LOCK TABLES  tbl_name  read|write, tbl_name read|write, ...

UNLOCK TABLES解锁

(2) FLUSH TABLES刷写所有缓存中的表到硬盘中

FLUSH TABLES tbl_name,... [WITH READ LOCK];
#温备语句,刷写所有缓存中的表到硬盘中,并读锁
FLUSH TABLES WITH READ LOCK;

UNLOCK TABLES;解锁

(3) SELECT cluase
[FOR UPDATE | LOCK IN SHARE MODE]

七、事务:

1、事务日志:
#查询日志相关设置
SHOW GLOBAL VARIABLES LIKE 'innodb%log%';

innodb_log_files_in_group 一个组文件数量
innodb_log_group_home_dir 当前数据目录
innodb_log_file_size 事物日志文件存储空间
innodb_mirrored_log_groups 镜像事物组

2、ACID测试:

自动提交:单语句事务

mysql> SELECT @@autocommit;
+------------------------+
| @@autocommit |
+------------------------+
|            1               |
+------------------------+

mysql> SET @@session.autocommit=0;
手动控制事务:

启动:START TRANSACTION
提交:COMMIT
回滚:ROLLBACK

事务支持savepoints:事物保存点

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

3、事务隔离级别:

#查看当前级别
mysql> SELECT @@session.tx_isolation;
+----------------------------------+
| @@session.tx_isolation |
+----------------------------------+
| REPEATABLE-READ         |
+----------------------------------+
#设定级别为读未提交
mysql> SET @@session.tx_isolation='READ-UNCOMMITTED' ;
#启动 
mysql> START TRANSACTION;

查看InnoDB存储引擎的状态信息:
SHOW ENGINE innodb STATUS;

上一篇 下一篇

猜你喜欢

热点阅读