关闭

高性能MySQL第一章笔记

49人阅读 评论(0) 收藏 举报
分类:

1.MYSQL服务器逻辑架构图


每个客户端连接都会在服务器中拥有一个线程。

2.并发控制
(1)处理并发读写时,可以通过实现由两种类型的锁组合的锁系统来完成,一般称为共享锁和排它锁,也被称为读锁和写锁。读锁是共享的,不影响其他人的读或写,写锁则会阻塞其它的读锁或写锁。
锁粒度:最理想的方式是只锁定需要修改的部分数据。
锁策略:大量锁会造成系统开销,在开销和安全之间寻找平衡,就是所谓锁策略。
每种MYSQL引擎都能实现自己的锁粒度和锁策略,以便更好的适应各种场景。

锁策略:
(1)表锁:是MYSQL最基本的锁策略,是开销最小的锁,在非读操作时,它会锁定整张表。
(2)行级锁:能最大程度的支持并发处理,但是开销最大,在InnoDB和XtraDB等引擎中实现了行级锁。


3.事务与ACID
(1)事务内的语句,要么全部执行成功,要么全部失败。
(2)一个运行良好的事务系统,必须具备ACID,分别为原子性,一致性,隔离性,持久性。
       1.原子性:一个事务必须被视为一个最小的操作单元,要么全部成功,要么全部失败,不能只执行一部分。
       2.一致性:数据库总是从一个一致性状态到另一个一致性状态。
       3.隔离性:一个事务在最终提交之前,对其他事务通常是不可见的,中间状态在提交前不会显示。
       4.持久性:一旦事务提交,所做的修改会永远保存到数据库中。
事务和ADID特性虽然能保证安全,但是也会做更大的开销,如同并发控制一样,这里就可以通过选择MYSQL的储存引擎来选择是否需要事务。

3.1隔离级别:
READ UNCOMMITED 未提交读:事务未提交也可见,问题很多,一般不使用。
READ COMMITED 提交读:提交了的事务才可见,大多数数据库的默认隔离级别。
REPEATABLE READ可重复读:解决了脏读问题,未解决幻读问题,MYSQL的默认级别。
SERIALIZABLE可串行化:最高隔离级别,每一行都会加锁,消耗很大,一般少用。


3.2死锁:
当两个或多个事务在同一资源上互相占用,锁定资源时,容易产生死锁。死锁是事务型系统不可避免的,大部分情况只要重新回滚一个产生死锁原因的事务即可。InnoDB是将拥有最少行级写锁的事务进行回滚。


3.3 MYSQL中的事务
MYSQL的事务型引擎有:InnoDB和NDB Cluster
MYSQL默认采用自动提交AUTOCOMMIT,也就是说,不是显示的开始一个事务,则每个查询都会被当作一个事务执行提交操作。通过SET AUTOCOMMIT = 1 or 0
设置隔离级别:SET SESSION TRANSACTION ISOLATION LEVEL XXX;



4.多版本并发控制
MYSQL大多数事务型储存引擎都不是简单的行级锁,一般都实现了多版本并发控制(MVCC),MVCC是行级锁的一种,但是它在很多情况下避免了加锁操作,开销更低,实现了非阻塞的读操作,写操作也只要锁定必要的行。
InooDB的MVCC是通过在每行记录后面保存两个隐藏列来实现的,一列保存创建时间,一列保存过期时间。
MVCC在可重复读级别下的具体操作:



5.引擎
    书上介绍了以InnoDB为首的很多种引擎,最后结论是,除非需要用到InnoDB没有的特性,都应该优先选择InnoDB,一般不建议混合使用多种引擎。选择引擎一般需要考虑的问题:事务,备份,崩溃恢复,特有特性。MyISAM引擎可能在有些情况比InnoDB快,但是数据恢复和其他问题很多需要考虑清楚。

5.1 转换引擎的三种方法:
(1)ALTER TABLE  表名 ENGINE = InnoDB; 耗时长,消耗系统I/O能力,原表上读锁。
(2)导出与导入:用mysqldump将数据导出到文件,修改文件中CREATE TABLE,修改表名。不注意容易导致数据丢失
(3)创建与查询(CREATE和SELECT)是最好的方法,先创建一个储存引擎的表,然后用INSERT SELECT导入数据

如果数据量较大,则可以进行分批处理


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

《高性能MySQL》学习笔记二

今天打算继续学习《高性能MySQL》的第四章,有关数据库的优化。Schema与数据类型优化前置知识:如何设计数据库? 关于这方面我是在CSDN博客上找文章看的。选择优化的数据类型三大原则:(简单、小...
  • u012723607
  • u012723607
  • 2017-08-09 15:35
  • 105

看《高性能MySQL》(第二版)中文版后的笔记

1.锁有两种: (1)表级锁。这种消耗资源比较小。相对低级。 (2)行级锁。这种消耗资源比较大。相对高级。 另外还有一种锁:支持MVCC的行级锁。这种资源消耗最大。一般不怎么使用。而且这个也不是...
  • hailangxingwk
  • hailangxingwk
  • 2013-03-21 14:50
  • 622

高性能MySQL第一章笔记

1.1MySQL逻辑架构 最上层的服务:客户端。 第二层架构:MySQL的核心服务功能,包括查询解析、分析、优化、缓存一级所有的内置函数。实现存储过程、触发器、视图等。 第三次:包含眊存储引擎,负责...
  • chsyd1028
  • chsyd1028
  • 2017-05-15 15:15
  • 157

高性能MYSQL第一章笔记

1.MYSQL服务器逻辑架构图 每个客户端连接都会在服务器中拥有一个线程。 2.并发控制 (1)处理并发读写时,可以通过实现由两种类型的锁组合的锁系统来完成,一般...
  • k829593756
  • k829593756
  • 2018-01-12 20:27
  • 19

高性能MySQL学习笔记(1) —— MySQL架构

MySQL逻辑架构 MySQL逻辑架构图如下: 这里分为三层: 1.连接层:连接与线程处理,这一层并不是MySQL独有,一般的基于C/S架构的都有类似组件,比如连接处理、授权认证、安全等。 ...
  • a327369238
  • a327369238
  • 2016-09-02 11:20
  • 616

高性能MySQL笔记-第一章

事务事务的ACID特性1.原子性(atomicity):一个事务被视为最小的工作单位,要么全部提交成功,要们全部失败回滚 2.一致性(consistency):数据库总是从一个一致性的状态转换到另外一...
  • hjvgf
  • hjvgf
  • 2017-04-08 21:25
  • 140

高性能MySql阅读笔记-第一章

1.Mysql的逻辑架构
  • ya_1249463314
  • ya_1249463314
  • 2018-01-07 17:16
  • 68

概率统计:第一章 概率论的基本概念

第一章   概率论的基本概念 内容提要: 一. 加法、乘法原理及排列、组合复习 1.  加法原理  设完成一件事有类方法(其中任一类方法都可达到 完成这件事的目的),若第1类方法有种,第2类方法有种,...
  • GarfieldEr007
  • GarfieldEr007
  • 2016-03-01 12:56
  • 1604

统计学习方法笔记--第一章统计学习方法概论

统计学习方法第一章笔记 赫尔伯特·西蒙曾经对学习下定义:“如果一个系统能够通过执行某个过程改进它的性能,这就是学习。”现在人们提到的机器学习就是统计机器学习。 统计学习包括监督学习(supervi...
  • Selectnew
  • Selectnew
  • 2016-10-06 18:18
  • 265

《高性能MySQL》第一章

mysql最重要,最与众不同的是存储引擎架构。数据的处理和存储分离。根据性能,特性,需求等选取数据存储方式。 mysql服务器逻辑架构: 第一层:连接处理,授权认证等。 第二层:所有跨存储引擎的功...
  • lijingkuan
  • lijingkuan
  • 2015-09-08 10:06
  • 278
    个人资料
    • 访问:1072次
    • 积分:454
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档