DBAtlas · データベース運用アトラス

オプティマイザ/並列処理の設定を表示/変更

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、クエリ構造がパフォーマンスを決める。

DBAtlas で開く →