シャード表のオプティマイザ統計の収集
コーディネータ・データベースからシャード表の統計を収集できます。
統計プリファレンス・パラメータCOORDINATOR_TRIGGER_SHARD
がすべてのシャードでTRUE
に設定されている場合、コーディネータ・データベースはシャードで収集された統計をインポートできます。
PL/SQLプロシージャDBMS_STATS.GATHER_SCHEMA_STATS()
およびDBMS_STATS.GATHER_TABLE_STATS()
は、シャードおよびコーディネータ・データベース内のシャード表および重複表に関する統計を収集します。REPORT_GATHER_TABLE_STATS関数も参照してください。
手動統計収集
-
すべてのシャードで
COORDINATOR_TRIGGER_SHARD
をTRUE
に設定します。このステップは、1回のみシャードで実行されます。たとえば、
sharduser
という名前のスキーマがあるとします。connect / as sysdba EXECUTE DBMS_STATS.SET_SCHEMA_PREFS('SHARDUSER','COORDINATOR_TRIGGER_SHARD','TRUE');
-
シャード全体の統計を収集します。
ユーザーは全シャード・ユーザーであり、ディクショナリ表にアクセスする権限を持っている必要があります。
- シャードで、次を実行します。
connect sharduser/password EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'SHARDUSER', options => 'GATHER');
- すべてのシャードが完了したら、集計統計をプルするためにコーディネータで次を実行します。
connect sharduser/password EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'SHARDUSER', options => 'GATHER');
- すべてのシャードの統計を確認します。
connect sharduser/password ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS'; col TABLE_NAME form a40 set pagesize 200 linesize 200 SELECT TABLE_NAME, NUM_ROWS, sharded, duplicated, last_analyzed FROM user_tables WHERE table_name not like 'MLOG%' and table_name not like 'RUPD%' and table_name not like 'USLOG%';
- シャードで、次を実行します。
自動統計収集
-
すべてのシャードで
COORDINATOR_TRIGGER_SHARD
をTRUE
に設定します。このステップは、1回のみシャードで実行されます。たとえば、
sharduser
という名前のスキーマがあるとします。connect / as sysdba EXECUTE DBMS_STATS.SET_SCHEMA_PREFS('SHARDUSER','COORDINATOR_TRIGGER_SHARD','TRUE');
-
シャードおよびコーディネータ・データベースで集計された統計をプルするジョブをスケジュールします。
ユーザーは全シャード・ユーザーであり、ディクショナリ表にアクセスする権限を持っている必要があります。
シャードで次のジョブを開始します。
connect sharduser/password BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'Gather_Stats_2', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN DBMS_STATS.GATHER_SCHEMA_STATS(ownname => ''DEMO'', options => ''GATHER''); END;', start_date => SYSDATE, repeat_interval => 'freq=daily;byday=MON,TUE,WED,THU,FRI,SAT,SUN;byhour=14;byminute=10;bysecond=00', end_date => NULL, enabled => TRUE, comments => 'Gather table statistics'); END; /
すべてのシャードのジョブが終了したら、コーディネータで次のジョブを開始します。
connect sharduser/password BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'Gather_Stats_2', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN DBMS_STATS.GATHER_SCHEMA_STATS(ownname => ''DEMO'', options => ''GATHER''); END;', start_date => SYSDATE, repeat_interval => 'freq=daily;byday=MON,TUE,WED,THU,FRI,SAT,SUN;byhour=15;byminute=10;bysecond=00', end_date => NULL, enabled => TRUE, comments => 'Gather table statistics'); END; /