《高性能MySQL》学习笔记

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

原创 2016年09月02日 11:20:02

MySQL架构

1.MySQL逻辑架构:

这里写图片描述
这里分为三层: 
1.链接层:链接与线程处理,这一层并非MySQL独有,通常的基于C/S架构的都有相似组件,好比链接处理、受权认证、安全等。 
2.SQL处理层:也叫MySQL服务器层,包括缓存查询、解析器、优化器,这一部分是MySQL核心功能,包括解析、优化SQL语句,查询缓存目录,内置函数(日期、时间、加密等函数)的实现 
3.数据存储层:也叫存储引擎层,负责数据存储,存储引擎的不一样,存储方式、数据格式、提取方式等都不相同,这一部分也是很大影响数据存储与提取的性能的。可是,与分层的思想一致,SQL处理层是经过API与存储引擎通讯的,API屏蔽了下层的差别,下层提供对外接口,上层负责调用便可,没必要清楚下层是怎么实现的。php

客户端说明:MySQL是基于C/S架构的,这里的客户端天然是专门的,能访问到MySQL服务器的,主要有这么几类,操做客户端:单纯的操做MySQL服务器中的数据(这里数据包括库、表、索引、表中数据等),好比经常使用的native、phpMyAdmin、Sequal Pro等;应用客户端:应用程序经过程序访问数据库,好比JDBC、ODBC、PHP程序、python程序等。无论是哪一种,其实最后都转换为SQL语句访问MySQL。html

1.链接层

  当MySQL启动(MySQL服务器就是一个进程),等待客户端链接,每个客户端链接请求,服务器都会新建一个线程处理(若是是线程池的话,则是分配一个空的线程),每一个线程独立,拥有各自的内存处理空间,可是,若是这个请求只是查询,不要紧,可是如果修改数据,很显然,当两个线程修改同一块内存是会引起数据同步问题的。 
>链接处理流程python

这里写图片描述

  链接到服务器,服务器须要对其进行验证,也就是用户名、IP、密码验证,一旦链接成功,还要验证是否具备执行某个特定查询的权限(例如,是否容许客户端对某个数据库某个表的某个操做)。 
>认证流程mysql

这里写图片描述

2.SQL处理层

  这一层主要功能有:SQL语句的解析、优化,缓存的查询,MySQL内置函数的实现,跨存储引擎功能(所谓跨存储引擎就是说每一个引擎都需提供的功能(引擎需对外提供接口)),例如:存储过程、触发器、视图等。git

>执行过程:程序员

这里写图片描述 
(图中的查询并非必定是select语句,在MySQL中,通常习惯把每一条SQL命令称为query(查询))算法

1.若是是查询语句(select语句),首先会查询缓存是否已有相应结果,有则返回结果,无则进行下一步(若是不是查询语句,一样调到下一步); 
2.解析查询,建立一个内部数据结构(解析树),这个解析树主要用来SQL语句的语义与语法解析;详情可查看:MySQL解析器。 
3.优化:优化SQL语句,例如重写查询,决定表的读取顺序,以及选择须要的索引等。这一阶段用户是能够查询的,查询服务器优化器是如何进行优化的,便于用户重构查询和修改相关配置,达到最优化。这一阶段还涉及到存储引擎,优化器会询问存储引擎,好比某个操做的开销信息、是否对特定索引有查询优化等。详情可查看:MySQL优化器。sql

3.存储引擎

  存储引擎,也称为表类型,主要用来存储数据的,不一样的存储引擎采用不一样的技术(存储机制、索引机制、锁定机制)存储数据,这主要是为了知足数据存储要求,好比有的数据不须要大量的改动,只用来查询,而有的数据则须要经常修改(数据插入、删除、更新),针对各类业务状况,为了更好的数据处理效率采用不一样的数据存储技术(即不一样存储引擎)。 
  MySQL的存储引擎是插件式的,也就是说,用户能够随时切换MySQL的存储引擎:针对表或针对库均可(经过SQL语句命令)。这种灵活性也是为何MySQL受到欢迎的一个重要缘由。MySQL集合了多种引擎:MyISAM、InnoDB、BDB、Merge、Memory等,默认的是InnoDB(MySQL5.5开始,之前是MyISAM)。数据库

2.MySQL物理组件

这里写图片描述

如下主要参考文章:MySQL架构(guisu)。 
以上组件是对逻辑架构的实现: 
1.Management Services & Utilities 
  服务管理和控制组件,主要用来回滚操做、恢复数据、数据的复制、迁移、元数据的管理等。 
2.Connection Pool:链接池 
  链接池,对应逻辑架构的链接层,主要用来管理用户链接,包括监听、接收客户端请求,转发请求到相应的线程管理模块(该模块负责维护这些线程,包括建立、线程cache,可有线程池实现),还有链接的权限认证工做。 
3.SQL Interface:SQL接口 
  各类SQL接口,用来接收管理SQL命令,好比DML、DDL操做,存储过程,视图,触发器等。 
4.Parser:解析器 
  SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。 
主要功能: 
  a . 将SQL语句进行语义和语法的分析,分解成数据结构,而后按照不一样的操做类型进行分类,而后作出针对性的转发到后续步骤,之后SQL语句的传递和处理就是基于这个结构的。 
  b. 若是在分解构成中遇到错误,那么就说明这个sql语句是不合理的。 
5.Optimizer: 查询优化器 
  优化SQL语句,好比常量转换与计算、无效代码排除、AND/OR等等优化。查询优化器必要的时候还会询问存储引擎,计算语句执行消耗,从而得出最优策略去执行该SQL命令。 
6.Cache & Buffer: 查询缓存 
  他的主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 作一个对应。该 Query 所取数据的基表发生任何数据的变化以后, MySQL 会自动使该 query 的Cache 失效。在读写比例很是高的应用系统中, Query Cache 对性能的提升是很是显著的。固然它对内存的消耗也是很是大的。 
  若是查询缓存有命中的查询结果,查询语句就能够直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。好比表缓存,记录缓存,key缓存,权限缓存等 
7.存储引擎 
  目前只有MySQL实现了插件式多存储引擎(加了一层抽象层对接下面的存储数据层),其余数据库基本上使用单一的存储引擎。MySQL的存储引擎是基于表的,每一个表可选择本身须要的存储引擎。编程

版权声明:本文为博主原创文章,未经博主容许不得转载。
 

《高性能MySQL》学习笔记二

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

《高性能MySQL》读书笔记(上)

《High Performance MySQL》真是本经典好书,从应用层到数据库到硬件平台,各类调优技巧、常见问题全都有所说起。数据库的各类概念技巧平时都有接触,像索引、分区、Sharding等等,但...
  • dc_726
  • dc_726
  • 2014年12月06日 19:31
  • 6233
 

2017年!全球AI人才薪酬报告出炉了!中国区AI人才最贵?

给你们分享下2017年AI程序员的人才报告,服了!薪酬最高的居然不是谷歌!~
 

票选结果:Python再上天,微软要求全员学Python?

宇宙语言Python荣登年度排行榜,吴恩达,微软纷纷为它站台,Python这么牛逼的缘由是....

票选结果:Python再上天,微软要求全员学Python?

宇宙语言Python荣登年度排行榜,吴恩达,微软纷纷为它站台,Python这么牛逼的缘由是....

《高性能MySQL》读书笔记--多版本并发控制算法

InnoDB存储引擎MVCC的实现策略: 在每一行数据中额外保存两个隐藏的列:当前行建立时的版本号和删除时的版本号(可能为空)。这里的版本号并非实际的时间值,而是系统版本号。每开始 个新的事务,系...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

《高性能MySQL》读书笔记

《High Performance MySQL》真是本经典好书,从应用层到数据库到硬件平台,各类调优技巧、常见问题全都有所说起。数据库的各类概念技巧平时都有接触,像索引、分区、Sharding等等,但...
 
 
 

socket阻塞与非阻塞,同步与异步

1. 概念理解      在进行网络编程时,咱们经常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓...

【学习笔记】高性能MySQL(第三版)——第1章:MySQL架构与历史

MySQL并不完美,却足够灵活,可以适应高要求的环境,例如Web类应用。同时,MySQL既能够嵌入到应用程序中,也能够支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事务处理系统(OLTP)等...

高性能MySQL学习笔记(2) —— 并发控制

MySQL 并发控制前一节已经说过了,MySQL是多线程应用,而且共享存储数据,很显然,当两个及以上线程对同一块数据进行写将会发生数据不一致等各类问题,好比,同时对一个表增长一条记录,后一个增长的记录...

高性能MySQL学习笔记(4) —— 事务隔离级别

事务隔离级别事务的ACID属性中的隔离性,如何实现呢?在SQL标准中定义了四种隔离级别。 但要注意,标准中定义的这四个级别,在实际上各个存储引擎的实现是不尽相同的,有些细节地方仍是不同的,学习的时...

高性能MySql学习笔记——锁、事务、隔离级别

为何须要锁? 由于数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对Table1.rown进行操做,好比有的在读取该行数据,其余的尝试去删除它。为了保证数据的一致性,数据库就要对这种并发操...

高性能MySql学习笔记——锁、事务、隔离级别

为何须要锁? 由于数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对Table1.rown进行操做,好比有的在读取该行数据,其余的尝试去删除它。为了保证数据的一致性,数据库就要对这种并...

高性能mysql学习笔记

  • 2016年06月22日 13:54
  • 518KB
  • 下载

Mysql高性能学习笔记02

  • 2014年05月23日 22:12
  • 247KB
  • 下载

高性能MySQL(第二版)第三章 架构优化和索引(上)——读书笔记

一,选择优化的数据类型      更小一般更好      更小的数据类型使用了更少的磁盘,内存和CPU缓存      可是要确保不要低估须要保存的值,在架构中的多个地方增长数据类型的范围是一件极其费时...

【学习笔记】高性能MySQL(第三版)——第2章:MySQL基准测试

基准测试(benchmark)是MySQL新手和专家都须要掌握的一项基本技能。简单地说,基准测试是针对系统设计的一种压力测试。一般的目标是为了掌握系统的行为。但也有其余缘由,如重现某个系统状态,或者作...

高性能MySQL读书笔记:一、MySQL架构与历史

MySQL逻辑架构 MySQL具备分层架构,上层是服务器层的查询和执行引擎下层是存储引擎。其中,服务器层又包含两层,第一层负责链接/线程处理、受权认证、安全,第二层负责查询解析、分析、优化、缓存以及...

《高性能MySql》学习笔记 持续更新

1.尽可能避免NULL 若是查询中包含可为NULL的列,对MySql来书更难优化。2.浮点类型 不管使用float仍是double,MySql使用double做为内部浮点计算3.Decimal...

【学习笔记】《高性能MYSQL》对性能优化定义

本文属于读书笔记,大部份内容摘抄于《高性能MYSQL》,摘抄内容版权属于原做者。 在《高性能mysql》中将西能定义为完成某件任务所须要的时间度量,换句话说,性能即响应时间。按照这个定义,我...

《高性能MySQL》学习笔记三

建立高性能的索引索引对于良好的性能很是关键,尤为是当表中的数据量愈来愈大时,索引对性能的影响愈发重要,但不恰当的索引对性能的影响也会很大,因此建立高性能的索引很重要。索引基础什么是索引? 在...

mysql高性能学习笔记整理

1.ACID 表示原子性,一致性,隔离性,持久性,一个运行良好的事物处理系统,必须具有这些特征。 原子性:一个事务必须被视为一个不可分割的最小工做单元,整个事务中 全部的操做要么提交成功,要么所有提交...

博主专栏

 
 
 
 
相关文章
相关标签/搜索