MySQL之体系架构

Posted ziye_子叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL之体系架构相关的知识,希望对你有一定的参考价值。

该图是数据库前十排行榜——更新于2022年8月


基于mysql5.7版本


网络连接层

  • 客户端连接器:
    • 支持C语言、Java、.NET、php、Python等

核心服务层

  • 系统管理和控制工具:
    • 如备份恢复、安全管理、集群管理等。
  • 连接池:
    • 负责存储和管理客户端与数据库的链接,一个线程负责管理一个连接。
  • SQL接口:
    • 用于接收客户端发送的各种SQL命令,并且返回用户需要查询的结果。比如DML(数据的增删改查操作)、DDL(创建数据库表、修改数据库表操作),视图,触发器等。
  • 解析器:
    • 负责将请求的SQL解析生成一个“解析树”。然后根据MySQL规则进一步检查解析树是否合法。底层使用了C语言的开源语法工具和词法分析工具,解析SQL时,先进行“词”分析,再进行“语法”分析。
  • 查询优化器:
    • 当“解析树”通过解析器语法检查后,将交由优化器将其转化为执行计划,然后与存储引擎层交互。
  • 缓存:
    • 缓存机制是由一系列小的缓存组成;比如表缓存,记录缓存,权限缓存,引擎缓存等。如果查询缓存命中,就直接去缓存中取数据,大大提交了效率。

存储引擎层

  • 存储引擎负责MySQL中数据的存储与提取,与底层系统文件进行交互。MySQL存储引擎是插件式的,服务器中的查询执行引擎通过接口与存储引擎进行通信,接口屏蔽了不同存储引擎之间的差异。最常见的是MyISAM和InnoDB。

系统文件层

  • 日志文件:
    • 错误日志(Error log)
      默认开启,命令show variable like ‘%log_error%’; 可以查看错误日志存储位置
    • 通用查询日志(General query log)
      记录一般的查询语句,
      默认关闭,命令show variables like ‘%general%’;
    • 二进制日志(binary log)
      记录了对MySQL数据库执行的更改操作,并且记录了语句的发生时间、执行时长;但是它不记录select、show等不修改数据库的SQL。主要用于数据库恢复和主从复制。
      默认关闭,命令show variables like ‘%log_bin%’;
      binlog参数,命令show variables like ‘%binlog%’;
      开启之后,可以查看日志文件,命令show binary logs;
    • 慢查询日志(slow query log)
      记录所有执行时间超时的查询SQL,默认10秒。
      查看是否开启并查看慢SQL日志存储路径,命令show variables like ‘%slow_query%’;
      查看慢SQL判定时长,命令show variables like ‘%long_query_time%’;
      设置慢SQL判定时长,命令set long_query_time = 5; 单位:秒
  • 配置文件:
    用于存放MySQL所有的配置信息文件,比如my.cnf、my.ini等。
  • 数据文件:
    • db.opt文件:记录这个哭的默认是用的字符集和校验规则。
    • frm 文件:存储与表相关的元数据(meta)信息,包括表结构的定义信息等,每一张表都会有一个frm文件。
    • MYD文件:MyISAM存储引擎专用,存放MyISAM表的数据(data),每一张表都会有一个.MYD文件。
    • MYI文件:MyISAM存储引擎专用,存放MyISAM表的索引相关信息,每一张表都有一个对应的.MYI文件。
    • idb文件和IBDATA文件:存放InnoDB的数据文件(包括索引)。InnoDB存储引擎有两种表空间方式:独享表空间和共享表空间。独享表空间使用.ibd文件来存放数据,并且每一张InnoDB表对应一个.idb文件。共享表空间使用.ibdata文件,所有表共同使用一个(或多个,自行配置).ibdata文件。
    • ibdata1文件:系统表空间数据文件,存储表元数据、Undo日志等。
    • ib_logfile0、ib_logfile1文件:Redo log日志文件。
      详细可到文末跳转其他章节
  • pid文件:
    • pid文件是mysqI在Unix/Linux环境下的进程文件,存放着自己的进程id。
  • socket文件:
    socket文件也是在Unix/Linux下才有的,用户在Unix/Linux环境下可以不通过TCP/IP网络直接使用Unix Socket来连接MySQL。

其他章节 -> 跳转

end...

MySQL Study之--MySQL体系结构深入解析

MySQL Study之--MySQL体系结构深入解析

MySQL体系架构

 技术分享

    由连接池组件、管理服务和?工具组件、sql接口组件、查询分析器组件、优化器组件、缓冲组件、插件式存储引擎、物理?文件组成。mysql是独有的插件式体系结构,各个存储引擎有自己的特点。


MySQL内存结构:
技术分享

Mysql 进程结构

Mysql不像oracle那样是通过多进程来完毕其功能的。默认情况下,InnoDB存储引擎的后台线程有7个:

4个IO thread,

1个master thread,

1个锁(lock)监控线程。

1个错误监控线程。

在InnoDB Plugin版本号開始添加了默认IO thread的数量,默认的read thread和write thread分别增大到了4个。而且不再使用innodb_file_ io_threads參数,而是分别使用innodb_read_io_threads和innodb_write_io_threads參数。

查看mysql thread:

<strong><span style="font-size:14px;">mysql> show variables like ‘innodb_%version%‘;</span></strong>
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| innodb_version | 1.2.4 |
+----------------+-------+
1 row in set (0.00 sec)

<strong><span style="font-size:14px;">mysql> show engine innodb status;</span></strong>
=====================================
150709 15:26:40 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from thelast 12 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 0 srv_active, 0srv_shutdown, 804 srv_idle
srv_master_thread log flush and writes: 804
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 2
OS WAIT ARRAY INFO: signal count 2
Mutex spin waits 0, rounds 0, OS waits 0
RW-shared spins 2, rounds 60, OS waits 2
RW-excl spins 0, rounds 0, OS waits 0
Spin rounds per wait: 0.00 mutex, 30.00RW-shared, 0.00 RW-excl
------------
TRANSACTIONS
------------
Trx id counter 5377
Purge done for trx‘s n:o < 4872 undo n:o< 0
History list length 1
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started
MySQL thread id 3, OS thread handle0x7f1656c75700, query id 5 localhost root init
show engine innodb status
--------
FILE I/O
--------
<strong>I/O thread 0 state: waiting for completedaio requests (insert buffer thread)
I/O thread 1 state: waiting for completedaio requests (log thread)
I/O thread 2 state: waiting for completedaio requests (read thread)
I/O thread 3 state: waiting for completedaio requests (read thread)
I/O thread 4 state: waiting for completedaio requests (read thread)
I/O thread 5 state: waiting for completedaio requests (read thread)
I/O thread 6 state: waiting for completedaio requests (write thread)
I/O thread 7 state: waiting for completedaio requests (write thread)
I/O thread 8 state: waiting for completedaio requests (write thread)
I/O thread 9 state: waiting for completedaio requests (write thread)
Pending normal aio reads: 0 [0, 0, 0, 0] ,aio writes: 0 [0, 0, 0, 0] ,</strong>
 ibufaio reads: 0, log i/o‘s: 0, sync i/o‘s: 0
Pending flushes (fsync) log: 0; bufferpool: 0
283 OS file reads, 5 OS file writes, 5 OSfsyncs
0.00 reads/s, 0 avg bytes/read, 0.00writes/s, 0.00 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2,0 merges
merged operations:
 insert 0, delete mark 0, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0
Hash table size 276707, node heap has 0buffer(s)
0.00 hash searches/s, 0.00 non-hashsearches/s
---
LOG
---
Log sequence number 1611537
Log flushed up to   1611537
Pages flushed up to 1611537
Last checkpoint at  1611537
0 pending log writes, 0 pending chkp writes
8 log i/o‘s done, 0.00 log i/o‘s/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 137363456; inadditional pool allocated 0
Dictionary memory allocated 39010
Buffer pool si


以上是关于MySQL之体系架构的主要内容,如果未能解决你的问题,请参考以下文章

MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构

MySQL体系架构

MySQL 体系架构简介

MySQL 体系架构简介

Mysql逻辑体系架构

MySQL入门基础一-Mysql的基础体系架构