オプティマイザ/並列処理の設定を表示/変更
Oracle
SHOW PARAMETER optimizer;
-- Session: ALTER SESSION SET optimizer_mode = FIRST_ROWS_10;
-- Parallelism: ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4;optimizer_index_cost_adj や parallel_degree_policy などの設定は実行計画の選択に影響する。慎重に変更すること。
PostgreSQL
SHOW random_page_cost;
SHOW max_parallel_workers_per_gather;
-- Session: SET enable_seqscan = off;SSD では random_page_cost ~1.1 が推奨される。enable_* フラグは診断用であり、恒久的な対策ではない。
MySQL
SELECT @@optimizer_switch;
SET SESSION optimizer_switch='index_merge=off';optimizer_switch は個々の最適化をオン/オフする。セッションレベルでテストする。
SQL Server
-- Instance-level MAXDOP and cost threshold:
EXEC sp_configure 'max degree of parallelism', 8; RECONFIGURE;
-- Database level: ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;MAXDOP=0 は無制限。OLTP では通常 4-8。「cost threshold for parallelism」のデフォルト 5 は多くの場合低すぎる。
MongoDB
# There are no optimizer parameters; indexes and query shape are decisive.
db.customer.find({...}).explain('allPlansExecution')allPlansExecution はプランナが評価したすべての実行計画を示す。
Redis
# Not applicable.プランナはない。io-threads とデータ構造の選択がパフォーマンスを決める。
Elasticsearch
GET <index>/_settings?include_defaults=true
# search limits such as search.max_buckets, index.max_result_windowオプティマイザはない。シャード数、routing、クエリ構造がパフォーマンスを決める。