亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL8.0 Undo Tablespace管理詳解

 更新時(shí)間:2022年06月15日 15:57:32   作者:ZhenXing_Yu  
本文主要介紹了MySQL8.0 Undo Tablespace管理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1. UNDO 基礎(chǔ)概念

  • 默認(rèn)至少初始化2個(gè)Undo表空間,最大支持127個(gè)Undo表空間,默認(rèn)表空間名稱為undo_001,undo_002
  • 8.0.14 之后UNDO表空間支持在線增加,及在線刪除
  • CREATE UNDO TABLESPACE/DROP UNDO TABLESPACE
    • 不支持指定相對(duì)路徑,只支持絕對(duì)路徑,且必須是innodb_directories參數(shù)定義可識(shí)別的路徑或默認(rèn)的數(shù)據(jù)目錄下
    • 動(dòng)態(tài)創(chuàng)建的undo表空間必須以.ibu結(jié)尾
  • 8.0.23 之前Undo表空間初始大小依賴innodb_page_size的值配置,默認(rèn)16K,初始文件大小為10M,8.0.23 之后Undo表空間初始大小為16M,默認(rèn)擴(kuò)展大小單位為16M

2. UNDO 相關(guān)參數(shù)

2.1 參數(shù)含義

show variables like '%undo%';
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| innodb_max_undo_log_size | 8589934592 |   
| innodb_undo_directory    | ./         |  
| innodb_undo_log_encrypt  | OFF        |
| innodb_undo_log_truncate | ON         |
| innodb_undo_tablespaces  | 2          |
+--------------------------+------------+

show variables like '%truncate%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| innodb_purge_rseg_truncate_frequency | 128   |
| innodb_undo_log_truncate             | ON    |
+--------------------------------------+-------+

show variables like '%segment%';
+-------------------------------+-----------+
| Variable_name                 | Value     |
+-------------------------------+-----------+
| innodb_rollback_segments      | 128       |
| innodb_segment_reserve_factor | 12.500000 |
+-------------------------------+-----------+

innodb_undo_log_truncate			-- 控制是否自動(dòng)做UNDO的truncate收縮操作,默認(rèn)為ON,只有為ON時(shí),下面2個(gè)參數(shù)才生效
	innodb_max_undo_log_size		-- 控制UNDO做truncate收縮操作的閾值,當(dāng)UNDO達(dá)到該值時(shí)才出發(fā)收縮操作
	innodb_purge_rseg_truncate_frequency 
		-- Batch UNDO清理的次數(shù),默認(rèn)最大值128,也就是128次后才會(huì)觸發(fā)一次UNDO的truncate,而每次清理的undo page由innodb_purge_batch_size參數(shù)決定,innodb_purge_batch_size默認(rèn)為300,也就是300*128個(gè)UNDO小批次清理后才會(huì)觸發(fā)UNDO表空間的truncate(也就是UNDO表空間的收縮)操作

innodb_undo_tablespaces 		  -- 控制生成的UNDO表空間的數(shù)量,默認(rèn)2個(gè),在8.0對(duì)該參數(shù)做了廢棄,但并未提供其他參數(shù)控制UNDO數(shù)量,當(dāng)前依舊可以使用該參數(shù)做UNDO表空間數(shù)量配置,通常建議配置為3(手工收縮UNDO時(shí)需要至少3個(gè)UNDO表空間)

innodb_rollback_segments			-- UNDO表空間回滾段的數(shù)量,默認(rèn)為最大值128

3. UNDO 表空間運(yùn)維

3.1 查看UNDO的基本信息

-- 可以查看到undo的表空間名稱/文件路徑/初始大小/擴(kuò)展大小/磁盤文件大小/可用空間及是否啟用的狀態(tài)等
SELECT T1.SPACE AS SPACE_ID,
       T1.NAME AS TABLESPACE_NAME,
       T2.FILE_NAME,
       ROUND(T2.INITIAL_SIZE / 1024 / 1024, 2) AS "INITIAL_SIZE(M)",
       ROUND(T2.AUTOEXTEND_SIZE / 1024 / 1024, 2) AS "AUTOEXTEND_SIZE(M)",
       ROUND(T1.FILE_SIZE / 1024 / 1024, 2) AS "FILE_SIZE_DISK(M)",
       ROUND(T2.DATA_FREE / 1024 / 1024, 2) AS "DATA_FREE(M)",
       T2.STATUS,
       T1.STATE
  FROM INFORMATION_SCHEMA.INNODB_TABLESPACES T1,
       INFORMATION_SCHEMA.FILES              T2
 WHERE T1.SPACE = T2.FILE_ID
   AND T1.ROW_FORMAT = 'Undo';

3.2 添加/active/inactive/刪除UNDO表空間

CREATE UNDO TABLESPACE

  • 用來(lái)創(chuàng)建新的UNDO 表空間

DROP UNDO TABLESPACE

  • 用來(lái)刪除UNDO 表空間

ALTER UNDO TABLESPACE xxxx SET ACTIVE

  • 用來(lái)激活UNDO的使用

ALTER UNDO TABLESPACE xxxx SET INACTIVE

  • 用來(lái)關(guān)閉UNDO的使用(關(guān)閉后的UNDO才可刪除)
-- 創(chuàng)建一個(gè)新的UNDO表空間
CREATE UNDO TABLESPACE undo_004 ADD DATAFILE 'undo_004.ibu';

-- 可以用前面的命令查看創(chuàng)建后的狀態(tài)

-- 可以將已有的UNDO表示為inactive(也可理解為UNDO表空間收縮)
-- PS:設(shè)置為INACTIVE的表空間的STATE為empty,表示這個(gè)表空間不包含任何事務(wù)回滾數(shù)據(jù),且表空間也收縮為默認(rèn)大小
ALTER UNDO TABLESPACE undo_003 SET INACTIVE;

-- 可以將inactive的UNDO轉(zhuǎn)為active
ALTER UNDO TABLESPACE innodb_undo_001 SET ACTIVE;

-- 可以將inactive的UNDO表空間進(jìn)行刪除
-- PS:默認(rèn)以innodb_開頭初始化的undo表空間不可被刪除
DROP UNDO TABLESPACE innodb_undo_001;
ERROR: 3119 (42000): InnoDB: Tablespace names starting with `innodb_` are reserved.

-- 非系統(tǒng)默認(rèn)的UNDO在inactive后可被刪除
ALTER UNDO TABLESPACE undo_003 SET ACTIVE;
Query OK, 0 rows affected (0.0030 sec)

3.3 影響UNDO inactive(truncate)性能的因素

  • UNDO 表空間的大小
  • UNDO 表空間的數(shù)量
  • UNDO LOGS的數(shù)量(實(shí)際INSERT/UPDATE/DELETE這類事務(wù)回滾段的數(shù)據(jù)量)
  • 磁盤IO的能力/當(dāng)前系統(tǒng)的負(fù)載
  • 是否存在長(zhǎng)事務(wù)在使用該UNDO表空間

PS:通常對(duì)表空間做收縮前最簡(jiǎn)單避免性能的方式是提前創(chuàng)建一個(gè)UNDO表空間,收縮完后再刪除或一直保留均可

4. UNDO 的監(jiān)控

4.1 UNDO的監(jiān)控指標(biāo)

-- 可以使用以下命令開啟對(duì)UNDO的監(jiān)控采集
SET GLOBAL innodb_monitor_enable=module_undo;
SET GLOBAL innodb_monitor_enable=module_purge;

-- 使用該命令查看UNDO truncate的次數(shù)及耗時(shí)等信息
SELECT NAME,SUBSYSTEM,COUNT,STATUS,COMMENT 
FROM INFORMATION_SCHEMA.INNODB_METRICS 
WHERE NAME LIKE '%truncate%';

4.2 UNDO的狀態(tài)值

SHOW STATUS LIKE 'Innodb_undo_tablespaces%';
+----------------------------------+-------+
| Variable_name                    | Value |
+----------------------------------+-------+
| Innodb_undo_tablespaces_total    | 4     |  -- 總共的UNDO表空間數(shù)量
| Innodb_undo_tablespaces_implicit | 2     |  -- 這里implicit其實(shí)表示的初始化創(chuàng)建的默認(rèn)UNDO表空間個(gè)數(shù),這種UNDO不可被刪除
| Innodb_undo_tablespaces_explicit | 2     |  -- 這里explicit其實(shí)表示手工顯式創(chuàng)建的UNDO表空間的個(gè)數(shù)
| Innodb_undo_tablespaces_active   | 4     |	-- 表示處于active的UNDO表空間的個(gè)數(shù),可以看到當(dāng)前和total一樣,說(shuō)明都在使用
+----------------------------------+-------+

5. UNDO 大小對(duì)并發(fā)數(shù)的限制

5.1 UNDO 記錄的類型及大小

UNDO LOGS包含的是事務(wù)最后一次修改的聚簇索引記錄(MySQL是聚簇索引表,也就是包含了一行完整的記錄)

  • 當(dāng)innodb_page_size 為16KB默認(rèn)值時(shí),undo 的slot槽為1024個(gè)
    • 16KB*1024/16=1024個(gè)槽

UNDO一共有以下4中日志類型

  • INSERT 用戶自定義的表
  • UPDATE and DELETE 用戶自定義的表
  • INSERT 自定義的臨時(shí)表
  • UPDATE and DELETE 自定義的臨時(shí)表

5.2 UNDO各場(chǎng)景下支持的讀寫并發(fā)

5.2.1 場(chǎng)景1: 每個(gè)事務(wù)都執(zhí)行一個(gè)INSERT or UPDATE(DELETE)

并發(fā)公式: (innodb_page_size / 16) * innodb_rollback_segments * number of undo tablespaces

select 16*1024/16*128*2;
+------------------+
| 16*1024/16*128*2 |
+------------------+
|      262144.0000 |
+------------------+

5.2.2 場(chǎng)景2: 每個(gè)事務(wù)都執(zhí)行一個(gè)INSERT and UPDATE(DELETE)

并發(fā)公式:(innodb_page_size / 16 / 2) * innodb_rollback_segments * number of undo tablespaces

select 16*1024/16/2*128*2;
+--------------------+
| 16*1024/16/2*128*2 |
+--------------------+
|    131072.00000000 |
+--------------------+

5.2.3 場(chǎng)景3: 每個(gè)事務(wù)都執(zhí)行一個(gè)INSERT or UPDATE(DELETE) 到臨時(shí)表

并發(fā)公式: (innodb_page_size / 16) * innodb_rollback_segments

select 16*1024/16*128;
+----------------+
| 16*1024/16*128 |
+----------------+
|    131072.0000 |
+----------------+

5.2.4 場(chǎng)景4: 每個(gè)事務(wù)都執(zhí)行一個(gè)INSERT and UPDATE(DELETE) 到臨時(shí)表

并發(fā)公式:(innodb_page_size / 16 / 2) * innodb_rollback_segments

select 16*1024/16/2*128;
+------------------+
| 16*1024/16/2*128 |
+------------------+
|   65536.00000000 |
+------------------+

6. 參考鏈接

到此這篇關(guān)于MySQL8.0 Undo Tablespace管理詳解的文章就介紹到這了,更多相關(guān)MySQL8.0 Undo Tablespace內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談MySQL數(shù)據(jù)庫(kù)崩潰(crash)的常見原因和解決辦法

    淺談MySQL數(shù)據(jù)庫(kù)崩潰(crash)的常見原因和解決辦法

    本文主要介紹了淺談MySQL數(shù)據(jù)庫(kù)崩潰(crash)的常見原因和解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Mysql中的sql優(yōu)化實(shí)踐詳解

    Mysql中的sql優(yōu)化實(shí)踐詳解

    這篇文章主要介紹了Mysql中的sql優(yōu)化實(shí)踐詳解,SQL優(yōu)化是指通過改進(jìn)SQL語(yǔ)句的編寫和查詢計(jì)劃的設(shè)計(jì)來(lái)提高數(shù)據(jù)庫(kù)查詢性能的過程,在優(yōu)化SQL時(shí),可以采取一些措施來(lái)提升查詢性能,需要的朋友可以參考下
    2023-09-09
  • MySQL長(zhǎng)字符截?cái)嗟膶?shí)現(xiàn)示例

    MySQL長(zhǎng)字符截?cái)嗟膶?shí)現(xiàn)示例

    本文主要介紹了MySQL長(zhǎng)字符截?cái)嗟膶?shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • MySQL中使用去重distinct方法的示例詳解

    MySQL中使用去重distinct方法的示例詳解

    這篇文章主要介紹了MySQL中使用去重distinct方法的示例詳解。distinct用來(lái)查詢不重復(fù)記錄的條數(shù),distinct表示對(duì)后面的所有參數(shù)的拼接取 不重復(fù)的記錄,即查出的參數(shù)拼接每行記錄都是唯一的。地產(chǎn)感興趣的可以了解一下
    2020-07-07
  • MySQL數(shù)據(jù)庫(kù)是如何實(shí)現(xiàn)XA規(guī)范的

    MySQL數(shù)據(jù)庫(kù)是如何實(shí)現(xiàn)XA規(guī)范的

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)是如何實(shí)現(xiàn)XA規(guī)范的,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-01-01
  • 詳解MySQL8.0原子DDL語(yǔ)法

    詳解MySQL8.0原子DDL語(yǔ)法

    這篇文章主要介紹了詳解MySQL8.0原子DDL語(yǔ)法的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • 使用mysqldump實(shí)現(xiàn)mysql備份

    使用mysqldump實(shí)現(xiàn)mysql備份

    mysqldump客戶端可用來(lái)轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)或搜集數(shù)據(jù)庫(kù)進(jìn)行備份或?qū)?shù)據(jù)轉(zhuǎn)移到另一個(gè)SQL服務(wù)器(不一定是一個(gè)MySQL服務(wù)器)。今天我們就來(lái)詳細(xì)探討下mysqldump的使用方法
    2016-11-11
  • MySQL?中MATCH?全文搜索關(guān)鍵字示例詳解

    MySQL?中MATCH?全文搜索關(guān)鍵字示例詳解

    這篇文章主要介紹了MySQL?中MATCH?全文搜索關(guān)鍵字詳解,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-09-09
  • you *might* want to use the less safe log_bin_trust_function_creators variable

    you *might* want to use the less safe log_bin_trust_function

    you *might* want to use the less safe log_bin_trust_function_creators variable
    2011-07-07
  • 淺談mysql 針對(duì)單張表的備份與還原

    淺談mysql 針對(duì)單張表的備份與還原

    下面小編就為大家?guī)?lái)一篇淺談mysql 針對(duì)單張表的備份與還原。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-03-03

最新評(píng)論