一、MySQL的基础架构:
第一层:主要是连接处理,授权,安全等。
第二层:MySQL的核心服务功能都在这里,包括查询解析,分析,优化,缓存,内置函数,存储过程,触发器,视图等。
第三层:存储引擎,负责MySQL的数据存储和提取。
执行过程:
1、 每个客户端链接服务器产生一个线程,这个查询只会在这个单独的线程中执行。
当客户端(应用或者PHP) 连接到MySQL服务器时,服务器对其进行用户名、密码、主机名等认证。
2、 认证成功后,MySQL解析SQL语句,创建解析书,然后对其进行各种优化,包括缓存查询,选择合适的索引等。
3、 解析,优化完成后 从存储引擎中存取数据。
MySQL对应基础架构的顺序执行的。
二、并发控制
多个读或写的操作在同一个时刻执行,就是并发执行。
并发执行会产生两个操作同时操作一条数据,比如两个用户在读一条数据,一个用户在修改这个数据,就会发生数据的不确定性,因此要进行并发控制,需要锁的机制。
1、 读写锁:
读锁也叫共享锁,互相不阻塞的,多个客户在同一时刻读同一条数据,是互不干扰的。
写锁也叫排它锁,一个写锁会阻塞其他的写锁和读锁,防止其他用户在同一时刻,读取和改写同一个数据。
2、 锁的颗粒度:
简单来讲是锁的精准度,只对修改的数据行进行精准的锁定,锁定的数据量越小,系统的并发越高。
但是加锁,解锁,检查锁,也会增加系统开销,如果不是进行数据的存储,而是进行锁的操作,系统的性能可能会因此受到影响。
大多数商业数据库,都是在表上加上行级锁,在大并发的情况下,提高系统配置,来提高并发的性能。
3、 锁策略:
一般的锁策略分为表锁和行锁,也有的是叶锁,在这里只讨论最常用的表和行锁。
表锁:
表锁是MySQL中最基本的锁策略,并且是开销最小的,它会锁住整张表,一个用户在对表进行写操作(插入,修改,删除)前,先所得写锁,这会阻塞其他用户的读写操作,因为它是锁住整个表,写锁比读锁有更高的优先级,一个写锁会被插入到读锁队列前面。
行级锁:
行级锁可以大程度的支持并发处理(但是也带来了最大的锁开销),行级锁是锁住某一行数据,比如一个用户在修改一条数据,只是把这一行数据锁定,其他的用户不能读写,但是对其他的数据是可以读写的。
表锁:开销小,并发低。MySima引擎是典型的表锁。
行锁:开销大,并发高。 innoDB引擎是典型的行锁。
三、事务
事务是数据库的高级特性,主要是ACID特性,具体相关概念可以百度一下。
最经典的例子就是银行卡转账,两个操作,一个是在减操作,一个是加操作,
必须保证在一个事务中完成,如果有一个未完成,要取消全部的操作。