1. 程式人生 > >MySQL8.0新特性——資源管理

MySQL8.0新特性——資源管理

sch 也不會 並且 tro 減少 標識符 無法刪除 優先 標識

MySQL8.0——資源管理:


參考官方文檔:

https://dev.mysql.com/doc/refman/8.0/en/resource-groups.html


MySQL支持資源組的創建和管理,並允許將服務器內運行的線程分配給特定組,以便線程根據組可用的資源執行。組屬性可以控制其資源,以啟用或限制組中線程的資源消耗。DBA可以根據不同的工作負載修改這些屬性。


目前,CPU時間是可管理的資源,由“ 虛擬CPU ”的概念表示為包括CPU核心,超線程,硬件線程等的術語。服務器在啟動時確定可用的虛擬CPU數量,具有適當權限的數據庫管理員可以將這些CPU與資源組關聯,並將線程分配給組。


例如,要管理不需要以高優先級執行的批處理作業的執行,DBA可以創建 Batch資源組,並根據服務器的繁忙程度向上或向下調整其優先級。(也許分配給該組的批處理作業應該在白天以較低的優先級運行,在夜間以較高的優先級運行。)DBA還可以調整該組可用的CPU集。可以啟用或禁用組來控制線程是否可分配給它們。


1、資源組組件:


這些功能為MySQL中的資源組管理提供了SQL接口:

①:SQL語句支持創建,更改和刪除資源組,並允許將線程分配給資源組。優化程序提示可以將單個語句分配給資源組。

②:資源組權限可控制哪些用戶可以執行資源組操作。

③:該 INFORMATION_SCHEMA.RESOURCE_GROUPS 表公開了有關資源組定義的信息,而Performance Schema threads表顯示了每個線程的資源組分配。

④:狀態變量為每個管理SQL語句提供執行計數。


2.資源組屬性

資源組具有定義組的屬性。可以在創建組時設置所有屬性。某些屬性在創建時被修復; 其他人可以在此後的任何時間修改。


如下屬性在資源組創建時定義,無法修改:

①:每個組都有一個名字。資源組名稱是表和列名稱之類的標識符,除非它們包含特殊字符或保留字,否則無需在SQL語句中引用。組名稱不區分大小寫,最長可達64個字符。

②:每個組都有一個類型,或者是 SYSTEM或者USER。資源組類型會影響可分配給組的優先級值範圍,如稍後所述。此屬性與允許的優先級的差異一起使得能夠識別系統線程,以便保護它們免於針對用戶線程爭用CPU資源。


註意:系統和用戶線程對應於Performance Schema threads表中列出的後臺和前臺線程 。


如下這些屬性在資源組創建時定義,並且可以在以後的任何時間進行修改:

①:CPU親緣關系是資源組可以使用的一組虛擬CPU。親和關系可以是可用CPU的任何非空子集。如果組沒有親和力,則可以使用所有可用的CPU。

②:線程優先級是分配給資源組的線程的執行優先級。優先級值的範圍從-20(最高優先級)到19(最低優先級)。系統組和用戶組的默認優先級均為0。

③:可以啟用或禁用每個組,從而使管理員可以控制線程分配。線程只能分配給已啟用的組。


註意:

系統組的優先級高於用戶組,確保用戶線程的優先級不會高於系統線程:

①:對於系統資源組,允許的優先級範圍是-20到0。

②:對於用戶資源組,允許的優先級範圍是0到19。


3、資源組管理:

默認情況下,有一個系統組和一個用戶組,分別名為SYS_default和 USR_default。無法刪除這些默認組,並且無法修改其屬性。每個默認組都沒有CPU關聯,優先級為0。


註意:

①:新創建的系統和用戶線程分別分配給 SYS_default和 USR_default組。

②:對於用戶定義的資源組,將在創建組時分配所有屬性。創建組後,可以修改其屬性,但名稱和類型屬性除外。

③:創建和管理資源組需要有:RESOURCE_GROUP_ADMIN權限


--查看mysql默認的組:一個用戶組和系統組:

mysql> SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS\G
*************************** 1. row ***************************
   RESOURCE_GROUP_NAME: USR_default
   RESOURCE_GROUP_TYPE: USER
RESOURCE_GROUP_ENABLED: 1
              VCPU_IDS: 0-0
       THREAD_PRIORITY: 0
*************************** 2. row ***************************
   RESOURCE_GROUP_NAME: SYS_default
   RESOURCE_GROUP_TYPE: SYSTEM
RESOURCE_GROUP_ENABLED: 1
              VCPU_IDS: 0-0
       THREAD_PRIORITY: 0
2 rows in set (0.01 sec)


其中:THREAD_PRIORITY值是0,表示默認的優先級; VCPU_IDS值示出了包括所有可用CPU的範圍內;對於默認組,顯示的值取決於運行MySQL服務器的系統。


例子:創建一個用戶資源組:
CREATE RESOURCE GROUP Batch
  TYPE = USER
  VCPU = 2-3          
  THREAD_PRIORITY = 10;
  
mysql> SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS    WHERE RESOURCE_GROUP_NAME = 'Batch'\G   ---查看這個用戶資源組
*************************** 1. row ***************************
   RESOURCE_GROUP_NAME: Batch
   RESOURCE_GROUP_TYPE: USER
RESOURCE_GROUP_ENABLED: 1
              VCPU_IDS: 2-3
       THREAD_PRIORITY: 10


--:要將線程分配給Batch組,請執行以下操作:

SET RESOURCE GROUP Batch FOR thread_id;


--:如果自己的當前線程應該在 Batch組中,請在會話中執行以下語句:

SET RESOURCE GROUP Batch;

(此後,會話中的語句將使用Batch組資源執行 。)


例子2:要使用Batch組執行單個語句 ,請使用 RESOURCE_GROUP優化程序提示:

INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);


例子3:對於系統高負載的時間,減少分配給組的CPU數量,降低其優先級,或者(如圖所示):

ALTER RESOURCE GROUP Batch VCPU = 3 THREAD_PRIORITY = 19;


例子4:在系統負載較輕的情況下,增加分配給組的CPU數量,提高其優先級,或者(如圖所示):

ALTER RESOURCE GROUP Batch VCPU = 0-3 THREAD_PRIORITY = 0;


4、資源組復制

資源組管理是發生它的服務器的本地管理。資源組SQL語句和對resource_groups數據字典表的修改 不會寫入二進制日誌,也不會被復制。


5、資源組的限制:

①:如果安裝了線程池插件,則資源組不可用。

②:資源組在macOS上不可用,它不提供用於將CPU綁定到線程的API。

③:在FreeBSD和Solaris上,忽略資源組線程優先級。(實際上,所有線程都以優先級0運行。)嘗試更改優先級會導致警告:

④:在Linux上,除非CAP_SYS_NICE設置了功能,否則將忽略資源組線程優先級。Linux系統的MySQL軟件包安裝程序應該設置此功能。對於使用壓縮 tar文件二進制分發或從源安裝,CAP_SYS_NICE可以使用setcap 命令手動設置該功能,指定mysqld可執行文件的路徑名 (這需要 sudo訪問)。您可以使用getcap檢查功能。例如:

shell> sudo setcap cap_sys_nice+ep ./bin/mysqld

shell> getcap ./bin/mysqld

./bin/mysqld = cap_sys_nice+ep

⑤:在Windows上,線程以五個線程優先級之一運行。資源組線程優先級範圍-20到19映射到這些級別。





MySQL8.0新特性——資源管理