MySQL三层体系结构|-----------------------------------------------------------------------------------| | mysqld-SQL层 | |-----------------------------------------------------------------------------------| | mysqld-表引擎适配层 | -------------------------------------------------------------------------------------| | | | | |---------------- ----------- ------------- ------------ | --------------| innoDB表引擎 | |BDB表引擎| MERGE表引擎| |HEAP表引擎| | |MYISAM表引擎 |---------------- ----------- ------------- —----------- | |-------------|------------|ISAM表引擎|------------ SQL层主要完成SQL语句的词法分析,语法分析,权限检查等工作, 表适配器层根据用户SQL语句上下文,选择并激活用户当前操作的表引擎,执行具体的语句操作. 用户可用通过配置文件设定默认表引擎,default_table_type=HEAP一条SQL语句的执行过程 1:用户通过客户端向SQL服务器发送SQL语句 2:服务器对应于用户的工作线程(执行数据库连接时建立)接收该SQL语句 3:工作线程执行SQL层权限检查 4:工作线程执行SQL层SQL语句解析 5:工作线程执行SQL层必要的优化工作 6:在3,4,5步发生错误时,SQL层层构造相应的错误信息,由工作线程返回客户端 7:工作线程执行完成SQL层操作后,激活表引擎适配层,选择对应的引擎. 8:工作线程在被选择表引擎上执行,并在相应表引擎系统线程的配合下,完成具体的语句操作 9:工作线程根据表引擎执行情况,给客户端返回结果InnoDB表引擎的配置 1:旁路配置当MySQL服务器本身支持InnoDB,但管理员不打算使用InnoDB时使用该配置,这样即使数据库用户指定创建InnoDB表类型,服务器也不予支持.可以节省内存以及磁盘空间,并可加快某些语句的执行(MYISAM和InnoDB表的区别) 2:线程配置2.1:并发线程数(innodb_thread_concurrency)用于指定InnoDB引擎内允许同时并发的线程数量,当多个用户同时连接到服务器并使用InnoDB引擎时,将可能出现多个用户工作线程进入InnnoDB表引擎.同时处于InnoDB层的用户工作线程越多,系统并发性越高,同时线程之间的互斥冲突可能越多,当达到一定量的时候,系统性能急剧下降,根据实际情况配置.2.2:最长锁等待时间(innodb_lock_wait_timeout)该配置项指定用户工作线程等待一个锁的最长时间,当一个InnoDb事务等待某个锁的时间超过该值时,InnoDB将自动回滚该事务.这对于打破InnoDB可能发生的死锁相当重要,特别是执行Lock Tables命令时,InnoDB将无法控制这来自外部的锁.这就可能导致用户直接锁与InnoDB内部执行过程的加锁发生死锁.该配置以秒单位,值过小,未发生死锁的事务频繁回滚,过大,死锁时间过长,影响InnoDB的有效执行效率.2.3:I/O线程数(innodb_file_io_threads)为了提高速度,InnoDB首先将数据读入内存缓存区,然后再写入磁盘,当读取数据时,InnoDB批量读入数据到缓冲区,方便后期查找.这样就产生了内存缓冲区和磁盘之间的读写问题,InnoDB设置了专门的I/O线程来完成磁盘于内存缓冲区之间的读写操作. 3:缓存管理配置3.1:缓冲池大小(innodb_buffer_pool_size)该配置项用于指定InnoDB所用缓冲池的大小.该缓冲池用户存储InnoDB表索引和表中数据,以缓存磁盘I/O速度.缓冲池越大,缓冲到内存中的索引和数据越多,其他进程能用的内存就越小.此外,配置越大,数据丢失的风险越大(宕机时缓存区中的数据尚未刷新到磁盘,永久性丢失).3.2:元数据缓冲池大小(innodb_additional_mem_pool_size)innodb_buffer_pool_size指定的缓冲池用于缓存表索引和表数据,该配置指定缓冲池中用于存放表定义信息等元数据,该配置为一初始化配置,若InnoDB存放元数据大小超过该配置,自动向操作系统申请.3.3:日志缓冲区大小(innodb_log_buffer_size)当事务执行过程中,InnoDB会不断产生日志,以提供数据恢复功能.当InnoDB生成日志时,首先将日志写入缓冲区,然后再刷新到磁盘.该配置用于指定日志缓冲区大小.过小,将使InnoDB频繁刷新日志到磁盘,同时难以支持长事务.过大浪费内存,同时延长刷新时间,增加日志丢失风险.
MYSQL体系结构-来自期刊
转载于:https://www.cnblogs.com/shuiyonglewodezzzzz/p/7529342.html
相关文章:

LeetCode实战:搜索旋转排序数组
题目英文 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You are given a target value to search. If found in the array return its index, otherwise retur…

Python内置数据结构之双向队列
经常听说Python就是一门执行速度低的语言,可能是你的程序中使用了复杂的算法与数据结构,才会导致程序执行速率低的。在Python的标准库中提供了常见的数据结构工开发者使用,不仅执行速率比较快,还可以简化开发者的编程工作。下面我…

C# GDAL 学习一
最近一直琢磨如何用C#GDAL读取栅格数据(.tif或.img),运气不错的在GDAL 的官网上找到一部分源码。经过本人测试,效果还不错。学习还将继续深入下去。 参考网址:http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/csh…

LeetCode实战:字符串相加
题目英文 Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2. Note: The length of both num1 and num2 is < 5100.Both num1 and num2 contains only digits 0-9.Both num1 and num2 does not contain any leadin…

js中修改this的指向方法整理
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向…

VC运行时库(/MD、/MT等)
VC项目属性→配置属性→C/C→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)。 Reusable LibrarySwitchLibraryMacro(s) DefinedSingle Threaded/MLLIBC(none)Static Mu…

函数式编程概述
2019独角兽企业重金招聘Python工程师标准>>> 引子 JDK8中引入了lambda函数式编程的概念,那么什么是函数式编程,函数式编程又有什么好处,今天我们就来说说函数式编程 我们先了解一下函数式编程的由来 一个名叫阿隆佐邱奇的数学家设…

LeetCode实战:字符串相乘
题目英文 Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string. Example 1: Input: num1 "2", num2 "3" Output: "6"Example 2: Input: num1 &q…

UI培训教程之系统图标如何设计?
UI设计在近几年广受大家的关注,学习UI设计的人越来也多,今天小编要介绍的就是其中的系统图标设计方法,系统图标在UI设计中是非常基础的图形化语言,也在页面交互中起到很重要的作用。单个图标的设计并不难,但是系统化、…

看懂SQL Server的查询计划(绝对好文!)
在园子看到一篇SQLServer关于查询计划的好文,激动啊,特转载。原文出自:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html看懂SqlServer查询计划对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也…
LeetCode实战:全排列
题目英文 Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] ]题目中文 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 输入: …

git pull出现There is no tracking information for the current branch
使用git pull 或者 git push 的时候报错 gitThere is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details git pull <remote> <branch> If you wish to set tracking information…

零基础快速学习Java技术的方法整理
在学习java技术这条道路上,有很多都是零基础学员,他们对于java的学习有着很多的不解,不知怎么学习也不知道如何下手,其实Java编程涉及到的知识点还是非常多的,我们需要制定java学习路线图这样才能少走弯路,…

转 深入理解Midlet类
在J2ME编程过程中,MIDlet是最核心的类之一,熟悉该类的使用是J2ME学习过程中必须首先掌握的类,下面就结合实际介绍一下该类的实际使用。 众所周知,J2ME程序都是从MIDlet类开始执行,系统规定了MIDlet的生命周期。规定MID…

LeetCode实战:最大子序和
题目英文 Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum. Example: Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the largest sum 6.Follow up…

PHP如何更好的利用PHPstorm的自动提示
说明 写了一段时间的java之后,特别不习惯PHP本身的弱类型方式,在写代码的时候总觉得不怎么放心,特别本身PHP又是弱类型的语言,所以在编码的时候,很多时候是没有代码提示的。 一个一般例子 class Data {public $name;pu…

2021年Java面试题目最新总结【90%面试会踩的坑】
学会java技术之后大家面临的最多的问题就是面试这关,求职面试java岗位是否能够成功是直接影响我们的工作机会的,所以对于Java程序员面试你准备好了吗?今天小编汇总了一下关于Java程序员面试,90%会踩到的坑。 2021年Java面试题目最新总结【90…

LeetCode实战:螺旋矩阵
题目英文 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. Example 1: Input: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5]Example 2: Input: [[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,…

Json的序列化和反序列化
1、引用命名空间: usingSystem.Runtime.Serialization;2、json的序列化和反序列化的方法: publicclassJsonHelper {///<summary>///序列化///</summary>///<typeparam name"T"></typeparam>///<param name"t">&l…
Angular开山篇
1:环境搭建 今天给大家介绍4种环境搭建的方法。一:Angular-cli的安装 官方指导文档:www.angular.cn/guide/quickstart 请使用cnpm来安装,或者配置淘宝镜像。 使用原生npm安装可能会遇到的问题: 需要python的环境可能会…

零基础参加软件测试培训需要学多长时间
软件测试对于零基础学员来说是非常好入门的,软件测试没有很多的限制,那么零基础参加软件测试培训需要学多长时间呢?来看看下面的详细介绍吧。 零基础参加软件测试培训需要学多长时间?软件测试培训时间一般都在四个月左右,四个月时间的课程内…

Windows API函数大全
1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一…

LeetCode实战:螺旋矩阵 II
题目英文 Given a positive integer n, generate a square matrix filled with elements from 1 to n^2 in spiral order. Example: Input: 3 Output: [[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ] ]题目中文 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素&#x…

电子文件归档为什么非云不可
本文讲的是电子文件归档为什么非云不可华为云为企业搭建功能强大的电子文件归档系统平台,一站式满足文件存储与管理、协同分享、移动办公等不同的业务需求。打造安全、高效、便捷的文件归档环境,帮助企业节省运营成本,优化管理流程࿰…

北京学习Java培训有哪些比较好
北上广算是互联网技术大咖的聚集之地,很多知名互联网企业都在这些城市,随之java培训机构也是非常多的,那么在北京学习java培训有哪些比较好呢?来看看下面的详细介绍吧。 北京学习Java培训有哪些比较好?想要在这些培训机构中选择比较靠谱的J…

C#命名规则、开发习惯和风格
1. 文件命名组织 1-1文件命名 1. 文件名遵从Pascal命名法,无特殊情况,扩展名小写。 2. 使用统一而又通用的文件扩展名: C# 类 .cs 1-2文件注释 1. 在每个文件头必须包含以下注释说明 1 在每个文件头必须包含以下注…

LeetCode实战:不同路径
题目英文 A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below). The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked ‘Fini…

前端部分面试题整理,欢迎补充
1.ng中如何配置路由,$scope和$rootscope的原理ng中如何配置路由?1)使用内置路由模块ng-routevar app angular.module(ngRouteExample, [ngRoute]).controller(MainController, function($scope) {}).config(function($routeProvider, $locationProvider) {$routeP…

JS栈结构的简单封装
栈:是一种遵循后进先出(Last In First Out / LIFO) 原则的一种有序集合。 新添加或者要删除的元素都会保存在栈的同一端,我们把它叫做栈顶,另外一端叫做栈底。 在栈中所有的新元素都接近栈顶,而所有的旧元素都接近栈底。 在我们的…

记录CSS3 target伪类简介
CSS3 target伪类是众多实用的CSS3特性中的一个。它用来匹配文档(页面)的URI中某个标志符的目标元素。具体来说,URI中的标志符通常会包含一个”#”字符,然后后面带有一个标志符名称,比如#respond,target就是用来匹配ID为respond的元…