久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL架構怎么理解

165次閱讀
沒有評論

共計 5771 個字符,預計需要花費 15 分鐘才能閱讀完成。

本篇內容主要講解“MySQL 架構怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“MySQL 架構怎么理解”吧!

MySQL 物理架構

配置文件

auto.cnf : 包含  server_uuid

my.cnf : MySQL 配置文件 形形色色的其他文件

 –basedir=dir_name //MySQL 安裝目錄路徑
–datadir=dir_name // 數據目錄的路徑,數據目錄存儲數據,狀態,日志等
–pid-file=file_name //MySQL 服務器寫 ProcessID 的文件路徑
–socket=file_name, -S file_name // 在 Unix 系統上,使用的 Unix 套接字文件的名字, // 用于通過管道與本地服務器建立連接
–log-error=file_name // 記錄錯誤和啟動信息的日志文件名 

MySQL 邏輯架構

Client: 提供連接 MySQL 服務器功能的常用工具集

Server:MySQL 實例,真正提供數據存儲和數據處理功能的 MySQL 服務器進程

mysqld:MySQL 服務器守護程序,在后臺運行。它管理著客戶端請求。mysqld 是一個多線程的進程,允許多個會話連接,端口監聽連接,管理 MySQL 實例

MySQL memory allocation:MySQL 的要求的內存空間是動態的,比如  innodb_buffer_pool_size (from 5.7.5), key_buffer_size。每個會話都有獨一無二的執行計劃,我們只能共享同一會話域內的數據集。

SESSION: 為每個客戶端連接分配一個會話,動態分配和回收。用于查詢處理,每個會話同時具備一個緩沖區。每個會話是作為一個線程執行的

Parser: 檢測 SQL 語句語法,為每條 SQL 語句生成 SQL_ID,用戶認證也發生在這個階段

Optimizer: 創造一個有效率的執行計劃(根據具體的存儲引擎)。它將會重寫查詢語句。比如:InnoDB 有共享緩沖區,所以,優化器會首先從預先緩存的數據中提取。使用 table statistics optimizer 將會為 SQL 查詢生成一個執行計劃。用戶權限檢查也發生在這個階段。

Metadata cache: 緩存對象元信息和統計信息

Query cache: 共享在內存中的完全一樣的查詢語句。如果完全相同的查詢在緩存命中,MySQL 服務器會直接從緩存中去檢索結果。緩存是會話間共享的,所以為一個客戶生成的結果集也能為另一個客戶所用。查詢緩存基于 SQL_ID。將 SELECT 語句寫入視圖就是查詢緩存最好的例子。

key cache: 緩存表索引。MySQL keys 是索引。如果索引數據量小,它將緩存索引結構和葉子節點(存儲索引數據)。如果索引很大,它只會緩存索引結構,通常供 MyISAM 存儲引擎使用

SQL 執行

MySQL 連接

InnoDB 存儲引擎架構

TABLESPACE

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

Pages

InnoDB 最小的數據存儲單元被也稱作塊。默認的頁框是 16KB, 一個頁包含多行。

可用頁大小: 4kb,8kb,16kb,32kb,64kb

配置變量名 : innodb_page_size,在初始化 mysqld 時配置

Extents

一組頁組成一個區,InnoDB 為了更好的 I / O 吞吐率,每次讀寫都是按照區為單位。

一組 16KB 的頁,一個區可以 1MB,雙寫緩沖區(Doublewrite buffer)每次分配 / 讀 / 寫都是以區為單位。

Segments

4 個區構成一個 Segments

InnoDB 存儲引擎

ACID 事務支持

行鎖模式

事務 REDO UNDO 支持

多數據文件

邏輯對象結構(InnoDB 數據和日志緩沖區)

InnoDB 數據是百分百的具備邏輯結構,數據物理存儲。

InnoDB 讀取物理數據,創建邏輯結構 [Blocks and Rows]

邏輯存儲稱為 TABLESPACE

InnoDB 內存中組件

InnoDB buffer pool

InnoDB 存儲引擎的核心緩沖區。在這個緩沖區之中,加載表和索引數據

InnoDB 緩存表數據和索引數據的主要區域

占據 80% 以上的物理內存,在專用數據庫服務器中

所有會話的共享緩沖區

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 的一部分,在磁盤上,也是系統 tablespace 的一部分。送印即使數據庫重啟 hellip; 毛意思啊!無力 hellip; 保留原文

Redo log buffer

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

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

變量:innodb_log_buffer_size (default 16M)

在磁盤上的組件

系統表空間(tablespace)

除了存儲表數據之外,InnoDB 也支持查找表元信息,存儲和檢索 MVCC 信息以兌現服從 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 選項,你可以將每個新創建的表存儲到不同的 tablespace 中。這種做法的優點是減少磁盤上數據文件中的碎片

通用 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 創建一個這樣的表空間。

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

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

InnoDB 數據字典

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

雙寫緩沖區(Double write buffer)

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

REDO logs

用于災難恢復。mysqld 啟動的時候,InnoDB 會嘗試執行自動恢復,將不完整的事務更改矯正。還未完成更新數據文件的事務會在 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)保存被更改還未提交的值保持讀一致性。未提交值從這個存儲區域讀取。UNDO 日志也被叫做回滾數據段。

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

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

ndash; 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 lsquo;128 rsquo;

臨時表空間

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

ibtmp1 每次系統啟動被重新創建,避免 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
ndash; FRM for table structure
ndash; MYI for table index
ndash; 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)

到此,相信大家對“MySQL 架構怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計5771字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 慈溪市| 邵东县| 安宁市| 乌什县| 乌苏市| 北流市| 兰坪| 五常市| 衡山县| 烟台市| 苍南县| 调兵山市| 黄山市| 巴楚县| 南乐县| 蓝山县| 驻马店市| 安义县| 青铜峡市| 旺苍县| 曲松县| 化州市| 磐石市| 临沂市| 改则县| 巴马| 平潭县| 胶州市| 南岸区| 洪雅县| 龙井市| 长垣县| 马山县| 崇州市| 观塘区| 墨玉县| 新建县| 花莲市| 平遥县| 兴仁县| 宁阳县|