-11gデータベースは、インクリメンタル統計収集の新機能を導入しました
-増分統計は、前回の実行から変更されたパーティションのみをスキャンすることによってグローバル統計が増分更新されるパーティションテーブルでのみ機能します。通常、最新のパーティションはデータが挿入され、ほとんどの場合古いパーティションは変更されません。テーブルでインクリメンタル統計を有効にすると、DMLが存在するパーティションでのみ統計が収集され、残りはスキャンされないため、時間を大幅に節約できます。
-パーティション化されたテーブルは大きなものであり、これに関する統計を定期的に収集する必要がある場合は、非常に時間がかかります。増分統計収集により、統計収集に必要な時間が短縮されます
OracleE-BusinessSuiteのOracle11gインクリメンタル統計収集機能の例。
パーティションテーブルであり、頻繁に使用されるERPインスタンスに多くのレコードがあるxla_ae_linesの例を見てみましょう
増分プリファレンスを設定しないテストケース
-このテストケースを実行するためのパーティションテーブルとしてテーブルxla_ae_lines_bkpを作成します
–xla_ae_linesテーブルからデータを挿入します
xla.xla_Ae_lines_bkpに挿入select*from xla.xla_ae_lines;
2119409行が作成されました。 |
-タイミングオンの時間を設定
exec fnd_stats.gather_table_stats('XLA'、'XLA_AE_LINES_BKP'); PL / SQLプロシージャが正常に完了しました。 経過:00: 00:49.06 |
- データ挿入後、初めて統計を収集するのに49.06秒かかりました。
- 統計とグローバルおよびパーティションレベルを確認します
select table_name、to_Char(last_analyzed、’DD-MON-YY HH24:MI:SS’)“ last_analyzed” from dba_Tables where table_name like‘XLA_AE_LINES_BKP’;
TABLE_NAME last_analyzed —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:04:34
select partition_name、to_Char(last_analyzed、’DD-MON-YY HH24:MI:SS’)“ last_analyzed” from dba_Tab_partitions where table_name like‘XLA_AE_LINES_BKP’; PARTITION_NAME last_analyzed —————————— ———————— AP 09-SEP-16 10:04:15 AR 09-SEP-16 10:04:16 CE 09-SEP-16 10:04:16 CST 09-SEP-16 10:04:23 DPP 09-SEP-16 10:04:23 楽しい09-SEP-1610:04:23 FV 09-SEP-16 10:04:23 GMF 09-SEP-16 10:04:23 IGC 09-SEP-16 10:04:23 IGI 09-SEP-16 10:04:23 LNS 09-SEP-16 10:04:23 OFA 09-SEP-16 10:04:23 OKL 09-SEP-16 10:04:23 OZF 09-SEP-16 10:04:23 PA 09-SEP-16 10:04:24
|
- パーティションの1つからデータを削除して、統計がどのように計算されているかを確認します
xla.xla_ae_lines_bkpから削除します。ここでapplication_id=222; |
- fnd_Statsを使用した統計の収集
execfnd_stats.gather_table_stats('XLA'、'XLA_AE_LINES_BKP');
PL / SQLプロシージャが正常に完了しました。
経過:00:00:25.06 > - 実行されたデータを削除した後、プリファレンスを設定せずに統計を収集します。 25.06秒かかりました
- グローバル統計とパーティション統計の確認
select table_name、to_Char(last_analyzed、’DD-MON-YY HH24:MI:SS’)“ last_analyzed” from dba_Tables where table_name like‘XLA_AE_LINES_BKP’;
TABLE_NAME last_analyzed —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:20:26 select partition_name、to_Char(last_analyzed、’DD-MON-YY HH24:MI:SS’)“ last_analyzed” from dba_Tab_partitions where table_name like‘XLA_AE_LINES_BKP’; PARTITION_NAME last_analyzed —————————— ———————— AP 09-SEP-16 10:20:14 AR 09-SEP-16 10:20:14 CE 09-SEP-16 10:20:14 CST 09-SEP-16 10:20:15 DPP 09-SEP-16 10:20:15 楽しい09-SEP-1610:20:15 FV 09-SEP-16 10:20:15 GMF 09-SEP-16 10:20:15 IGC 09-SEP-16 10:20:15 IGI 09-SEP-16 10:20:15 LNS 09-SEP-16 10:20:16 OFA 09-SEP-16 10:20:16 OKL 09-SEP-16 10:20:16 OZF 09-SEP-16 10:20:16 PA 09-SEP-16 10:20:17
|
注:ARパーティションデータのみが削除されても、統計はすべてのパーティションで収集され、last_analyzedはすべてのパーティションで更新されます
増分プリファレンスを設定したテストケース
- このテストケースを実行するには、テーブルxla_ae_lines_bkpをパーティションテーブルとして削除して再作成します
- xla_ae_linesテーブルからデータを挿入します
xla.xla_Ae_lines_bkpに挿入select*from xla.xla_ae_lines;
2119409行が作成されました。 |
-タイミングオンの時間を設定
exec dbms_stats.set_table_prefs(‘XLA’、’XLA_AE_LINES_BKP’、’INCREMENTAL’、’TRUE’); |
- 設定が設定されているかどうかを確認します
デュアルからdbms_stats.get_prefs(‘INCREMENTAL’、’XLA’、’XLA_AE_LINES_BKP’)を選択します。
DBMS_STATS.GET_PREFS(‘INCREMENTAL’、’XLA’、’XLA_AE_LINES_BKP’) ———————————————————— 正しい |
- 設定後に統計を収集します。
exec fnd_stats.gather_table_stats(‘XLA’、’XLA_AE_LINES_BKP’);
PL/SQLプロシージャが正常に完了しました。 経過:00:00:25.91 |
- プリファレンスを設定した後、データ挿入後初めて統計を収集するのに25.91秒かかりました
- 統計のタイミング情報を確認する
select table_name、to_Char(last_analyzed、’DD-MON-YY HH24:MI:SS’)“ last_analyzed” from dba_Tables where table_name like‘XLA_AE_LINES_BKP’;
TABLE_NAME last_analyzed —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:35:32 select partition_name、to_Char(last_analyzed、’DD-MON-YY HH24:MI:SS’)“ last_analyzed” from dba_Tab_partitions where table_name like‘XLA_AE_LINES_BKP’; 18
PARTITION_NAME last_analyzed —————————— ———————— AP 09-SEP-16 10:35:30 AR 09-SEP-16 10:35:12 CE 09-SEP-16 10:35:10 CST 09-SEP-16 10:35:21 DPP 09-SEP-16 10:35:21 楽しい09-SEP-1610:35:12 FV 09-SEP-16 10:35:10 GMF 09-SEP-16 10:35:10 IGC 09-SEP-16 10:35:10 IGI 09-SEP-16 10:35:12 LNS 09-SEP-16 10:35:10 OFA 09-SEP-16 10:35:10 OKL 09-SEP-16 10:35:12 OZF 09-SEP-16 10:35:30 PA 09-SEP-16 10:35:12
|
- 1つのパーティションからデータを削除して、次回の統計収集時に増分統計収集がどのように役立つかを確認します。
xla_ae_lines_bkpから削除します。ここでapplication_id=222;
100233行が削除されました |
- application_id222パーティションARからデータを削除した後に統計を収集する
exec fnd_stats.gather_table_stats(‘XLA’、’XLA_AE_LINES_BKP’);
PL/SQLプロシージャが正常に完了しました。 経過:00:00:4.11 |
- 1つのパーティションのデータを削除した後、統計の増分収集に4.11秒かかりました
- グローバル統計とパーティション統計を確認する
select table_name、to_Char(last_analyzed、’DD-MON-YY HH24:MI:SS’)“ last_analyzed” from dba_Tables where table_name like‘XLA_AE_LINES_BKP’;
TABLE_NAME last_analyzed —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:45:18 dba_Tab_partitions where ta からpartition_name、to_Char(last_analyzed、’DD-MON-YY HH24:MI:SS’)“ last_analyzed”を選択します。ble_name like‘XLA_AE_LINES_BKP’; PARTITION_NAME last_analyzed —————————— ———————— AP 09-SEP-16 10:35:30 AR 09-SEP-16 10:45:18 CE 09-SEP-16 10:35:10 CST 09-SEP-16 10:35:21 DPP 09-SEP-16 10:35:21 楽しい09-SEP-1610:35:12 FV 09-SEP-16 10:35:10 GMF 09-SEP-16 10:35:10 IGC 09-SEP-16 10:35:10 IGI 09-SEP-16 10:35:12 LNS 09-SEP-16 10:35:10 OFA 09-SEP-16 10:35:10 OKL 09-SEP-16 10:35:12 OZF 09-SEP-16 10:35:30 PA 09-SEP-16 10:35:12
|
注意すべき重要な点は、統計が収集され、最後の分析日がARパーティションについてのみ変更され、タイミングも短縮されたことです。
したがって、増分統計収集は統計収集のタイミングを短縮し、大規模なパーティションテーブルに非常に役立つ可能性があることがわかります。