2017-03-01 28 views
1

我有最新的MySQL 5.7安裝MySQL服務器只使用1出48個CPU核心與GROUP BY查詢

高端CPU 48核服務器,我有點驚訝的是,與GROUP BY執行查詢時,無論怎樣我格式化我的查詢我得到只有1 CPU核心用於該查詢,清楚地說明由htop輸出

當然,我可以同時執行多個查詢,這就是我可以使用所有核心,但它似乎不太方便,並不是每個查詢都可以拆分爲使用全服務器的電源

是否有任何MySQL擴展或SQL提示允許在使用GROUP BY處理數據時使用多個核心?

+0

您正在使用哪種引擎?據我所知,只有innoDB完全支持mutlicore cpu –

+0

MySQL(當前)不支持一個查詢的多個核心。 – Solarflare

+0

@Christian Felix:我使用InnoDB引擎 – Matthias

回答

2

作爲公認的答案被RolandoMySQLDBA到Possible to make MySQL use more than one core?問題說:

其實我討論innodb_thread_concurrency參數與一個MySQL專家在 的Percona的直播NYC會議早在2011年5月

我學到了一些東西令人吃驚:儘管存在文檔,但最好在0(無限併發)下保留innodb_thread_concurrency爲 。 這樣,InnoDB決定爲給定的MySQL實例設置打開innodb_concurrecy_tickets 的最佳數量。

一旦您設置innodb_thread_concurrency參數爲0,你可以設置 innodb_read_io_threads和innodb_write_io_threads(均從MySQL 5.1.38)至64最大值這應該聘請更多的內核。

這是我關於如何使MySQL的一般使用更多的內核迄今發現的最好的指導。

+0

您是否使用實際查詢測試了此建議並確認,在使用此設置後,您可以爲一個SQL查詢使用多個核心? – Matthias

+0

是的,我做到了。但是,我強調**一般表達**。這並不意味着在給定時間點的特定查詢肯定會使用多個核心。 – Shadow

+0

set global innodb_read_io_threads = 8 \t錯誤代碼:1238.變量'innodb_read_io_threads'是一個只讀變量 – weefwefwqg3

0

除了後臺線程,一個連接將只使用一個CPU內核。這適用於GROUP BY,UNION,PARTITION`,以及其他您可能認爲應該設法並行執行的任何操作。

該聲明至少通過MySQL 8.0和MariaDB 10.2適用於InnoDB。

第三方軟件可以使用多個核心:https://www.percona.com/blog/2014/05/01/parallel-query-mysql-shard-query/

此外,MariaDB 10.2中的「列存儲」可能使用多個核心。