thread_concurrencyとparallel_query_workersの違い
MySQL/MariaDBで単一のクエリを複数のコアで実行する方法
MySQL/MariaDBは、デフォルトでは単一のコアでクエリを実行します。しかし、マルチコアCPUを使用している場合は、クエリを複数のスレッドに分割して実行することで、処理速度を向上させることができます。
方法
MySQL/MariaDBで単一のクエリを複数のコアで実行するには、以下の方法があります。
- thread_concurrency サーバ変数を設定する
thread_concurrency
サーバ変数を設定することで、MySQL/MariaDBが同時に実行できるスレッドの数を指定できます。この変数を設定するには、以下の手順を行います。
- MySQL/MariaDBサーバを停止します。
/etc/my.cnf
ファイルを開きます。- 以下の行を追加します。
thread_concurrency = <スレッド数>
- parallel_query_workers サーバ変数を設定する
parallel_query_workers = <スレッド数>
- SET @@max_parallel_workers を使用する
SET @@max_parallel_workers
を使用して、特定のクエリに対して実行できるスレッドの数を指定できます。この方法は、特定のクエリのみを高速化したい場合に有効です。
SET @@max_parallel_workers = <スレッド数>;
SELECT * FROM table;
注意事項
- 複数のスレッドでクエリを実行すると、データロックが発生する可能性があります。
- クエリを分割して実行するには、クエリが適切に分割できる必要があります。
- すべてのクエリが複数のコアで実行できるわけではありません。
MySQL/MariaDBで単一のクエリを複数のコアで実行する方法について、さらに詳しく知りたい場合は、上記の参考資料を参照してください。
この情報は参考用であり、予告なく変更されることがあります。
-- thread_concurrency サーバ変数を設定して、すべてのクエリを 2 つのスレッドで実行する
SET GLOBAL thread_concurrency = 2;
SELECT * FROM table;
-- parallel_query_workers サーバ変数を設定して、すべてのクエリを 4 つのスレッドで実行する
SET GLOBAL parallel_query_workers = 4;
SELECT * FROM table;
-- 特定のクエリを 3 つのスレッドで実行する
SET @@max_parallel_workers = 3;
SELECT * FROM table;
上記のサンプルコードは、MySQL/MariaDB 8.0 以降で使用できます。
- MySQL Workbench を使用する
MySQL Workbench は、MySQL/MariaDB を管理するための GUI ツールです。MySQL Workbench を使用して、クエリを複数のコアで実行するには、以下の手順を行います。
- 接続したいデータベースを選択します。
- SQL エディタでクエリを開きます。
- ツールバーの "実行" ボタンをクリックします。
- "実行オプション" ダイアログボックスで "スレッド数" を選択します。
- "OK" をクリックします。
- mysqldump を使用する
mysqldump は、MySQL/MariaDB のデータベースをダンプするためのコマンドラインツールです。mysqldump を使用して、クエリを複数のコアで実行するには、以下のコマンドを使用します。
mysqldump --parallel --threads=<スレッド数> <データベース名> <テーブル名> > dump.sql
- pt-query-digest を使用する
pt-query-digest は、MySQL/MariaDB のクエリのパフォーマンスを分析するためのツールです。pt-query-digest を使用して、クエリを複数のコアで実行するには、以下のコマンドを使用します。
pt-query-digest --parallel --threads=<スレッド数> <ログファイル名>
mysql mariadb