Oracle
 sql >> Base de données >  >> RDS >> Oracle

Collecte de statistiques incrémentielles dans 11g

La base de données -11g a introduit la nouvelle fonctionnalité de collecte de statistiques incrémentielles

-Les statistiques incrémentielles ne fonctionneront que pour les tables partitionnées où les statistiques globales sont mises à jour de manière incrémentielle en analysant uniquement les partitions qui ont changé depuis la dernière exécution. Généralement, les dernières partitions sont celles où les données sont insérées et la plupart des partitions plus anciennes restent intactes. Avec l'activation des statistiques incrémentielles sur une table, seules les statistiques sur ces partitions sont collectées là où il y a des DML, les autres ne sont pas analysés, ce qui permettrait de gagner beaucoup de temps.

-Les tables partitionnées sont volumineuses et si nous devons collecter régulièrement des statistiques à ce sujet, cela prendrait beaucoup de temps et la collecte de statistiques incrémentielles réduit le temps nécessaire pour collecter des statistiques

Exemple de fonctionnalité de collecte de statistiques incrémentielles d'Oracle 11g dans Oracle E-Business Suite.

Prenons l'exemple de xla_ae_lines qui est une table de partition et qui contient de nombreux enregistrements dans une instance ERP très utilisée

Cas de test sans définition de préférence incrémentielle

-Créez une table xla_ae_lines_bkp en tant que table de partition pour effectuer ce cas de test
– Insérez les données de la table xla_ae_lines

insert into xla.xla_Ae_lines_bkp select * from xla.xla_ae_lines;

2119409 lignes créées.

-régler l'heure sur le timing sur

exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
Procédure PL/SQL terminée avec succès.
Écoulé :00 :00:49.06
  • Il a fallu 49,06 secondes pour recueillir les statistiques pour la première fois après l'insertion des données.
  • Vérifier les statistiques et le niveau global et de partition
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           dernière_analyse

—————————— —————————

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       dernière_analyse

—————————— —————————

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

PLAISIR 09-SEP-16 10:04:23

FV 09-SEP-16 10:04:23

FMV 09-SEP-16 10:04:23

CGI 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

  • Supprimez les données de l'une des partitions pour vérifier comment les statistiques sont calculées
supprimer de xla.xla_ae_lines_bkp où application_id=222 ;
  • Collecte des statistiques à l'aide de fnd_Stats
    exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
    Procédure PL/SQL terminée avec succès.
    Écoulé :00:00:25.06
  • Après avoir supprimé les données, vous avez collecté des statistiques sans définir de préférence. Cela a pris 25,06 secondes
  • Vérification des statistiques globales et des statistiques de partition
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 dernière_analyse

—————————— —————————

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 dernière_analyse

—————————— —————————

AP 09-SEP-16  10:20:14

AR 09-SEP-16  10:20:14

CE 09-SEP-16  10:20:14

HNC 09-SEP-16  10:20:15

DPP 09-SEP-16  10:20:15

FUN 09-SEP-16  10:20:15

FV 09-SEP-16  10:20:15

FMV 09-SEP-16  10:20:15

CGI 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

REMARQUE :les statistiques sont collectées sur toutes les partitions même si seules les données de la partition AR sont supprimées, last_analyzed est mis à jour pour toutes les partitions

Cas de test avec définition de préférence incrémentielle

  • Supprimez et recréez la table xla_ae_lines_bkp en tant que table de partition pour effectuer ce cas de test

  • Insérer les données de la table xla_ae_lines

insert into xla.xla_Ae_lines_bkp select * from xla.xla_ae_lines;

2119409 lignes créées.

-régler l'heure sur le timing sur

exec dbms_stats.set_table_prefs(‘XLA’,’XLA_AE_LINES_BKP’,’INCREMENTAL’,’TRUE’);
  • Vérifiez si la préférence est définie
sélectionnez dbms_stats.get_prefs(‘INCREMENTAL’,’XLA’,’XLA_AE_LINES_BKP’) de dual ;

DBMS_STATS.GET_PREFS('INCREMENTAL','XLA','XLA_AE_LINES_BKP')

—————————————————————

VRAI

  • Recueillir des statistiques après avoir défini la préférence.
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);

Procédure PL/SQL terminée avec succès.

Écoulé :00:00:25.91

  • Après avoir défini la préférence, il a fallu 25,91 secondes pour collecter les statistiques pour la première fois après l'insertion des données
  • vérification des informations de synchronisation des statistiques
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 dernière_analyse

——————————   —————————

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 dernière_analyse

—————————— —————————

AP 09-SEP-16  10:35:30

AR 09-SEP-16  10:35:12

CE 09-SEP-16  10:35:10

HNC 09-SEP-16  10:35:21

DPP 09-SEP-16  10:35:21

FUN 09-SEP-16  10:35:12

FV 09-SEP-16  10:35:10

FMV 09-SEP-16  10:35:10

CGI 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

  • Suppression des données d'une partition pour voir comment la collecte de statistiques incrémentielles sera utile la prochaine fois que des statistiques seront collectées.
supprimer de xla_ae_lines_bkp où application_id=222 ;

100233 lignes supprimées

  • Recueillir des statistiques après la suppression des données de l'application_id 222 partition AR
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);

Procédure PL/SQL terminée avec succès.

Écoulé :00:00:4.11

  • Après la suppression des données d'une partition, la collecte de statistiques incrémentielles a pris 4,11 secondes
  • Vérifier les statistiques globales et de partition
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 dernière_analyse

—————————— —————————

XLA_AE_LINES_BKP 09-SEP-16  10:45:18

select partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" from dba_Tab_partitions where ta

ble_name comme 'XLA_AE_LINES_BKP';

PARTITION_NAME dernière_analyse

—————————— —————————

AP 09-SEP-16  10:35 :30

AR 09-SEP-16  10:45:18

CE 09-SEP-16  10:35 :10

HNC 09-SEP-16  10:35 :21

DPP 09-SEP-16  10:35 :21

PLAISIR 09-SEP-16  10:35 :12

VEN 09-SEP-16  10:35 :10

GMF 09-SEP-16  10:35 :10

CGI 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

Remarques importantes :les statistiques sont collectées, la date de la dernière analyse est modifiée uniquement pour la partition AR et le délai a également été réduit.

Nous voyons donc que la collecte de statistiques incrémentielles réduit le temps de collecte des statistiques et peut être très bénéfique pour les grandes tables de partition.