MySQL · 特性分析 · MySQL 8.0 資源組 (Resource Groups)

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

  • 建立一個叫sql_thread的資源組,將編號0和3的邏輯CPU指定到這個組,並將這個組的優先級設爲最高 (THREAD_PRIORITY值越小,優先級越高,-20是最小的值)。
CREATE RESOURCE GROUP sql_thread
    TYPE = USER
    VCPU = 1,3
    THREAD_PRIORITY = -20
  • 將某個活動的MySQL Thread指派到sql_thread資源組中,Thread的id值須要查詢Performance_Schema.threads的Thread_Id字段,目前Show Processlist命令的輸出還不直接能夠看到。
    SET RESOURCE GROUP sql_thread FOR 10
  • 修改資源組sql_thread綁定的邏輯CPU爲編號5,6,並下降優先級到-5。
ALTER RESOURCE GROUP sql_thread VCPU = 5, 6 THREAD_PRIORITY = -5;

SYSTEM類型的Threads默認使用的是SYS_default資源組,USER類型的Threads默認使用的是USER_default資源組。看看這兩種資源組的屬性,沒有綁定邏輯CPU,默認優先級都是0,見下面的輸出 (例子環境下的邏輯CPU有24個,所有均可以使用)。線程

相關文章
相關標籤/搜索