高性能MySQL–MySQL架构与历史

  •   
  • 977
  • mysql
  • 0
  • dodobook
  • 2017/03/03

无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制的问题。在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题。这两种类型的锁通常被称为共享锁(shared lock)和排它锁(exclusive lock),也叫读锁(read lock)和写锁(write lock).读锁是共享的,或者说是相互不阻塞的。多个客户在同一时刻同时读取同一个资源,而互不干扰。写锁则是排他的,也就是说一个写锁会阻塞其他的写锁和读锁,这是出于安全策略的考虑。

高性能MySQL

表锁(table lock)是MySQL中最基本的锁策略,并且是开销最小的策略。行级锁(row lock)可以最大程度的支持并发处理(同时也带来了最大的锁开销)。

死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源从而导致恶性循环的现象。当多个事务试图以不同的顺序锁定资源时,就可能产生死锁。多个事务同时锁定同一个资源时,也会产生死锁。

//事务1
START TRANSACTION;
UPDATE user SET age = 66 WHERE id = 1;
UPDATE user SET age = 77 WHERE id = 2;
COMMIT;

//事务2
START TRANSACTION;
UPDATE user SET age = 88 WHERE id = 2;
UPDATE user SET age = 99 WHERE id = 1;
COMMIT;

//如果凑巧两个事务都执行了第一条update语句,更新了一行数据,同时也锁定了改行数据。
//接着每个事务都尝试去执行第二条update语句,却发现改行已被对方锁定。
//然后两个事务都等待对方释放锁,同时又持有对方需要的锁,则陷入死循环。
//除非有外部的因素接入才可能解除死锁。

//为了解决这种问题,数据库系统实现了各种死锁检测和死锁超时机制。
//InnoDB目前处理死锁的方法,将持有最少行级排它锁的事务进行回滚。

//大多数情况下只需要重新执行因死锁回滚的事务即可。

ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。

MyISAM不支持事务和行级锁。InnoDB的行级锁工作得很好。

如果要用到全文索引,建议优先考虑InnoDB加上Sphinx的组合,而不是使用支持全文索引的MyISAM。

MySQL拥有分层的架构,上层是服务器层的服务和查询执行引擎,下层则是存储引擎。

真正的忘记,并非不再想起,而是偶尔想起,心中却不再有波澜。

高性能MySQL--MySQL架构与历史

高性能MySQL--MySQL基准测试

高性能MySQL--服务器性能剖析

高性能MySQL--Schema与数据类型优化

高性能MySQL--创建高性能的索引

高性能MySQL--查询性能优化

高性能MySQL--MySQL高级特性

高性能MySQL--优化服务器设置

高性能MySQL--操作系统和硬件优化

高性能MySQL--复制

高性能MySQL--可扩展的MySQL

高性能MySQL--高可用性

高性能MySQL--云端的MySQL

高性能MySQL--应用层优化

高性能MySQL--备份与恢复

高性能MySQL--MySQL用户工具