詳解MySQL資源組的使用方法
MySQL支持創(chuàng)建和管理資源組,并允許將服務(wù)器內(nèi)運(yùn)行的線程分配給特定的組,以便線程根據(jù)組可用的資源執(zhí)行。組屬性允許控制其資源,以啟用或限制組中線程的資源消耗。DBA可以針對(duì)不同的工作負(fù)載適當(dāng)?shù)匦薷倪@些屬性。
目前,CPU時(shí)間是一種可管理的資源,以“虛擬CPU”的概念表示,該概念包括CPU核心、超線程、硬件線程等。服務(wù)器在啟動(dòng)時(shí)確定有多少虛擬CPU可用,具有適當(dāng)權(quán)限的數(shù)據(jù)庫(kù)管理員可以將這些CPU與資源組相關(guān)聯(lián),并將線程分配給組。
例如,為了管理不需要以高優(yōu)先級(jí)執(zhí)行的批處理作業(yè)的執(zhí)行,DBA可以創(chuàng)建一個(gè)批處理資源組,并根據(jù)服務(wù)器的繁忙程度調(diào)整其優(yōu)先級(jí)??梢詥⒂没蚪媒M來(lái)控制線程是否可分配給它們。
以下部分描述了MySQL中資源組使用的各個(gè)方面:
1 資源組元素
這些功能為MySQL中的資源組管理提供了SQL接口:
- SQL語(yǔ)句允許創(chuàng)建、更改和刪除資源組,并允許將線程分配給資源組。優(yōu)化器提示允許將單個(gè)語(yǔ)句分配給資源組。
- 資源組權(quán)限提供對(duì)哪些用戶(hù)可以執(zhí)行資源組操作的控制。
- 信息架構(gòu)RESOURCE_GROUPS表顯示有關(guān)資源組定義的信息,性能架構(gòu)線程表顯示每個(gè)線程的資源組分配。
- 狀態(tài)變量提供每個(gè)管理SQL語(yǔ)句的執(zhí)行計(jì)數(shù)。
2 資源組屬性
資源組具有定義該組的屬性。所有屬性都可以在組創(chuàng)建時(shí)設(shè)置。某些屬性在創(chuàng)建時(shí)是固定的;其他可以在此后的任何時(shí)間進(jìn)行修改。
這些屬性是在創(chuàng)建資源組時(shí)定義的,不能修改:
- 每個(gè)組都有一個(gè)名稱(chēng)。資源組名稱(chēng)是類(lèi)似于表和列名的標(biāo)識(shí)符,除非它們包含特殊字符或是保留字,否則不需要在SQL語(yǔ)句中引用。組名不區(qū)分大小寫(xiě),最長(zhǎng)可達(dá)64個(gè)字符。
- 每個(gè)組都有一個(gè)類(lèi)型,即SYSTEM或USER。資源組類(lèi)型影響可分配給該組的優(yōu)先級(jí)值的范圍,如后所述。該屬性以及允許優(yōu)先級(jí)的差異使系統(tǒng)線程能夠被識(shí)別,從而保護(hù)它們免受用戶(hù)線程對(duì)CPU資源的爭(zhēng)用。
系統(tǒng)和用戶(hù)線程對(duì)應(yīng)于性能模式線程表中列出的后臺(tái)和前臺(tái)線程。
這些屬性是在資源組創(chuàng)建時(shí)定義的,此后可以隨時(shí)修改:
- CPU相關(guān)性是資源組可以使用的一組虛擬CPU。親和性可以是可用CPU的任何非空子集。如果一個(gè)組沒(méi)有關(guān)聯(lián),它可以使用所有可用的CPU。
- 線程優(yōu)先級(jí)是分配給資源組的線程的執(zhí)行優(yōu)先級(jí)。優(yōu)先級(jí)值的范圍從-20(最高優(yōu)先級(jí))到19(最低優(yōu)先級(jí))。系統(tǒng)組和用戶(hù)組的默認(rèn)優(yōu)先級(jí)均為0。
允許系統(tǒng)組的優(yōu)先級(jí)高于用戶(hù)組,確保用戶(hù)線程的優(yōu)先級(jí)永遠(yuǎn)不會(huì)高于系統(tǒng)線程:
(1)對(duì)于系統(tǒng)資源組,允許的優(yōu)先級(jí)范圍為-20到0。
(2)對(duì)于用戶(hù)資源組,允許的優(yōu)先級(jí)范圍為0到19。
- 每個(gè)組都可以啟用或禁用,使管理員能夠控制線程分配。線程只能分配給已啟用的組。
3 資源組管理
默認(rèn)情況下,有一個(gè)系統(tǒng)組和一個(gè)用戶(hù)組,分別命名為SYS_default和USR_default。不能刪除這些默認(rèn)組,也不能修改它們的屬性。每個(gè)默認(rèn)組都沒(méi)有CPU相關(guān)性,優(yōu)先級(jí)為0。
新創(chuàng)建的系統(tǒng)線程和用戶(hù)線程分別分配給SYS_default和USR_default組。
對(duì)于用戶(hù)定義的資源組,所有屬性都在組創(chuàng)建時(shí)指定。創(chuàng)建組后,可以修改其屬性,但名稱(chēng)和類(lèi)型屬性除外。
要?jiǎng)?chuàng)建和管理用戶(hù)定義的資源組,請(qǐng)使用以下SQL語(yǔ)句:
- CREATE RESOURCE GROUP創(chuàng)建一個(gè)新組。
- ALTER RESOURCE GROUP修改現(xiàn)有組。
- DROP RESOURCE GROUP刪除現(xiàn)有組。
這些語(yǔ)句需要RESOURCE_GROUP_ADMIN權(quán)限。
要管理資源組分配,請(qǐng)使用以下功能:
- SET RESOURCE GROUP將線程分配給一個(gè)組。
- RESOURCE_GROUP優(yōu)化器提示將單個(gè)語(yǔ)句分配給一個(gè)組。
這些操作需要RESOURCE_GROUP_ADMIN或RESOURCE-GROUP_USER權(quán)限。
資源組定義存儲(chǔ)在Resource_groups數(shù)據(jù)字典表中,以便組在服務(wù)器重新啟動(dòng)時(shí)保持不變。因?yàn)閞esource_groups是數(shù)據(jù)字典的一部分,所以用戶(hù)無(wú)法直接訪問(wèn)它。使用信息模式Resource_GROUPS表可以獲得資源組信息,該表被實(shí)現(xiàn)為數(shù)據(jù)字典表上的視圖。
最初,RESOURCE_GROUPS表中有以下行描述默認(rèn)組:
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-3
THREAD_PRIORITY: 0
*************************** 2. row ***************************
RESOURCE_GROUP_NAME: SYS_default
RESOURCE_GROUP_TYPE: SYSTEM
RESOURCE_GROUP_ENABLED: 1
VCPU_IDS: 0-3
THREAD_PRIORITY: 0THREAD_PRIORITY值為0,表示默認(rèn)優(yōu)先級(jí)。VCPU_IDS值顯示了包括所有可用CPU的范圍。對(duì)于默認(rèn)組,顯示的值因MySQL服務(wù)器運(yùn)行的系統(tǒng)而異。
前面的討論提到了一個(gè)場(chǎng)景,該場(chǎng)景涉及一個(gè)名為Batch的資源組來(lái)管理不需要高優(yōu)先級(jí)執(zhí)行的批處理作業(yè)的執(zhí)行。要?jiǎng)?chuàng)建這樣一個(gè)組,請(qǐng)使用類(lèi)似以下的語(yǔ)句:
CREATE RESOURCE GROUP Batch TYPE = USER VCPU = 2-3 -- assumes a system with at least 4 CPUs THREAD_PRIORITY = 10;
要驗(yàn)證資源組是否按預(yù)期創(chuàng)建,請(qǐng)檢查resource_GROUPS表:
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如果THREAD_PRIORITY值為0而不是10,請(qǐng)檢查您的平臺(tái)或系統(tǒng)配置是否限制了資源組功能;請(qǐng)參閱資源組限制。
要將線程分配給批處理組,請(qǐng)執(zhí)行以下操作:
SET RESOURCE GROUP Batch FOR thread_id;
此后,命名線程中的語(yǔ)句將使用批處理組資源執(zhí)行。
如果會(huì)話自己的當(dāng)前線程應(yīng)該在Batch組中,請(qǐng)?jiān)跁?huì)話中執(zhí)行以下語(yǔ)句:
SET RESOURCE GROUP Batch;
此后,會(huì)話中的語(yǔ)句將使用批處理組資源執(zhí)行。
要使用Batch組執(zhí)行單個(gè)語(yǔ)句,請(qǐng)使用RESOURCE_group優(yōu)化器提示:
INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);
分配給批處理組的線程使用其資源執(zhí)行,可以根據(jù)需要進(jìn)行修改:
- 當(dāng)系統(tǒng)負(fù)載很高時(shí),減少分配給該組的CPU數(shù)量,降低其優(yōu)先級(jí),或者(如圖所示)兩者兼有:
ALTER RESOURCE GROUP Batch VCPU = 3 THREAD_PRIORITY = 19;
- 在系統(tǒng)負(fù)載較輕的情況下,增加分配給組的CPU數(shù)量,提高其優(yōu)先級(jí),或(如圖所示)兩者兼有:
ALTER RESOURCE GROUP Batch VCPU = 0-3 THREAD_PRIORITY = 0;
4 資源組復(fù)制
資源組管理是發(fā)生該管理的服務(wù)器的本地管理。資源組SQL語(yǔ)句和對(duì)Resource_groups數(shù)據(jù)字典表的修改不會(huì)寫(xiě)入二進(jìn)制日志,也不會(huì)被復(fù)制。
5 資源組限制
在某些平臺(tái)或MySQL服務(wù)器配置上,資源組不可用或有限制:
如果安裝了線程池插件,則資源組不可用。
資源組在macOS上不可用,macOS不提供將CPU綁定到線程的API。
在FreeBSD和Solaris上,資源組線程優(yōu)先級(jí)被忽略。(實(shí)際上,所有線程都以?xún)?yōu)先級(jí)0運(yùn)行。)嘗試更改優(yōu)先級(jí)會(huì)導(dǎo)致警告:
mysql> ALTER RESOURCE GROUP abc THREAD_PRIORITY = 10; Query OK, 0 rows affected, 1 warning (0.18 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------------------+ | Warning | 4560 | Attribute thread_priority is ignored (using default value). | +---------+------+-------------------------------------------------------------+
- 在Linux上,除非設(shè)置了CAP_SYS_NICE功能,否則資源組線程優(yōu)先級(jí)將被忽略。向進(jìn)程授予CAP_SYS_NICE功能將啟用一系列特權(quán);咨詢(xún)http://man7.org/linux/man-pages/man7/capabilities.7.html查看完整列表。啟用此功能時(shí)請(qǐng)小心。
在使用systemd和內(nèi)核支持Ambient Capabilities(Linux 4.3或更新版本)的Linux平臺(tái)上,建議啟用CAP_SYS_NICE功能的方法是修改MySQL服務(wù)文件并保持mysqld二進(jìn)制文件不變。要調(diào)整MySQL的服務(wù)文件,請(qǐng)使用以下過(guò)程:
(1)為您的平臺(tái)運(yùn)行適當(dāng)?shù)拿睿?/h3>
a, Oracle Linux、Red Hat和Fedora系統(tǒng):
$> sudo systemctl edit mysqld
b. SUSE、Ubuntu和Debian系統(tǒng):
$> sudo systemctl edit mysql
(2)使用編輯器,將以下文本添加到服務(wù)文件中:
[Service] AmbientCapabilities=CAP_SYS_NICE
(3)重新啟動(dòng)MySQL服務(wù)
如果不能像剛才描述的那樣啟用CAP_SYS_NICE功能,可以使用setcap命令手動(dòng)設(shè)置它,指定mysqld可執(zhí)行文件的路徑名(這需要sudo訪問(wèn)權(quán)限)。您可以使用getcap檢查功能。例如:
$> sudo setcap cap_sys_nice+ep /path/to/mysqld $> getcap /path/to/mysqld /path/to/mysqld = cap_sys_nice+ep
作為一項(xiàng)安全措施,將mysqld二進(jìn)制文件的執(zhí)行限制為root用戶(hù)和具有mysql組成員身份的用戶(hù):
$> sudo chown root:mysql /path/to/mysqld $> sudo chmod 0750 /path/to/mysqld
如果需要手動(dòng)使用setcap,則必須在每次重新安裝后進(jìn)行。
在Windows上,線程以五個(gè)線程優(yōu)先級(jí)之一運(yùn)行。資源組線程優(yōu)先級(jí)范圍-20到19映射到下表所示的級(jí)別。

到此這篇關(guān)于詳解MySQL資源組的使用方法的文章就介紹到這了,更多相關(guān)MySQL資源組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mysql篩選GROUP BY多個(gè)字段組合時(shí)的用法分享
- mysql分組取每組前幾條記錄(排名) 附group by與order by的研究
- MySql中having字句對(duì)組記錄進(jìn)行篩選使用說(shuō)明
- php查詢(xún)mysql數(shù)據(jù)庫(kù)并將結(jié)果保存到數(shù)組的方法
- 詳解MySQL中的分組查詢(xún)與連接查詢(xún)語(yǔ)句
- MYSQL每隔10分鐘進(jìn)行分組統(tǒng)計(jì)的實(shí)現(xiàn)方法
- mysql獲取分組后每組的最大值實(shí)例詳解
- MySql Group By對(duì)多個(gè)字段進(jìn)行分組的實(shí)現(xiàn)方法
- mysql根據(jù)json字段內(nèi)容作為查詢(xún)條件(包括json數(shù)組)檢索數(shù)據(jù)
相關(guān)文章
Windows下MySQL5.6查找my.ini配置文件的方法
今天小編就為大家分享一篇Windows下MySQL5.6查找my.ini配置文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
MySQL如何利用DCL管理用戶(hù)和控制權(quán)限
這篇文章主要介紹了MySQL如何利用DCL管理用戶(hù)和控制權(quán)限,幫助大家更好的理解和學(xué)習(xí)MySQL的使用,感興趣的朋友可以了解下2020-11-11
阿里云 Centos7.3安裝mysql5.7.18 rpm安裝教程
這篇文章主要介紹了阿里云 Centos7.3安裝mysql5.7.18 rpm安裝教程,需要的朋友可以參考下2017-06-06
MySQL占用內(nèi)存較大與CPU過(guò)高測(cè)試與解決辦法
為了裝mysql環(huán)境測(cè)試,裝上后發(fā)現(xiàn)啟動(dòng)后MySQL占用內(nèi)存了很大,達(dá)8百多兆。網(wǎng)上搜索了一下,得到高人指點(diǎn)my.ini。再也沒(méi)見(jiàn)再詳細(xì)的了..只好打開(kāi)my.ini逐行的啃,雖然英文差了點(diǎn),不過(guò)多少M(fèi)還是看得明的2018-03-03
MySQL中按月統(tǒng)計(jì)并逐月累加統(tǒng)計(jì)值的幾種實(shí)現(xiàn)寫(xiě)法
有時(shí)候,我們可能有這樣的場(chǎng)景,需要將銷(xiāo)量按月統(tǒng)計(jì),并且按月逐月累加,本文就來(lái)介紹一下MySQL中按月統(tǒng)計(jì)并逐月累加統(tǒng)計(jì)值的幾種實(shí)現(xiàn)寫(xiě)法,感興趣的可以了解一下2023-10-10
逐步講解MySQL中定時(shí)事件計(jì)劃的創(chuàng)建
這篇文章主要介紹了MySQL中定時(shí)事件計(jì)劃的創(chuàng)建,包括對(duì)于MySQL定時(shí)器的用戶(hù)事件權(quán)限作出了解釋說(shuō)明,需要的朋友可以參考下2016-05-05
MySQL對(duì)字符串使用STR_TO_DATE()函數(shù)詳解
文章介紹了MySQL中的STR_TO_DATE()函數(shù),用于將字符串轉(zhuǎn)換為日期時(shí)間類(lèi)型,轉(zhuǎn)換時(shí)需要注意字符串格式、日期有效性等問(wèn)題2025-03-03

