MySQL整体架构与内存结构
一 mysql 整体框架:
MySQL是由SQL接口,解析器,优化器,缓存,存储引擎等组成的。

1. Connectors指的是不同语言中与SQL的交互。
2. Management Serveices & Utilities: 系统管理和控制工具。
3. Connection Pool: 连接池。管理缓冲用户连接,线程处理等需要缓存的需求。
4. SQL Interface: SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface。
5. Parser:解析器。SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。主要功能:
- 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
- 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的。
6. Optimizer: 查询优化器。
SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。用一个例子就可以理解: select uid,name from user where gender = 1;
这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤。这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤,将这两个查询条件联接起来生成最终查询结果。
7. Cache和Buffer: 查询缓存。
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。
8. Engine :存储引擎。
存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。
Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)。现在有很多种存储引擎,各个存储引擎的优势各不一样,最常用的InnoDB,BDB,MyISAM,。
默认下MySql是使用 Innodb 引擎( mysql 5.5.5以前的版本默认存储引擎是 Myisam ),它查询速度快,有较好的索引优化和数据压缩技术。但是它支持事务。
Mysql也支持自己定制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。
二 mysql 内存结构 :
mysql使用总内存 = global_buffers + all_thread_buffers
global_buffers ( 全局内存分配总和 ) =
innodb_buffer_pool_size -- InnoDB高速缓冲,行数据、索引缓冲,以及事务锁、自适应哈希等
+innodb_additional_mem_pool_size -- InnoDB数据字典额外内存,缓存所有表数据字典
+innodb_log_buffer_size -- InnoDB REDO日志缓冲,提高REDO日志写入效率
+key_buffer_size -- MyISAM表索引高速缓冲,提高MyISAM表索引读写效率
+query_cache_size -- 查询高速缓存,缓存查询结果,提高反复查询返回效率
+table_cahce -- 表空间文件描述符缓存,提高数据表打开效率
+table_definition_cache -- 表定义文件描述符缓存,提高数据表打开效率
all_thread_buffers (会话/线程级内存分配总和) =
max_threads(当前活跃连接数) * (
read_buffer_size -- 顺序读缓冲,提高顺序读效率
+read_rnd_buffer_size -- 随机读缓冲,提高随机读效率
+sort_buffer_size -- 排序缓冲,提高排序效率
+join_buffer_size -- 表连接缓冲,提高表连接效率
+binlog_cache_size -- 二进制日志缓冲,提高二进制日志写入效率
+tmp_table_size -- 内存临时表,提高临时表存储效率
+thread_stack -- 线程堆栈,暂时寄存SQL语句/存储过程
+thread_cache_size -- 线程缓存,降低多次反复打开线程开销
+net_buffer_length -- 线程持连接缓冲以及读取结果缓冲
+bulk_insert_buffer_size ) -- MyISAM表批量写入数据缓冲
MySQL整体架构与内存结构的更多相关文章
- (1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构)
目录 1.学习笔记之mysql体系结构(C/S架构) 2.mysql整体架构 3.存储引擎 4.sql语句处理--SQL层(内存层) 5.服务器内存结构 6.mysql如何使用磁盘空间 7.mysql ...
- MySQL 整体架构一览
MySQL 在整体架构上分为 Server 层和存储引擎层.其中 Server 层,包括连接器.查询缓存.分析器.优化器.执行器等,存储过程.触发器.视图和内置函数都在这层实现.数据引擎层负责数据的存 ...
- [数据库系列之MySQL] Mysql整体架构浅析一
一.引言 平时我们在做Java系统时,一般情况下都会连接到一个MySQL数据库上去,执行各种增删改查的语句.大部分的Java工程师对MySQL的了解和掌握程度,大致就停留在这么一个阶段:对MySQL可 ...
- PostgreSQL体系架构与内存结构
PostgreSQL体系架构 PostgreSQL的内存结构
- JVM(一)内存结构
今日开篇 什么是JVM 定义 Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境) 好处 一次编写,到处运行 自动内存管理,垃圾回收机制 数组下标越界检查 ...
- 【干货】MySQL底层架构设计,你了解多少?
很多开发同学对SQL优化如数家珍,却对MySQL架构一知半解.岂不是只见树叶,不见森林,终将陷入细节中不能自拔. 今天就一块学习MySQL分层架构,深入了解MySQL底层实现原理,以及每层的作用,我们 ...
- MySQL实战优化之InnoDB整体架构
一.InnoDB 更新数据得整体架构 每个组件的作用说明: 用一条更新数据来说明每个主键得作用: update student set name = 'zhangsan' where id = 10 ...
- 洞悉MySQL底层架构:游走在缓冲与磁盘之间
提起MySQL,其实网上已经有一大把教程了,为什么我还要写这篇文章呢,大概是因为网上很多网站都是比较零散,而且描述不够直观,不能系统对MySQL相关知识有一个系统的学习,导致不能形成知识体系.为此我撰 ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
随机推荐
- Java结束线程的三种方法
线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...
- 摩托罗拉SE955 One Discrete Length,Two Discrete Lengths,Length Within Range 相关解释
motorola scanner datasheet相关解释(下面通过Simple Serial Interface(SSI)进行设置,非扫描官方datasheet的设置条码): One Discre ...
- Codeforces 309C Memory for Arrays 二进制模拟进位
题目链接:点击打开链接 题意: 给定n个箱子m个物品 以下n个数字表示箱子的容量 以下m个数字b1-bm 表示物品体积为2^bi大 问最多有多少个物品能够放入箱子. 思路: 贪心,先放小的,小的不能放 ...
- JavaWeb、J2-SE开发框架——Spring
相关博客: 2.spring官网 1.使用Spring的jdbcTemplate进一步简化JDBC操作
- iOS 可选择的购物车
最近看了淘宝的购物车,于是做了一个可选择的购物车模板. 如果有好的建议请提出,带我日后更新.
- css jquery 实现轮播效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- ProgressBar+WebView实现自定义浏览器
当我们使用浏览器浏览网页时,总会看到下图页面的样子,上面是一个地址栏,地址栏下面显示加载进度,加载完成后进入页面内容,带颜色的进度条总是少不了的,那样子看起来也舒服,如何实现自定义手机浏览器功能呢? ...
- 开启unity3D的学习之路
2014年5月11号.我開始了我的Unity3D的学习之路.我将在此记录我学习过程中各个进程,这样在将来的某天,自己忘记了某部分内容时.也能够回过头来复习一下.
- 【windows】更改最大动态端口数
最近业务遇到一个奇怪的问题,一台iis服务器,居然报端口不足的错误,分析应该是服务器可用的动态端口数不够了,windows默认的动态端口范围为:1024-5000,也就是最多3977个动态端口可用,如 ...
- LeetCode:最接近的三数之和【16】
LeetCode:最接近的三数之和[16] 题目描述 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这 ...