自動SQLチューニング

(8.0.26)

調べた限りなし

(19c)

https://docs.oracle.com/cd/F19136_01/tgsql/sql-tuning-advisor.html#GUID-87D3AA10-60CE-4F5B-879B-B2E851874B83

自動SQLチューニング


自動実装が有効になっている場合、アドバイザはSQLプロファイルを作成するための推奨事項のみを実装します。
新しい索引の作成、オプティマイザ統計の収集、SQL計画ベースラインの作成などの推奨事項は、自動的には実装されません。


ACCEPT_SQL_PROFILES

-- ルート・コンテナで実行

exec DBMS_AUTO_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER( -
   parameter   => 'ACCEPT_SQL_PROFILES', -
   value      =>'TRUE');

exec DBMS_AUTO_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER( -
   parameter   => 'ACCEPT_SQL_PROFILES', -
   value      =>'FALSE');

 

select * from DBA_ADVISOR_PARAMETERS
where PARAMETER_NAME = 'ACCEPT_SQL_PROFILES'
;

select * from DBA_ADVISOR_PARAMETERS
where TASK_NAME = 'SYS_AUTO_SQL_TUNING_TASK'
and PARAMETER_VALUE !='UNUSED'
;


select * from DBA_AUTOTASK_WINDOW_CLIENTS;


show parameter ENABLE_AUTOMATIC_MAINTENANCE_PDB;

デフォルトでは、ENABLE_AUTOMATIC_MAINTENANCE_PDBが、CDB$ROOT (CDBのルート・コンテナ)およびCDBの個別のPDBでtrueになっています。
これは、デフォルトで、自動メンテナンス・タスクがCDBルートおよびCDBのすべてのPDBに対して実行されることを意味します。

 

 

(13)

pg_plan_advsr
https://github.com/ossc-db/pg_plan_advsr
https://qiita.com/nuko_yokohama/items/6e54b1fe412fe96c9873


前提
OS: CentOS7


-- 1. DBインストール
yum -y install git gcc krb5-devel openssl-devel

yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm


yum info postgresql13-server -y
yum -y install epel-release centos-release-scl

yum -y install postgresql13-server postgresql13-contrib postgresql13-devel postgresql13-libs
/usr/pgsql-13/bin/postgres --version

export PGSETUP_INITDB_OPTIONS='-E UTF8 --locale=C'
/usr/pgsql-13/bin/postgresql-13-setup initdb

systemctl enable postgresql-13
systemctl start postgresql-13
systemctl status postgresql-13

su - postgres
psql
create database test;


-- 2. pg_plan_advsrインストール


git clone https://github.com/ossc-db/pg_hint_plan.git
git clone https://github.com/ossc-db/pg_store_plans.git
git clone https://github.com/ossc-db/pg_plan_advsr.git

cd pg_hint_plan
git checkout -b PG13 origin/PG13 && git checkout $(git describe --tag)
cd ../pg_store_plans 
git checkout $(git describe --tag)

 

cd ../pg_hint_plan
make PG_CONFIG=/usr/pgsql-13/bin/pg_config
sudo make PG_CONFIG=/usr/pgsql-13/bin/pg_config install
cp pg_stat_statements.c ../pg_plan_advsr/
cp normalize_query.h ../pg_plan_advsr/

 

cd ../pg_store_plans
sudo make PG_CONFIG=/usr/pgsql-13/bin/pg_config USE_PGXS=1 all install
cp pgsp_json*.[ch] ../pg_plan_advsr/


cd ../pg_plan_advsr/
git describe --alway

make PG_CONFIG=/usr/pgsql-13/bin/pg_config 
sudo make PG_CONFIG=/usr/pgsql-13/bin/pg_config  install


vim $PGDATA/postgresql.conf

shared_preload_libraries = 'pg_hint_plan, pg_plan_advsr, pg_store_plans'
max_parallel_workers_per_gather = 0
max_parallel_workers = 0


sudo systemctl restart postgresql-13

psql test

create extension pg_hint_plan;
create extension pg_store_plans;
create extension pg_plan_advsr;

\dx


-- 3. 動作確認
-- 参考サイトの再現不可。最初からNLになる

drop table t1;
create table t1 (a int, b int);
insert into t1 (select a, random() * 1000 from generate_series(0, 999999) a);
create index i_t1_a on t1 (a);
analyze t1;

drop table t2;
create table t2 (a int, b int);
insert into t2 (select a, random() * 1000 from generate_series(0, 999999) a);
create index i_t2_a on t2 (a);
analyze t2;

 

explain analyze 
with x as (
    select * 
    from   t1 
    limit 20010

select * 
from (  select *
        from   t1 
        where  a in (select a from x)
     ) tmp,
       t2 
where tmp.a = t2.a;

 

select pg_plan_advsr_enable_feedback();
select pg_plan_advsr_disable_feedback();

 

show pg_plan_advsr.enabled;
show pg_hint_plan.enable_hint_table;
show pg_hint_plan.debug_print;

 

select * from plan_repo.plan_history;
select * from plan_repo.norm_queries;
select * from plan_repo.raw_queries;

 

 

 

 

(2019)
https://docs.microsoft.com/ja-jp/sql/relational-databases/automatic-tuning/automatic-tuning?view=sql-server-ver15

自動プラン修正

自動チューニングを SQL Server 使用すると、 
クエリ実行プランの選択の回帰 によって発生するパフォーマンスの問題を特定し、修正することができます


※自動プラン修正は、ワークロード追跡のためにデータベースで有効になっているクエリストアに依存します。

--クエリのストアを有効にする
ALTER DATABASE test SET QUERY_STORE = ON; 
go

-- 自動プラン選択修正の有効化
ALTER DATABASE test
SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON );
go

このオプションを有効にすると、では、 データベース エンジン 推定 CPU 到達率が10秒を超える場合、
または新しいプランのエラー数が推奨されるプランのエラー数よりも多い場合、によって自動的に推奨設定が強制されます。
また、強制されたプランが現在のプランより優れていることを確認します。

select name,is_query_store_on from sys.databases;
go

SELECT * FROM sys.database_automatic_tuning_options
go