全部產品
Search
文件中心

PolarDB:Thread Pool

更新時間:Jul 13, 2024

為了發揮出PolarDB MySQL版的最佳效能,PolarDB提供線程池(Thread Pool)功能,將線程和會話分離,在擁有大量會話的同時,只需要少量線程完成活躍會話的任務即可。

優勢

MySQL預設的線程使用模式是會話獨佔模式,每個會話都會建立一個獨佔的線程。當有大量的會話存在時,會出現大量的資源競爭導致效能下降。同時大量的系統線程調度和緩衝失效也會導致效能急劇下降。

PolarDB的線程池實現了不同類型SQL操作的優先順序及並發控制機制,將串連數始終控制在最佳串連數附近,使PolarDB資料庫在高串連大並發情況下始終保持高效能。線程池的優勢如下:

  • 當大量線程並發工作時,線程池會自動調節並發的線程數量在合理的範圍內,從而避免線程調度工作過多和大量緩衝失效。

  • 大量的事務並發執行時,線程池會將語句和事務分為不同的優先順序,分別控制語句和事務的並發數量,從而減少資源競爭。

  • 線程池給予管理類的SQL語句更高的優先順序,保證這些語句優先執行。這樣在系統負載很高時,建立串連、管理、監控等操作也能夠穩定執行。

  • 線程池給予複雜查詢SQL語句相對較低的優先順序,並且有最大並發數的限制。這樣可以避免過多的複雜SQL語句將系統資源耗盡,導致整個資料庫服務不可用。

使用Thread Pool

Thread Pool設計了以下參數,您可以在控制台進行修改。具體請參見設定叢集參數和節點參數

參數名稱

說明

loose_thread_pool_enabled

是否開啟線程池功能。取值:

  • ON

  • OFF

預設值:OFF。

說明

開啟或關閉線程池功能無需重啟執行個體。

loose_thread_pool_size

線程池中線程組的數量。取值範圍與叢集中主節點規格的CPU核心數有關。

取值:DBNodeClassCPU~DBNodeClassCPU*10。

預設值:DBNodeClassCPU*2。

說明
  • DBNodeClassCPU為主節點規格的CPU核心數,整數類型。

  • 資料庫引擎MySQL 5.7版本預設值為DBNodeClassCPU。

舉例如下:

  • 資料庫引擎MySQL 8.0.1叢集版系列中,主節點規格為4核8 GB,其取值範圍和預設值分別為4~40和8。

  • 資料庫引擎MySQL 8.0.1多主叢集(庫表)系列中,兩個主節點規格為4核8 GB,其取值範圍和預設值分別為8~80和16。

  • 資料庫引擎MySQL 5.7叢集版系列中,主節點規格為4核8 GB,其取值範圍和預設值分別為4~40和4。

loose_thread_pool_high_prio_mode

線程池高優先順序隊列模式。取值:

  • transactions:已開啟事務的SQL將被加入高優先順序隊列,並被賦予thread_pool_high_prio_tickets這個門票,接下來執行的SQL都將被放入高優先順序隊列,直到門票被耗盡。

  • statements:所有SQL都會加入高優先順序隊列。

  • none:所有SQL都不加入高優先順序隊列。

預設值:transactions。

說明

PolarDB MySQL版5.6和5.7版本支援該參數。

loose_thread_pool_high_prio_tickets

高優先順序隊列的單次門票數。

取值:0~4294967295。

預設值:4294967295。

說明

PolarDB MySQL版5.6和5.7版本支援該參數。

loose_thread_pool_idle_timeout

釋放線程池空閑線程的時間閾值,超過此時間,沒有服務任何請求的空閑線程將被釋放。

取值:0~31536000。

預設值:60。

單位:秒。

說明

PolarDB MySQL版5.6和5.7版本支援該參數。

loose_thread_pool_oversubscribe

每個線程組中允許的活躍線程的數量。

活躍線程是指正在執行SQL語句的線程,但是不包括以下兩種情形:

  • SQL語句在等待磁碟I/O。

  • SQL語句在等待事務提交。

取值:1~1000。

預設值:10。

loose_thread_pool_stall_limit

判斷線程池進入擁塞狀態的時間閾值。

當線程池進入擁塞狀態時,系統會建立新的線程來服務SQL。

取值:1~18446744073709551615。

預設值:5。

單位:毫秒。

說明

資料庫引擎MySQL 5.6版本預設值為30毫秒。

loose_bypass_thread_pool_ips

配置不受線程池限制的用戶端IP地址。即便線程池被佔滿時,也可以執行SQL來進行一些管理操作。

配置樣本:

10.69.96.16,10.69.96.17
說明

PolarDB MySQL版8.0.1.1.19及之後版本支援該參數。

loose_bypass_thread_pool_check_ignore_proxy

通過loose_bypass_thread_pool_ips檢測用戶端IP地址時,是否忽略通過Proxy串連的用戶端IP地址。取值:

  • ON:表示對於通過Proxy串連的用戶端IP地址,即便loose_bypass_thread_pool_ips配置了該用戶端IP地址,也要受線程池功能的約束。

  • OFF:表示對於通過Proxy串連的用戶端IP地址,如果loose_bypass_thread_pool_ips配置了該用戶端IP地址,則不受線程池功能的約束。

預設值:ON。

說明

PolarDB MySQL版8.0.1.1.19及之後版本支援該參數。

loose_thread_pool_high_priority_users

配置高優先順序別的資料庫帳號。配置後這些帳號的請求將會被放到線程池的高優先順序隊列中,優先進行處理。

配置樣本:

user1, user2
說明
  • PolarDB MySQL版8.0.1.1.19及之後版本支援該參數。

  • 配置該參數後,僅對建立的資料庫連接生效。

  • 不建議您配置過多的高優先順序帳號。

loose_thread_pool_mark_ddl_thread_timeout_sec

配置DDL的線程池逾時時間閾值。超過此時間後,將DDL標記為逾時狀態,系統會建立新的線程來處理請求。

取值:0~864000。

預設值:600。

單位:秒。

說明

PolarDB MySQL版8.0.1.1.19及之後版本支援該參數。

loose_thread_pool_mark_ddl_thread_timeout_immediately

線上程池處於高負載狀態,造成低優先順序隊列發生堆積時,是否立刻將DDL標記為逾時狀態,此時系統會建立新的線程來處理請求。該參數適用於需要經常批量DDL的業務情境中。取值:

  • ON

  • OFF

預設值:OFF。

說明

PolarDB MySQL版8.0.1.1.19及之後版本支援該參數。

查詢Thread Pool狀態

您可以通過如下命令查詢Thread Pool狀態:

select * from information_schema.THREAD_POOL_STATUS;

返回樣本如下所示。

mysql> select * from information_schema.THREAD_POOL_STATUS;
+----+--------------+---------------------+----------------------+-------------------+---------------------------+------------------+-----------------+------------------+
| ID | THREAD_COUNT | ACTIVE_THREAD_COUNT | WAITING_THREAD_COUNT | DUMP_THREAD_COUNT | SLOW_THREAD_TIMEOUT_COUNT | CONNECTION_COUNT | LOW_QUEUE_COUNT | HIGH_QUEUE_COUNT |
+----+--------------+---------------------+----------------------+-------------------+---------------------------+------------------+-----------------+------------------+
|  0 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
|  1 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
|  2 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
|  3 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
|  4 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
|  5 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
|  6 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
|  7 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
|  8 |            1 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
|  9 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 10 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 11 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 12 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 13 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 14 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 15 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 16 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 17 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 18 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 19 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 20 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 21 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 22 |            2 |                   1 |                    0 |                 0 |                         0 |                1 |               0 |                0 |
| 23 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 24 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 25 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 26 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 27 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 28 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 29 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 30 |            2 |                   0 |                    0 |                 0 |                         0 |                1 |               0 |                0 |
| 31 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 32 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 33 |            2 |                   0 |                    0 |                 0 |                         0 |                1 |               0 |                0 |
| 34 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 35 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 36 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 37 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 38 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 39 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 40 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 41 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 42 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 43 |            1 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 44 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 45 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 46 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 47 |            3 |                   1 |                    0 |                 0 |                         0 |                1 |               0 |                0 |
| 48 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 49 |            3 |                   1 |                    0 |                 0 |                         0 |                1 |               0 |                0 |
| 50 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 51 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 52 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 53 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 54 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 55 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 56 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 57 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 58 |            1 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 59 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 60 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 61 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 62 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
| 63 |            2 |                   0 |                    0 |                 0 |                         0 |                0 |               0 |                0 |
+----+--------------+---------------------+----------------------+-------------------+---------------------------+------------------+-----------------+------------------+
64 rows in set (0.00 sec)

參數說明如下。

參數

說明

ID

線程池ID。

THREAD_COUNT

線程池中的線程數。

ACTIVE_THREAD_COUNT

線程池中的活躍線程數。

WAITING_THREAD_COUNT

線程池中正在等待磁碟I/O、事務提交的線程數。

DUMP_THREAD_COUNT

線程池中DUMP類長串連數量。

SLOW_THREAD_TIMEOUT_COUNT

線程池中被標記逾時的線程數。

CONNECTION_COUNT

線程池中已建立的使用者串連數。

LOW_QUEUE_COUNT

線程池中低優先順序隊列中等待的請求數。

HIGH_QUEUE_COUNT

線程池中高優先順序隊列中等待的請求數。

Sysbench測試

如下是開啟線程池和不開啟線程池的效能對比。從測試結果可以看出線程池在高並發的情況下有著明顯的效能優勢。

圖 1. OLTP無索引更新測試OLTP無索引更新

圖 2. OLTP唯寫測試OLTP唯寫

圖 3. OLTP唯讀測試OLTP唯讀

圖 4. OLTP讀寫測試OLTP讀寫測試