MySQL 8.0已經正式發佈。這個版本包含不少有意思的特性,例如,更快、性能更好的Schema和Information Schema、原子DDL、UNDO空間回收等,在不少的網站,博客等上面都有大量的推廣介紹。本文將要介紹的一個頗有用的特性,資源組,反而沒有獲得充分的宣傳。若是沒有特別的說明,本文的例子針對的是Linux系統。sql
你們知道,MySQL實例裏面包含系統的後臺線程,例如Master Thread、IO Thread, Purge Thread等,也有處理用戶請求的前臺線程,在MySQL 8.0以前,全部的線程都是同等優先級的,官方的版本是不能夠修改線程的優先級的,也無法將線程綁定到特定的cpu核上。在某些業務場景下,咱們但願能夠來作干涉,例如,白天業務高峯的時候,讓用戶線程的優先級更高,而到晚上作批量處理的時候,讓負責批量處理的線程優先級更高,等等,另外,也但願能夠給特定的線程來綁定cpu核,來保證服務質量等…性能
使用MySQL 8.0資源組這個特性就能夠很方便的知足這些需求,要作的就是經過CREATE RESORUCE GROUP命令建立一個資源組,在這個DDL語句裏面指定這個的類型(USER 或者 SYSTEM類型),優先級 (-20..0 for SYSTEM 類型線程, 0..19 for USER類型線程,數字越小優先級越高),以及可使用的VCPU(邏輯CPU)的編號。以後,再使用SET RESOURCE GROUP語句將thread指派到某個組裏面便可。網站
注: 系統可用的VCPU編號能夠經過cat cat /proc/cpuinfo
命令查看,processor字段就是對應的VCPU的編號;在沒有開啓超線程的狀況下,邏輯CPU個數 = 物理CPU個數 * CPU內核數。ui
咱們來看幾個例子,spa
CREATE RESOURCE GROUP sql_thread TYPE = USER VCPU = 1,3 THREAD_PRIORITY = -20
SET RESOURCE GROUP sql_thread FOR 10
ALTER RESOURCE GROUP sql_thread VCPU = 5, 6 THREAD_PRIORITY = -5;
SYSTEM類型的Threads默認使用的是SYS_default資源組,USER類型的Threads默認使用的是USER_default資源組。看看這兩種資源組的屬性,沒有綁定邏輯CPU,默認優先級都是0,見下面的輸出 (例子環境下的邏輯CPU有24個,所有均可以使用)。線程