Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
LAMI DBA

Articles autour des SGBD Oracle, SQL Server & PostgreSQL

ORACLE 12c - CTAS - Stats

 

Hello..


Entre deux versions, il y a parfois tellement de nouveautés que certaines ne nous apparaissent que plus tard, beaucoup plus tard...

Pas forcement qu'elles soient exceptionnelles... mais cependant, ll peut arriver de tomber sur une qui peut avoir le mérite de nous faire gagner du temps, ou dit autrement s'en y prendre garde faire quelque chose qui est déjà fait...

Or lorsqu'on parle de bases de données, on parle également souvent de problématique de performances..

Et quand on parle de problème de performance, une des premières choses qui nous vient à l'esprit (ou du moins qui devrait à mon sens) est d'éviter de faire quelque chose qui a déjà été fait...
Petit retour en arrière (quand même pas au moyen âge)... mais en 11.2.0.4

Que ce soit pour une application, ou pour des jeux de tests (pour le blog), il arrive fréquemment que nous soyons amenés à créer des tables de travail via un bon vieux CTAS (Create Table As Select).
Et une fois que l'on a crée la table... que fait-on.... Et bien on calcule les stats sur la dite table...

Et en fonction de la taille de la table, cela peut prendre un peu de temps.

Et oui lors de la création d'une table via un bon vieux CTAS, pas de stats...
Sur une un serveur en 11g..

 

SQL>
SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

SQL>


Création d'une table avec CTAS..

 


SQL>

SQL> create table lao_test as select * from dba_tables;

Table created.

SQL


Vérifions ce que l'on a comme informations au niveau des stats pour la table.

 


SQL>
SQL> set linesize 300
SQL> select table_name,num_rows,blocks,last_analyzed from dba_tables where table_name='LAO_TEST';

TABLE_NAME          NUM_ROWS     BLOCKS LAST_ANALYZED
----------          --------     ------ ------------  
LAO_TEST

SQL>


Je vous l'avais dit...
Mais voila qu'en 12c, va savoir pourquoi tout d'un coup je me suis posé la question... et je refais donc le même test.

 

SQL> column table_name for a20
SQL> set linesize 300
SQL> select table_name,num_rows,blocks,last_analyzed from dba_tables where table_name='LAO_TEST';

TABLE_NAME       NUM_ROWS     BLOCKS     LAST_ANALYZED
----------       ----------    ------    -------------
LAO_TEST            2112        102        17-APR-18

SQL>

Et la oh surprise ! Oracle dans sa grande bonté s'est dit que devant parcourir la table pour le CTAS, autant en récupérer des informations et peupler à minima les stats...

Remarque : Cela fonctionne également avec insert into ... select * from ....
Enjoy !

 

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article