欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于MySQL架構圖解

 更新時間:2023年03月13日 09:34:31   作者:oneslide  
這篇文章主要介紹了基于MySQL架構圖解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

本文記錄了MySQL 5.7的物理和邏輯架構,還有其組件。在這個帖子中,我會嘗試用圖去說明SQL語句的執(zhí)行流程和數據處理流程。

MySQL的架構具備靈活性,因為它把不同的存儲引擎作為插件。

因此,MySQL的架構和行為也會隨著存儲引擎的改變而改變。

我們重點討論InnoDB,因為它是MySQL的默認存儲引擎。

MySQL物理架構

在這里插入圖片描述

配置文件

  • auto.cnf : 包含 server_uuid
  • my.cnf : MySQL配置文件 形形色色的其他文件
 –basedir=dir_name  //MySQL安裝目錄路徑

–datadir=dir_name   //數據目錄的路徑,數據目錄存儲數據,狀態(tài),日志等

–pid-file=file_name  //MySQL服務器寫ProcessID的文件路徑

–socket=file_name, -S file_name  //在Unix系統(tǒng)上,使用的Unix套接字文件的名字,
                                 //用于通過管道與本地服務器建立連接
–log-error=file_name       //記錄錯誤和啟動信息的日志文件名

MySQL邏輯架構

在這里插入圖片描述

  • Client:提供連接MySQL服務器功能的常用工具集
  • Server:MySQL實例,真正提供數據存儲和數據處理功能的MySQL服務器進程
  • mysqld:MySQL服務器守護程序,在后臺運行。它管理著客戶端請求。mysqld是一個多線程的進程,允許多個會話連接,端口監(jiān)聽連接,管理MySQL實例
  • MySQL memory allocation:MySQL的要求的內存空間是動態(tài)的,比如 innodb_buffer_pool_size (from 5.7.5), key_buffer_size。每個會話都有獨一無二的執(zhí)行計劃,我們只能共享同一會話域內的數據集。
  • SESSION:為每個客戶端連接分配一個會話,動態(tài)分配和回收。用于查詢處理,每個會話同時具備一個緩沖區(qū)。每個會話是作為一個線程執(zhí)行的
  • Parser:檢測SQL語句語法,為每條SQL語句生成SQL_ID,用戶認證也發(fā)生在這個階段
  • Optimizer:創(chuàng)造一個有效率的執(zhí)行計劃(根據具體的存儲引擎)。它將會重寫查詢語句。比如:InnoDB有共享緩沖區(qū),所以,優(yōu)化器會首先從預先緩存的數據中提取。使用 table statistics optimizer將會為SQL查詢生成一個執(zhí)行計劃。用戶權限檢查也發(fā)生在這個階段。
  • Metadata cache:緩存對象元信息和統(tǒng)計信息
  • Query cache:共享在內存中的完全一樣的查詢語句。如果完全相同的查詢在緩存命中,MySQL服務器會直接從緩存中去檢索結果。緩存是會話間共享的,所以為一個客戶生成的結果集也能為另一個客戶所用。查詢緩存基于SQL_ID。將SELECT語句寫入視圖就是查詢緩存最好的例子。
  • key cache:緩存表索引。MySQL keys是索引。如果索引數據量小,它將緩存索引結構和葉子節(jié)點(存儲索引數據)。如果索引很大,它只會緩存索引結構,通常供MyISAM存儲引擎使用

SQL執(zhí)行

在這里插入圖片描述

MySQL連接

在這里插入圖片描述

InnoDB存儲引擎架構

在這里插入圖片描述

TABLESPACE

InnoDB存儲空間被切分成tablespace,tablespace是一個與多個數據文件相關聯(lián)的邏輯結構。


在這里插入圖片描述

Pages

  • InnoDB最小的數據存儲單元被也稱作塊。默認的頁框是16KB,一個頁包含多行。
  • 可用頁大小: 4kb,8kb,16kb,32kb,64kb
  • 配置變量名 : innodb_page_size,在初始化mysqld時配置

Extents

  • 一組頁組成一個區(qū),InnoDB為了更好的I/O吞吐率,每次讀寫都是按照區(qū)為單位。
  • 一組16KB的頁,一個區(qū)可以1MB,雙寫緩沖區(qū)(Doublewrite buffer )每次分配/讀/寫都是以區(qū)為單位。

Segments

  • 4個區(qū)構成一個Segments

InnoDB存儲引擎

  • ACID事務支持
  • 行鎖模式
  • 事務REDO&UNDO支持
  • 多數據文件
  • 邏輯對象結構(InnoDB數據和日志緩沖區(qū))
  • InnoDB數據是百分百的具備邏輯結構,數據物理存儲。
  • InnoDB讀取物理數據,創(chuàng)建邏輯結構[Blocks and Rows]
  • 邏輯存儲稱為TABLESPACE

InnoDB 內存中組件

  • InnoDB buffer pool
  • InnoDB存儲引擎的核心緩沖區(qū)。在這個緩沖區(qū)之中,加載表和索引數據
  • InnoDB緩存表數據和索引數據的主要區(qū)域
  • 占據80%以上的物理內存,在專用數據庫服務器中
  • 所有會話的共享緩沖區(qū)
  • InnoDB使用LRU頁面置換算法

Change buffer

In a memory change buffer is a part of InnoDB buffer pool and on disk,
it is part of system tablespace, so even after database restart index
changes remain buffered.Change buffer is a special data structure that
caches changes to secondary index pages when affected pages not in the
buffer pool.
memory change buffer是InnoDB buffer pool的一部分,在磁盤上,也是系統(tǒng)tablespace的一部分。送印即使數據庫重啟…毛意思??!無力…保留原文

Redo log buffer

redo logs緩沖區(qū),保存寫到redo log(重放日志)的數據。周期性的將緩沖區(qū)內的數據寫入redo日志中。將內存中的數據寫入磁盤的行為由innodb_log_at_trx_commitinnodb_log_at_timeout 調節(jié)。

較大的redo日志緩沖區(qū)允許大型事務在事務提交前不進行寫磁盤操作。

變量:innodb_log_buffer_size (default 16M)

在磁盤上的組件

系統(tǒng)表空間(tablespace)

除了存儲表數據之外,InnoDB也支持查找表元信息,存儲和檢索MVCC信息以兌現(xiàn)服從ACID和事務隔離性等原則。它包含幾種類型的InnoDB對象信息。

其包含的文件:

  • Table Data Pages
  • Table Index Pages
  • Data Dictionary
  • MVCC Control Data
  • Undo Space
  • Rollback Segments
  • Double Write Buffer (Pages Written in the Background to avoid OS
    caching) Insert Buffer (Changes to Secondary Indexes)

變量:

innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

激活

innodb_file_per_table選項,你可以將每個新創(chuàng)建的表存儲到不同的tablespace中。這種做法的優(yōu)點是減少磁盤上數據文件中的碎片

通用tablespace

Shared tablespace to store multiple table data. Introduce in MySQL 5.7.6. A user has to create this using CREATE TABLESPACE syntax. TABLESPACE option can be used with CREATE TABLE to create a table and ALTER TABLE to move a table in general table.

共享的tablespace存儲多個表信息,在MySQL 5.7.6時引入。用戶只能使用CREATE TABLESPACE創(chuàng)建一個這樣的表空間。

TABLESPACE選項可以在使用CREATE TABLE命令創(chuàng)建一個表然后 ALTER TABLE 將表移入通用空間時發(fā)揮作用。

– Memory advantage over innodb_file_per_table storage method.
– Support both Antelope and Barracuda file formats.
– Supports all row formats and associated features.
– Possible to create outside data directory.

InnoDB數據字典

在系統(tǒng)tablespace中的存儲區(qū)域,由系統(tǒng)內部表(供mysql服務器使用的表)和對象元數據(表,索引,列信息)組成

雙寫緩沖區(qū)(Double write buffer)

系統(tǒng)tablespace的存儲區(qū)域,InnoDB在寫入物理文件之前先將頁從InnoDB buffer pool寫入此空間。mysqld進程突然崩潰會導致部分寫問題。InnoDB可以從這個區(qū)域拿到一個備份。 Variable: inndb_doublewrite (default enable)

REDO logs

用于災難恢復。mysqld啟動的時候,InnoDB會嘗試執(zhí)行自動恢復,將不完整的事務更改矯正。還未完成更新數據文件的事務會在mysqld啟動時會根據此日志記錄中的信息被重放。它使用 LSN(Log Sequence Number)值來重放信息,因為mySQL會為每個事務賦予一個ID。因為大量數據更改不可能及時寫道磁盤,所以得先記錄到redo日志,然后再寫入磁盤。

再redo日志,所有更改都會帶有 row_id, 舊的列值,新的列值, session_id 和時間。

Innodb_log_file_in_group= [# of redo file groups]Innodb_log_file_size= [每個日志文件大小]

UNDO日志和UNDO表空間

UNDO tablespace包含一個或多個undo日志文件。UNDO通過為事務(MVCC)保存被更改還未提交的值保持讀一致性。未提交值從這個存儲區(qū)域讀取。UNDO日志也被叫做回滾數據段。

默認地,UNDO日志是系統(tǒng)表空間的一部分。但MySQL允許UNDO日志置于一個單獨的表空間中 [Introduce in MySQL 5.6]。這需要在初始化mysqld之前進行更改才起作用。

當我們配置單獨UNDO表空間時,系統(tǒng)表空間的UNDO日志就被抑制了,但是一旦配置成單獨的,我們只能刪除UNDO日志的一部分,比如過期日志,而不能刪除它。

– Variables : innodb_undo_tablespace : # of undo tablespaces, default
0 innodb_undo_directory:
Location for undo tablespace,default is,data_dir with 10MB size.
innodb_undo_logs :
# of undo logs, default ,and max value is ‘128’

臨時表空間

為臨時表和相關對象提供存儲功能,存儲包括臨時表未提交的數據。在MySQL 5.7.2引入,用于對臨時表修改的回滾。

ibtmp1每次系統(tǒng)啟動被重新創(chuàng)建,避免REDO日志對臨時表的I/O操作。

innodb_temp_data_file_path = ibtmp1:12M:autoextend (default)

And All SET !!

存儲引擎

Storage engine:
MySQL component that manages physical data (file management) and locations. Storage engine responsible for SQL statement execution and fetching data from data files. Use as a plugin and can load/unload from running MySQL server.Few of them as following,
InnoDB :
Fully transactional ACID.
Offers REDO and UNDO for transactions.
Data storage in tablespace:
Multiple data files
Logical object structure using InnoDB data and log buffer
Row-level locking.
NDB (For MySQL Cluster):
Fully Transactional and ACID Storage engine.
Distribution execution of data and using multiple mysqld.
NDB use logical data with own buffer for each NDB engine.
Offers REDO and UNDO for transactions.
Row-level locking.
MyISAM:
Non-transactional storage engine
Speed for read
Data storage in files and use key, metadata and query cache
– FRM for table structure
– MYI for table index
– MYD for table data
Table-level locking.
MEMORY:
Non-transactional storage engine
All data stored in memory other than table metadata and structure.
Table-level locking.
ARCHIVE:
Non-transactional storage engine,
Store large amounts of compressed and unindexed data.
Allow INSERT, REPLACE, and SELECT, but not DELETE or UPDATE sql operations.
Table-level locking.
CSV:
Stores data in flat files using comma-separated values format.
Table structure need be created within MySQL server (.frm)

Reference List

1.MySQL Architecture and Components

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關文章

  • MySQL使用正則表達式進行查詢操作經典實例總結

    MySQL使用正則表達式進行查詢操作經典實例總結

    這篇文章主要介紹了MySQL使用正則表達式進行查詢操作,結合實例形式總結分析了各種常見匹配模式的查詢操作實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • 解決Mysql主從錯誤:could not find first log file name in binary

    解決Mysql主從錯誤:could not find first log&nbs

    這篇文章主要介紹了解決Mysql主從錯誤:could not find first log file name in binary問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • mysql 復制表結構和數據實例代碼

    mysql 復制表結構和數據實例代碼

    這篇文章主要介紹了mysql 復制表結構和數據實例代碼的相關資料,需要的朋友可以參考下
    2016-10-10
  • MySQL中必須了解的13個關鍵字總結

    MySQL中必須了解的13個關鍵字總結

    這篇文章主要為大家詳細介紹了MySQL中必須了解學會的13個關鍵字,文中的示例代碼簡潔易懂,對我們掌握MySQL有一定的幫助,需要的可以了解下
    2023-09-09
  • 用于App服務端的MySQL連接池(支持高并發(fā))

    用于App服務端的MySQL連接池(支持高并發(fā))

    這篇文章主要介紹了用于App服務端的MySQL連接池,并支持高并發(fā),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-12-12
  • mysql配置文件的使用教程

    mysql配置文件的使用教程

    這篇文章主要介紹了mysql配置文件的使用教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-10-10
  • mysql數據庫創(chuàng)建賬號、授權、數據導出、導入操作示例

    mysql數據庫創(chuàng)建賬號、授權、數據導出、導入操作示例

    這篇文章主要介紹了mysql數據庫創(chuàng)建賬號、授權、數據導出、導入操作,結合實例形式分析了MySQL數據庫賬號創(chuàng)建、權限控制、數據導入導出等具體實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-01-01
  • 淺談MySQL的B樹索引與索引優(yōu)化小結

    淺談MySQL的B樹索引與索引優(yōu)化小結

    這篇文章主要介紹了淺談MySQL的B樹索引與索引優(yōu)化小結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • mysql kill process解決死鎖問題

    mysql kill process解決死鎖問題

    這篇文章主要介紹了使用mysql kill process解決死鎖問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MySQL 使用規(guī)范總結

    MySQL 使用規(guī)范總結

    MySQL已經成為世界上最受歡迎的數據庫管理系統(tǒng)之一,無論是用在小型開發(fā)項目上,還是用在構建那較大型的網站,MySQL都用實力證明了自己是一個穩(wěn)定、可靠、快速、可信的系統(tǒng),足以勝任任何數據存儲業(yè)務的需要。本文總結了MySQL的使用規(guī)范
    2020-09-09

最新評論