web-dev-qa-db-ja.com

MySQLサーバーはGROUP BYクエリで48個のCPUコアのうち1個のみを使用します

最新のMySQL 5.7がインストールされたハイエンドの48 CPUコアサーバーを使用しています

GROUP BYを使用してクエリを実行すると、どのようにクエリをフォーマットしても、そのクエリに使用されるCPUコアは1つだけで、htop出力で明確に示されることに少し驚いています

もちろん、複数のクエリを同時に実行することもできます。これですべてのコアを使用できますが、あまり便利ではなく、すべてのクエリを分割してサーバーの能力をフルに活用できるわけではありません。

GROUP BYでデータを処理するときに複数のコアを使用できるようにするMySQL拡張機能またはSQLヒントはありますか?

9
Matthias

RolandoMySQLDBAが MySQLに複数のコアを使用できるようにすることは可能ですか? の質問の答えは次のとおりです。

実際、2011年5月に行われたPercona Live NYCカンファレンスでMySQLエキスパートとinnodb_thread_concurrencyについて話し合いました。

私は驚くべきことを学びました:ドキュメントにもかかわらず、innodb_thread_concurrencyを0(無限の同時実行性)のままにするのが最善です。このようにして、InnoDBは、指定されたMySQLインスタンスのセットアップで開くのに最適なinnodb_concurrecy_ticketsの数を決定します。

Innodb_thread_concurrencyを0に設定すると、innodb_read_io_threadsおよびinnodb_write_io_threads(両方ともMySQL 5.1.38以降)を最大値の64に設定できます。これにより、より多くのコアを使用できるようになります。

これは、MySQLでより多くのコアを一般的に使用する方法について私が見つけた最高のガイダンスです。

6
Shadow

バックグラウンドスレッドは別として、1つの接続は1つのCPUコアのみを使用します。は、GROUP BYUNIONPARTITION、および並列で管理する必要があると思われるその他すべてに適用されます。

このステートメントは、少なくともMySQL 8.0およびMariaDB 10.2を通じてInnoDBに適用されます。

サードパーティソフトウェアは複数のコアを利用できます: https://www.percona.com/blog/2014/05/01/parallel-query-mysql-shard-query/

また、MariaDB 10.2の「列ストア」はおそらく複数のコアを使用します。

0
Rick James