MySql性能相关的一些概念(性能tip0)
题首:这是最近读《高性能MySqL 第二版》记录下来的东西~
#读锁(共享锁)、写锁(排他锁):读锁是共享的,互不阻塞,读取同一资源互不影响;写锁排他,一个写锁会阻塞其他的读写操作。
#锁定对象的粒度:表锁和行锁。
表锁:整个表加锁,当写操作时,加写锁,资源访问排他。当没有写时,加读锁,读锁互不冲突。写锁比读锁有高优先级。开销较小。
行级锁:对一行加锁,开销大,支持最大并发处理。
#事务:ACID
A原子性:一个事务是一个原子不可分的工作单元,内部的工作不会被部分执行,要么全部执行,要么根本不执行
C一致性:数据库从一种一致状态转到另一种一致状态,事务执行过程中的数据改变不会影响数据库数据。
I 隔离性:某个事务的结果只有在事务完成后才对其他事务可见。
D持久性:一个事务提交后的结果改变将是持久的,不会马上消失。
#MVCC:多版本并发控制
#几个存储引擎:
MyISAM:加表锁,在select查询时可以在同一张表完成插入(并发插入),可以基于BLOB和TEXT的前500字符进行相关索引。
InnoDB:事务引擎,适合处理大量短期事务,基于聚簇索引,不压缩索引
Memory:基于堆的,内存存储,支持哈希索引
Archive:只支持insert和select,不支持索引,缓冲了数据写操作,插入时使用zlib算法压缩,比MyISAM磁盘IO消耗少,所有 的select查询执行全表扫描,适合logging,支持行级锁。
存储引擎 | MySqL版本 | 事务 | 锁粒度 | 主要应用 | 忌用 |
MyISAM | 全部 | 不支持 | 支持并发插入的表锁 | select,insert,高负载 | 读写并重的场合 |
MyISAM Merge | 全部 | 不支持 | 支持并发插入的表锁 | 分段归档,数据仓库 | 许多全局查找 |
Memory(Heap) | 全部 | 不支持 | 表锁 | 中间计算,静态数据查找 | 大型数据集,持久性存储 |
InnoDB | 全部 | 支持 | 支持MVCC的行级锁 | 事务处理 | 无 |
Falcon | 6.0 | 支持 | 支持MVCC的行级锁 | 事务处理 | 无 |
Archive | 4.1 | 支持 | 支持MVCC的行级锁 | 日志记录,聚合分析 | 需要随机读取、更新、删除 |
CSV | 4.1 | 不支持 | 表锁 | 日志记录,大规模加载外部数据 | 需要随机读取、索引 |
Blackhole | 4.1 | 支持 | 支持MVCC的行级锁 | 日志记录或同步归档 | 除非有特别目的,否则不适合任何场合 |
Federated | 5.0 | N/A | N/A | 分布式数据源 | 除非有特别目的,否则不适合任何场合 |
NDB Cluster | 5.0 | 支持 | 行级锁 | 高可靠性 | 大部分典型应用 |
PBXT | 5.0 | 支持 | 支持MVCC的行级锁 | 事务处理,日志记录 | 需要聚集索引 |
SolidDB | 5.0 | 支持 | 支持MVCC的行级锁 | 事务处理 | 无 |
Maria |