type
status
date
slug
summary
tags
category
icon
password
前言
在 Oracle、PostgreSQL、TiDB、Amazon Aurora ......等,不少資料庫中都有透過多個 CPU 加快查詢速度的並行查詢功能,終於 MySQL 8.0.14 的 release notes 中也出現了跟並行查詢有關的內容。
MySQL 8.0.14 release notes
InnoDB: InnoDB now supports parallel clustered index reads, which can improve CHECK TABLE performance. This feature does not apply to secondary index scans.
看完之後雖然被潑了個冷水,文檔中提到目前只有用在
CHECK TABLE
的功能上。不過爬文之後發現因為是透過並行讀取 clustered index(聚簇索引)
因此還能用在 SELECT COUNT(*) FROM table
上,但是這還要再加一個不能有 WHERE
條件的限制。相關參數
innodb_parallel_read_threads

定義可用於並行讀取
clustered index(聚簇索引)
的線程數,此功能不適用於 secondary index(二級索引
。此功能可以用於提升CHECK TABLE
的性能。只有在此參數大於1時,才會使用並行查詢,實際上調用的線程數會由此參數和要掃描的索引子樹數量中取較小的數值決定。掃描期間讀入buffer pool 的 page 會於 LRU 列表的末尾,以便在需要空閒的 buffer pool 時快速丟棄到。
從 8.0.17 開始,也支持並行掃描
partition(分區)
,此外當所有 client 端的連接的總線程數超過最大值(256)時,會退回到使用單個線程。測試
心得
雖然目前基本上無法實際上使用並行查詢來加快查詢速度,但這表示未來有機會在 MySQL 上透過並行查詢的功能加快查詢速度,因此即便目前不實用,但這是一個很好的開始。