🐡
パラレルクエリとは?
パラレルクエリとは
重いクエリを1つのプロセスで実行すると時間がかかってしまう為、
複数のプロセスに分散して処理速度を向上させる方法
クエリの実行を並列化することで複数のCPUを使用、性能向上を目指す仕組み
大量のデータに対して集計/分析を行うような場合に効果が期待できる
実行方法
- スキャン
- テーブルをいくつかの部分に分けて、それぞれの部分を同時に調べる(スキャンする)
- ジョイン
2. 複数のテーブルを組み合わせる操作を、複数のプロセスで分担して同時に行う - 集計
3. データの集計を複数の部分に分けて同時に行い、最後に結果をまとめる
使い方
Oracleの場合
SELECT /*+ PARALLEL(hoge, n) */ * FROM hoge;
PostgreSQLの場合
SET max_parallel_workers_per_gather = n;
SELECT * FROM hoge;
Microsoft SQL Serverの場合
SQL Serverは自動的に並列クエリを実行するが、以下を指定することもできる
- max degree of parallelism
- クエリが使用できる最大のプロセッサ数を指定する
- デフォルト値は0で、利用可能なすべてのプロセッサを使用する
- cost threshold for parallelism
- クエリのコストがこのしきい値を超えた場 合にのみ実行される
MySQLの場合
ユーザーからのクエリやDDL操作(ALTER,CREATEなど)はシングルスレッドで処理される
MySQL 8.0以降からInnoDBのクラスタインデックスのページを同時に読み取る機能がパラレルで処理されるようになった
クラスタインデックスとは?
テーブルにプライマリキーが設定されている場合、そのプライマリキーのこと
注意点
- 並列処理にはオーバーヘッドが発生するため、常に性能が向上するわけではない
- 多くのクエリが一度に実行されると、リソースの競合が発生することもある
- スロークエリとか
- 小さなデータセットや単純なクエリにはかえって逆効果となることがある
Discussion