IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Select count(*) sur table de 4 000 000 de lignes qui n'en finit pas. [11gR2]


Sujet :

Administration Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut Select count(*) sur table de 4 000 000 de lignes qui n'en finit pas.
    Bonjour,

    Je suis embêté avec une table qui a 4 806 570 enregistrements selon dba_tables.

    Si sous SQL*Plus ou Toad je fais un select count(*) from cette_table, j'ai le résultat au bout de 4, 5 minutesaprès le lancement; idem avec une autre table de 40 000 000 millions de lignes où c'est encore bien plus long.

    Là où c'est gênant c'est qu'avec le même Select sur une autre table qui a 1 247 073, j'ai un retour en 5 secondes donc ce n'est pas un problème d'environnement.

    Est-ce qu'il pourrait y avoir un verrou sur cette table ralentissant le select count(*)?

    je précise que si je fais un select * from cette_table, SQL*Plus m'affiche les résultats immédiatement donc il accède bien à cette table.

    J'avoue être un peu perdu face à ce problème; merci pour vos conseils
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Un verrou ne bloque pas la lecture, mais par contre de très nombreuses transactions en parallèles vont ralentir la lecture.
    La requête est-elle juste select count(*) from t ? Et y a-t-il une clé primaire sur la table ?

    De base j'aurais pensé à un problème de High Water Mark, mais il faut lire les blocs de la table pour être impacté.

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Voici des infos en plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    set autotrace traceonly explain
    select count(*) from pfo_date;
     
    COUNT(*)
    ----------
       4825974
    1 row selected.
     
    Execution Plan
    ----------------------------------------------------------
               SELECT STATEMENT Optimizer Mode=ALL_ROWS (Cost=34640 Card=1)
       1         SORT AGGREGATE (Card=1)
       2    1      INDEX FULL SCAN AFPL.PK_PFO_DATE (Cost=34640 Card=4 M)

    Il y a une clé primaire dans cette table sur trois colonnes et un index sur les mêmes colonnes.
    PFO_LOT, PFO_LOT_LIGNE, IL_CDR_ID

    Index leaf blocks : 33 449
    Table blocks : 52 809
    Le clustering factor a l'air très mauvais mais on n'accède pas à la table, juste à l'index donc c'est pas gênant.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Faire un SELECT COUNT sur une clé primaire composée de 3 colonnes
    Par z_ahlam dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/01/2023, 14h04
  2. Réponses: 9
    Dernier message: 20/08/2012, 22h44
  3. select count (*) sur 3 tables
    Par jbidou88 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/05/2008, 13h43
  4. [9i] Count sur table partitionnées
    Par saysay dans le forum Oracle
    Réponses: 4
    Dernier message: 26/12/2005, 14h33
  5. [debutant] select-insert sur tables de bases differentes
    Par RedMax dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/10/2004, 18h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo