您的位置:首页 > 数据库 > MySQL

高性能MySql(一)

2015-11-03 17:22 555 查看
1、mysql逻辑架构:

(1)连接/线程处理;

(2)查询缓存、解析器、优化器:包括查询解析、分析、优化、缓存、日期函数、存储过程、触发器、视图都在这一层实现;

(3)存储引擎(MyISAM、InnoDB、XtraDB等)



2、处理并发问题:读写锁,也叫共享锁、排它锁,读锁是共享的,或者说是相互不阻塞的;写锁是排他的,一个写锁会阻塞其他的写锁和读锁;

3、锁粒度与锁策略:锁粒度是让锁定的对象更有选择性。锁策略是在锁的开销和数据安全性上寻求平衡(表锁、行级锁);

表锁:是mysql中最基本的锁策略,并且是开销最小的策略,会锁定整张表。服务器会为alter table之类的语句使用表锁,而忽略存储引擎的锁机制;

行级锁:支持最大的并发,但也带来最大的开销,比如InnoDB和XtraDB实现了行级锁,行级锁只在存储引擎层实现;

4、事物隔离级别:

READ UNCOMMITED:未提交读(脏读);

READ COMMITED:提交读(不可重复读),两次执行同样的查询可能会得到不一样的结果;

REPEATABLE READ:可重复读(幻读),mysql默认隔离级别,所谓幻读指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行;

SERIALIZABLE(可串行化),只能串行执行事务;



5、多版本并发控制(MVCC):是行级锁的一个变种,但在很多情况下避免了加锁操作,开销更低。是通过保存数据在某个时间点的快照来实现的。

InnoDB的MVCC是通过在每行记录后面保存两个隐藏的列来实现的,一个记录创建时间,一个记录过期时间,这个时间指的是系统版本号,每增加一条记录系统版本号就递增;



6、InnoDB存储引擎:

(1)支持自动崩溃恢复;

(2)支持热备份;

(3)采用MVCC支持高并发,其默认隔离级别是REPEATABLE READ,并且通过间隙锁(next-key locking)策略防止幻读的出现。间隙锁使得InnoD不仅仅锁定查询设计的行,还会对索引中的间隙进行锁定,以防止幻影行的插入。

(4)基于聚簇索引建立,对主键查询有很高的性能,他的二级索引中必须包含主键列;

(5)从磁盘读取数据采用可预测性预读,能够自动在内存中创建hash索引以加速读操作的自适应哈希索引,以及能够加速插入操作的插入缓冲区。

7、MyISAM存储引擎:

(1)mysql5.1及以前的默认存储引擎;

(2)特性包括全文索引、压缩、空间函数(GIS)等,但不支持事务和行级锁,崩溃后无法完全恢复。

(3)存储:MyISAM会将表存储在两个文件中(数据文件和索引文件),分别以.MYD和.MYI为扩展名;

(4)特性:1)加锁(表锁)与并发(读取时会对需要读到的表加共享锁,写入时则加排它锁,但是在表有读取查询的同时,也可以往表中插入新的纪录);

2)修复:可以手工或者自动执行检查和修复操作,但这里说的修复和事务恢复以及崩溃恢复是不同的概念。(造成数据丢失,非常慢),通过CHECK TABLE tablename检查表的错误,通过REPAIR TABLE tablename 进行修复;

3)延迟更新索引键:创建MyISAM表的时候,如果指定了DELAY_KEY_WRITE选项,在每次修改执行完成是,不会立刻将修改的索引数据写入磁盘,而是会写入内存中的键缓冲区(in-memory key buffer),只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入磁盘。

8、其他内建的存储引擎:

Archive引擎:只支持INSERT和SELECT操作,支持行级锁和专用的缓冲区,所以可以支持高并发的插入;

Blackhole引擎;

CSV引擎:CSV文件的写入与读出,可以作为一种数据交换的机制;

Federated引擎;

Memory引擎:用于查找(lookup)或者映射(mapping)表,用于缓存周期性聚合数据的结果,用于保存数据分析中产生的中间数据。支持hash索引,查找速度非常快,数据保存在内存中,重启数据丢失,但保留表结构。PS:临时表是指使用create temporary table语句创建的表,可以使用任何存储引擎;

Mergey引擎;

NDB引擎;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: