当前位置:   article > 正文

MySQL体系结构_mysql 体系结构

mysql 体系结构

目录

前言

服务器

MySQL结构概念

一、MySQL服务器

二、”服务器“和”主机“

存储引擎

存储引擎以及功能

MySQL对磁盘空间的使用

三、如何存储元数据

表空间

是把数据库的逻辑结构和物理结构和用户关联起来,任何一个用户必须有自己默认表空间,任何一个表空间在创建的时候必须指定至少一个文件。在MySQL中一个表空间就是一个文件。

单表文件和通用表空间各自的好处

四、重做和还原日志

五、MySQL如何使用内存


前言

服务器

服务器:也是计算机的一种,它的运行比普通的计算机要快,负载更高、价格也就比较昂贵(根据品牌、所需性能,配置衡量价格)。server在网络中为其它客户机(如PC机、智能手机等甚至各种系统的大型设备)提供计算或者应用服务。server它具有高速的CPU运算能力、具有长时间的可靠运行和强大的I/O外部数据吞吐能力以及具有更好的扩展性。服务器作为电子设备,其内部的结构也是极为复杂,与普通的计算机相比较结构相差不大,它的特点:易管理、可扩展、运算性能高、易使用。它的主要硬件是:处理器、硬盘、内存、芯片组、I/O(RAID卡、网卡、HBA卡)、机箱(电源、风扇)。系统组成。根据性能的不同又分了几类。感兴趣的自己去了解。


MySQL结构概念

一、MySQL服务器

是一个MySQLD的数据库服务器进程、与”主机“(host)是有区别的、是一个多线程的单进程、管理磁盘和内存的数据文件以及用户对其数据的访问、支持多个存储引擎(每个用户或表空间可以存储多张表、每张表可以使用不同的存储引擎,这个存储引擎与表关联。)同时支持事务性的表和非事务性的表(事务性表:就是可以进行transaction的事务回滚操作、支持行级锁定。非事务性表:不支持事务的表、就是使用myisam的存储引擎的表、不支持回滚、支持表级锁定)。

二、”服务器“和”主机“

服务器:具有版本号和功能的软件程序(MySQLD的进程)此服务器非彼服务器。

主机:运行服务器程序的物理机,由硬件配置(CUP,内存,主板,磁盘、箱体等)、只有硬件就是一个死物,怎么让它活起来呢!系统,有了系统它就有思想,有了控制权,控制管理、协调它们高效的运行。多个”服务器“可以运行在同一个主机上。

服务器(mysqld):由三层组成。连接层、SQL层、存储层(磁盘、内存、网络)

连接层:通讯协议(TCP/IP、socket file、shared memmory、named pipes)、线程、验证。

  • 连接层由名而已连接,连接到服务器,就好比你与某人聊天,首先你们的语言一定要一样,这里的通讯协议就是代表这个意思。TCP/IP(这里只是一部分理解):传输控制协议,可以连接所有的操作系统,相当于计算机的通用语言,此协议支持本地和远程都可连接。socket file:适用与以UNIX衍生的操作系统,如Linux、max os等属于本地连接就是内部连接。shared memmory、named pipes:是windows系统的连接的这里就不细说了。也是本地连接。

SQL层:解析器、授权、优化程序、查询执行、查询日志记录(可选)

  • 连接到服务器,执行语句时MySQL会在SQL层中来检查你的语句时可用与否以及优化你的查询语句,对你的每一个语句。解析器:验证查询的语法和语义将其转换为标准的形式;授权:验证连接的用户是否有运行查询语句和查询对象是否有足够的权限;优化程序:为每个查询创建最佳的执行计划,以及决定使用那些索引以及何种处理顺序;查询执行:完成每一个查询计划;查询日志记录:日志就是记录服务器接收或执行的查询。

存储层:磁盘、内存、网络,数据的存储介质,如何管理数据存储

innoDB时MySQL默认的存储引擎,MySQL包含的其他引擎:myISam、memory、ARCHIVE、blackhole、merge、csv、federated(默认是被禁用的)还提供第三方存储引擎可用。

存储引擎

  • innoDB:它提供了高可靠和高性能,事务的安全(符合ACID)、多版本的并发控制(MVCC)、数据损坏后能快速自动恢复。
  • MyISAM:在许多旧的系统中使用,使用修复表,恢复损坏的MyISAM表,支持FULLTEXT(全文)索引,空间数据类型和索引,支持表级锁(处理事务效率低),因为文件格式简单,所以支持原始表级别的备份和恢复。
  • ARCHIVE:这个存储引擎用于以压缩格式存储大量数据,从而实现非常小的占用空间,它具有的特征:不支持索引,支持INSERT和SELECT,不支持DELETE、REPLACE或UPDATE,支持ORDER BY操作和 BLOB列,接受除空间数据类型之外的所有数据类型,支持行级锁、支持AUTO_INCREMENT列。
  • BLACKHOLE:它充当空存储引擎(也就是黑洞)它接收数据但不存储数据、检索总是返回空值、支持各种索引、在有些特定的情况下很有用,比如

存储引擎以及功能

存储引擎就是充当不同类型的处理程 序的服务器组件(存储引擎可以保存在磁盘,支持磁盘,也可以保存在内存)、MySQL将处理数据行的任务委托给这些存储引擎,这些存储引擎将数据存储在磁盘、内存中,或者将数据发送到网络上的其他组件,提供索引和其他优化,在创建表时,可以根据业务的需要来指定存储引擎管理数据(存储引擎和表关联的),表的存储引擎通常是不会影响SQL层的操作,(SQL层通常解析所有有效的SQL,存储层处理操作,SQL语句是独立于存储引擎,除了特定的在语句如:GREATE TABLE 中有一个ENGINE的选项,指定每张表使用那个存储引擎和ALTER TABLE 中有一个ENGINE的选项,可以将表转换使用不同的存储引擎)某些功能之在某些存储引擎中有,如仅innoDB和NDB支持外键和事务控制操作如(commitHE rollback)只有innoDB和myisam存储引擎支持全文索引。

主外键的关系:为了避免数据冗余,符合满足数据库的第三规范设计的,一张表的主键作为另一张表的外键来使用,反之一张表的外键一定是另一张表的主键,主键的这个表叫父表,外键的表叫子表。

依赖于存储引擎的功能:存储介质、事务处理能力、锁定、备份和恢复、优化、外键的引用完整性、全文本搜索、空间数据、

MySQL对磁盘空间的使用

  • 数据目录(默认位置 /var/lib/mysql位置):服务器日志文件、状态文件、innoDB日志文件、innoDB的系统表空间;在innoDB表空间一张表对应一个文件(叫单表文件表空间);多张表放在一个文件(叫通用表空间)。
  • 数据库目录(每个数据库都有一个自己的数据目录):存储引擎数据文件(以.ibd结尾的文件)、序列化字典信息(以.sdi结尾的文件)innoDB存储引擎,表行数据和索引以及序列化的字典信息保存在相同的一个文件。
  • 其他目录:可执行的文件(服务器、服务器助手、客户机程序、实用程序);日志文件(错误日志、常规日志、慢速查询日志、审计日志、客户机日志)配置和运行时的文件(.mnf、本地化错误信息、PID(进程的id标识,防止进程重复启动)、Socket)

三、如何存储元数据

元数据:数据库定义的数据,是有关存储RDBMS(关系行数据库管理系统)中的数据的信息

元数据的类型:表的定义、存储过程定义、ACL(访问控制列表)、视图定义、方案对象定义

CREATE TABLE(创建一个表);CREATE PROCEDURE(创建一个存储过程)在数据字典生成新的信息。

数据字典:是保存关系行数据的元数据集中资料档案库。(位置:/var/lib/mysql下的ibdata1(innoDB系统表空间))

事务数据字典的特征:对所有MySQL服务器的子系统单个的元数据档案中保存,统一管理(所有存储引擎都有自己的用户表,但它们的所有元数据都存储在相同的数据字典表中,这些表都保存在innoDB的数据字典的表空间中),基于标准SQL定义,更易于扩展:公共数据字典,可以使用安装程序自动升级,易于管理,由于使用innoDB的存储引擎支持原子的DDL(单一的原子性来执行),损毁安全(支持实例恢复,当服务器不能正常运行时关机了,没有提交了没有写入的数据会在服务器下次启动后进行回退重新写入,保证数据安全不丢失数据);事务性的存储引擎能改善INFORMATION_SCHEMA(视图定义),使用标准优化技术获得更好的性能,更易于维护。

数据字典的序列化:每次元数据发生更改时,MySQL都会创建它的副本,元数据以JSON格式序列化,被称为SDI(串行词典信息)它的这个副本所在位置(innoDB:在innoDB用户表空间中连同数据存储;MyISAM:作为数据库目录中的.sdi文件)。

表空间

是把数据库的逻辑结构和物理结构和用户关联起来,任何一个用户必须有自己默认表空间,任何一个表空间在创建的时候必须指定至少一个文件。在MySQL中一个表空间就是一个文件。

innoDB表空间:就是数据文件,这个文件可以存储一个或多个innoDB表以及与其关联的索引。在系统表空间中存储元数据和缓冲区,主要包括:innoDB数据字典(表、索引和列元数据)、更改缓冲区(主要对二级索引页面的更改)、双写缓冲(两个缓冲区交替写入,确保崩溃安全写入,避免用户提交的数据丢失)。它是一个单一的逻辑存储区,包含数据目录中的一个或多个文件,一般名为ibdata1,ibdata2等可以根据需要创建多个(注:只有最后一个是可扩展的,需要多少就扩展多少,前面的都需要固定大小)。

innoDB使用的表空间类型:数据表空间(系统表空间、单表文件表空间(一个文件只能放一张表,属于某一个数据库的,以.ibd结尾命名)、通用表空间(一个表空间可以放多个表的数据,不属于任何特定的数据库,以.ibd结尾文件命名))、还原(undo)表空间、临时表空间(在MySQL中保存临时表和临时对象);

单表文件和通用表空间各自的好处

单表文件表空间:表压缩:不能在同一个通用或系统表空间中混合压缩和为解压的表 

                             空间回收(使用TRUNCATE):innoDB删除并重新创建截断的单表文件表空                                                                                       间,将可用的空间释放会文件系统。

通用表空间:删除大量数据的语句的文件系统开销更少如(DROP TABLE 或 TRUNCATE                                    TABLE)负载少。

                       消耗更少的内存来存储表空间元数据。

注:在数据中可以混合使用表空间的类型,一些表使用单表文件表空间,一些表使用通用表空                间,多个通用表空间共存。

  • 还原表空间:在还原段引入主要解决这三个问题,事务的恢复、事务的回滚和读的一致性。还原日志驻留在连个还原表空间中,默认情况下,它们驻留在MySQL数据目录中(可以通过设置innodb_undo_directory选项更该它们的位置)
  • 临时表空间:用来创建临时表,由MySQL在复杂查询执行一些操作时(内部表使用MEMORY存储引擎,无法直接控制它何时执行操作)由用户存储用户数据以供在会话中使用时;临时表空间的相对路径、名称、大小和属性取决于innodb_data_home_dir的值,来决定的,如未设置值时则所有临时文件都在innobd_data_home_dir目录中的名为ibtmp1的12MB自动扩展数据文件创建。

四、重做和还原日志

重做(redo)日志作用以其的位置

在innoDB进项更改执行操作数据文件进行之前存储

  • 使innoDB能够以非同步的方式优化数据的写入。
  • innoDB通过重新执行redo日志文件中的操作,以确保所有表之间事务的一致性,即使崩溃前没有写入数据文件的操作也是如此
  • 默认位于数据目录中;通常命名为:ib_logfile0 和 ib_logfile1,由innoDB_log_group_home_dir选项控制

还原(restore)日志作用以其位置

存储,将要被事务修改的数据,在修改之前的数据副本,以便innoDB可以访问更早期的数据,也称为回滚段(rollback segments)

  • 用于MVCC和回退innoDB从undo日志中检索未修改的数据如(回退一个事务、另一个事务需要查看更早期的数据作为一致性读取的一部分。
  • 其内部分为:插入undo缓冲区和更新undo缓冲区。
  • 它默认存储在undo的表空间中。

五、MySQL如何使用内存

MySQL服务器将内存分配为三种不同的类别:服务器/共享、存储引擎/共享、连接/会话

服务器/共享又包含:线程缓存和主机缓存;存储引擎/共享又包含:缓冲池和日志缓冲池;连接/会话又包含:排序缓冲区、连接缓冲区和临时表。

又有全局内存和会话内存

  • 全局内存:服务器启动时分配,由服务器进程及其线程共享(服务器启动时分配一一次,在服务器关闭时释放),此内存在所有会话之间共享,当所有的物理内存用完时,操作系统开始交换(使用磁盘页面文件),这会对MySQL服务器产生不利的影响,还有可能导致服务器崩溃。缓冲区是验证的授权表缓冲区。
  • 会话内存:每个会话都是动态分配的,每一个客户端连接或线程,会话结束或不再需要是释放;主要用于处理查询结果。

缓冲池以及配置缓冲池

缓冲池:为了避免每次访问磁盘,以加速数据的访问,避免每次查询数据都要进行IO,存放这缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,起到加速访问的作用。既然数据放在缓冲池里访问速度快那为什么不把所有的数据都放在缓冲池里,所有的事情都没有十全十美的既然它的访问速度快了容量也就成为了它的短板,所以缓冲池了的文件都是经常用到的,常用的放在最近的地方以最大程度的提到了访问速度,也降低了对磁盘IO的运行。

配置缓冲池:尽可能将最多的RAM分配给缓冲池,以避免热数据对磁盘进行I/O

设置inndb_buffer_pool_size的之,使用70%——80%的内存,根据计算机操作系统和管理程序使用的RAM,将剩余的内存分配给缓冲池。启用多个缓冲池以最大程度的减少互斥量的争用。当总缓冲池大小,大于1GB时,innoDB会自动分配八个缓冲池实例,设置innodb_buffer_pool_instatces以便每个实例至少使用1GB.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/792029
推荐阅读
相关标签
  

闽ICP备14008679号