读《高性能MySQL》第一章--MySQL架构与历史
2016-05-08 21:58
573 查看
MySQL最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离。
1.MySQL逻辑架构
最上层服务:大多数给予网络的客户端/服务器的工具或者服务都有类似的架构,eg:连接处理、授权认证、安全
第二层架构:大多数MySQL核心服务在此,eg:查询优化、分析、优化、缓存一级所有的内置函数。
所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
第三层架构:包括存储引擎。存储引擎负责MySQL数据的存储和提取。
连接管理与安全性:每个客户端连接都会在服务器进程中拥有一个线程。
当客户端连接到MySQL服务器时,服务器需要对其进行认证。(user,password,证书),然后验证其权限。
优化与执行:MySQL会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,eg:重写查询、决定表的读取顺序,以及选择合适的索引等。
2.并发控制:只要有多个查询在同一时刻修改数据,就会产生并发控制问题。
读锁(共享锁)和写锁(排它锁)
锁策略:在锁的开销和数据的安全性之间寻求平衡。
表锁:锁定整张表->开销最小。
行级锁:最大程度的支持并发处理->开销最大(存储引擎层实现)。
3.事务:一组原子性的S
4000
QL查询,或者说一个独立的工作单元。->ACID
START TRANSACTION;->......->COMMIT;/ROLLBACK;
原子性:一个事务不可分割;
一致性:数据库总是从一个一致性的状态转换到另一个一致性的状态;
隔离性:一个事务所做的修改在提交之前,对于其他事物是不可见的;
持久性:一旦事务提交,则其所做的修改就会永久保存到数据库中。
隔离级别:每种存储引擎实现的隔离级别不尽相同。
READ UNCOMMITTED(未提交读):事务中的修改,即使没有提交,其他事务可见,脏读
READ COMMITTED(提交读):一个事务提交之前,仅自己可见。
REPEATABLE READ(重复读):MySQL默认级别
SERIALIZABLE(可串行化):强制事务串行执行,避免幻读。每一行数据加锁。。。不建议使用 (set TRANSACTION ISOLATION LEVEL ......)
死锁:两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源,导致恶性循环的现象。外部介入解除死锁->回滚部分或者整个事务。
事务日志:采用追加的方式。。。???
MySQL中的事务:InnoDB和NDB Cluster存储引擎。
MySQL默认采用自动提交(AUTOCOMMIT=1)模式。SET AUTOCOMMIT=0/1;
4.多版本并发控制(MVCC):通过保存数据在某个时间点的快照来实现的。
5.MySQL的存储引擎:注重MyISAM和InnoDB
1.MySQL逻辑架构
最上层服务:大多数给予网络的客户端/服务器的工具或者服务都有类似的架构,eg:连接处理、授权认证、安全
第二层架构:大多数MySQL核心服务在此,eg:查询优化、分析、优化、缓存一级所有的内置函数。
所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
第三层架构:包括存储引擎。存储引擎负责MySQL数据的存储和提取。
连接管理与安全性:每个客户端连接都会在服务器进程中拥有一个线程。
当客户端连接到MySQL服务器时,服务器需要对其进行认证。(user,password,证书),然后验证其权限。
优化与执行:MySQL会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,eg:重写查询、决定表的读取顺序,以及选择合适的索引等。
2.并发控制:只要有多个查询在同一时刻修改数据,就会产生并发控制问题。
读锁(共享锁)和写锁(排它锁)
锁策略:在锁的开销和数据的安全性之间寻求平衡。
表锁:锁定整张表->开销最小。
行级锁:最大程度的支持并发处理->开销最大(存储引擎层实现)。
3.事务:一组原子性的S
4000
QL查询,或者说一个独立的工作单元。->ACID
START TRANSACTION;->......->COMMIT;/ROLLBACK;
原子性:一个事务不可分割;
一致性:数据库总是从一个一致性的状态转换到另一个一致性的状态;
隔离性:一个事务所做的修改在提交之前,对于其他事物是不可见的;
持久性:一旦事务提交,则其所做的修改就会永久保存到数据库中。
隔离级别:每种存储引擎实现的隔离级别不尽相同。
READ UNCOMMITTED(未提交读):事务中的修改,即使没有提交,其他事务可见,脏读
READ COMMITTED(提交读):一个事务提交之前,仅自己可见。
REPEATABLE READ(重复读):MySQL默认级别
SERIALIZABLE(可串行化):强制事务串行执行,避免幻读。每一行数据加锁。。。不建议使用 (set TRANSACTION ISOLATION LEVEL ......)
死锁:两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源,导致恶性循环的现象。外部介入解除死锁->回滚部分或者整个事务。
事务日志:采用追加的方式。。。???
MySQL中的事务:InnoDB和NDB Cluster存储引擎。
MySQL默认采用自动提交(AUTOCOMMIT=1)模式。SET AUTOCOMMIT=0/1;
4.多版本并发控制(MVCC):通过保存数据在某个时间点的快照来实现的。
5.MySQL的存储引擎:注重MyISAM和InnoDB
相关文章推荐
- SQL Server 分组后取Top N
- zabbix3.0 监控mysql服务免用户名密码登录的问题故障处理详细过程
- 理解MySQL——架构与概念
- sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系
- 如何用tpcc-mysql工具进行oltp压力测试
- Sql Server插入数据并返回自增ID,@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT的区别
- django新建项目,连接mysql数据库
- 从库crash一直自动重启(mysqld got signal 11)问题解决
- [mysq]ERROR 2006 (HY000) at line xx: MySQL server has gone away 解决方法
- MySQL监控系统Lepus
- 使用DBOutputFormat把MapReduce产生的结果集导入到mysql中
- mysql性能监控指标
- zabbix监控mysql
- vsftpd+openssl+mysql实现sftp和ftp虚拟用户
- SQL Server 维护计划实现数据库备份(Step by Step)(转)
- 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)
- lepus3.7 天兔监控安装手册 CentOS6.5+mysql5.6
- PL/SQL Developer使用技巧 快捷键
- Mysql limit分页语句用法 SqlServer TOP子句 Oracle分页
- MySQL_Database_Show_Create_Drop