Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD > Optimisations
Optimisations Forum de conseils pour les optimisations des performances SGBD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/05/2006, 13h38   #1
Membre éclairé
 
Avatar de Satch
 
Inscription : mars 2004
Messages : 448
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : mars 2004
Messages : 448
Points : 381
Points : 381
Envoyer un message via MSN à Satch
Par défaut [optimisation] votre avis sur le temps d'execution d'un exemple

Bonjour,

Je me retrouve dans un cas qui ne s'était jamais présenté à moi et que je ne peux pas tester maintenant.

J'aurai besoin d'une estimation de votre part sur le temps que peut prendre une requête (assez optimisée).

Voici les données :
- Jointures sur 7-8 tables
- 3 requêtes imbriquées
- des index sur les clef primaires
- 200 000 enregistrements environt
- le retour comportera une centaine de lignes, dont on aura une quinzaine de champs, répartis sur les différentes tables qu'on a dans les jointures


Je sais parfaitement qu'il est impossible de prédire le temps d'execution à partir de ces données, mais d'après vous, quelle temps à peu pres cela peut-il prendre ?
10 secondes ?
une minute ? 2 minutes ?

A vrai dire j'en ai aucune idée.
Satch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2006, 13h55   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
... c'est comme le fût du canon: un certain temps


qui va dépendre aussi des index positionnés sur les colonnes utilisées dans les WHERE (et peut-être aussi GROUP ?, me souviens plus )

et du taux de désorganisation des tables.
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2006, 14h06   #3
Membre éclairé
 
Avatar de Satch
 
Inscription : mars 2004
Messages : 448
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : mars 2004
Messages : 448
Points : 381
Points : 381
Envoyer un message via MSN à Satch
Les index il n'y en a que sur les id.

Dans le where il n'y aura que des champs=qqch ou champ n'a pas d'index.

et admettons que les tables soient toutes fraîches, donc bien organisées.

Est-ce que ça peut donner une meilleure idée ?
Satch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2006, 15h09   #4
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
A priori, non, et je doute que tu puisses obtenir un résultat sérieux qui résiste à l'analyse du "comment il a été obtenu".

En vrac, et au delà de la seule base, il y a aussi le SGBD qui est à considérer, et au delà de lui, le serveur:
est-il dédié ?
quelle est/sera sa puissance ? sa capacité RAM ?
Quelle rapidité des HD ?
quelle typologie réseau ? (accès direct en LAN ou passage par un WAN, débit théorique/pratique, Qos (paquets perdus ?), etc...

bref, à moins d'avoir des dons particuliers, la tâche est impossible

Le seul "truc" sera de faire un benchmark à 10% de remplissage de la base, puis tenter d'extrapoler le résultat, mais c'est pas fiable à 100% car le SGBD peut décider de changer son mode d'accès aux données (d'où l'utilité d'un suivi de tuning des bases avec les fameux explains afin de vérifier la pertinence des index par rapport aux requètes qu'ils sont censés améliorer).
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 23h59   #5
Membre habitué
 
Inscription : février 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 118
Points : 116
Points : 116
Le nombre de lignes retournées et le nombre d'attributs du Select je crois que ça n'a que très peu d'influence.

Tu dis faire 7 jointures mais quelle est la taille des tables? Si elles font toutes 200 000 lignes c'est plus long que si y'a une table de 200 000 et 6 de 5000 lignes.

Quoiqu'il en soit je pense que ça restera en dessous des 10 secondes. Au hasard je dirais 4.5 secondes.

Je sais pas si tu sais ce que c'est un index mais s'ils sont bien fait ça doit permettre à la base de données de sélectionner une ligne (parmi 200 000) en 15 tentatives, ce qui se fait très vite.

Ce que je peux te dire par exemple c'est que sélectionner une ligne parmis 20 000 lignes c'est instantané sur un P3 500mb (bon ok peut-être 1/4 secondes j'ai jamais compté).
yizashi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2006, 11h55   #6
Membre éclairé
 
Avatar de Satch
 
Inscription : mars 2004
Messages : 448
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : mars 2004
Messages : 448
Points : 381
Points : 381
Envoyer un message via MSN à Satch
Je ne peux malheureusement rien changer dans la base. Les index sont ce qu'ils sont et le resteront.

En fait mon problème se résume à ceci :
je dois aller voir un peu tout ce qu'il y a dans la base afin de compter certaines choses et d'extraire certains champs.
2 solutions donc :
- Je parcours tout comme un bourrin, et je fais le tri en programmation (JAVA).
- Je fais des requêtes bien spécifiques qui me retourneront exactement ce que je veux. Mais certaines requêtes seront presques semblables.

La 2ème solution semble bien entendu la meilleure. Mais les requêtes devront être optimisées au top.

Après réflexion, je pars sur la 2ème.
Satch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2006, 16h11   #7
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Je ne comprends pas ce qui peut empêcher l'ajout d'index...

Il ne s'agit pas de mettre le modèle par-terre, juste d'améliorer les performances.

Si le proprio de la base comprend ça, c'est gagné, et je ne connais pas de responsable qui "cracherait" sur un gain de 50% en temps de réponse
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 11h02   #8
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
Pour moi, il faut coder la requête et demander au SGBD (c'est lequel d'ailleurs ?) qu'il indique les chemins d'accès choisis (en DB2, par exemple ça s'appelle la fonction EXPLAIN).
Ce n'est qu'à partir de cet élément de base qu'on peut raisonnablement donner une estimation crédible.



Citation:
Je ne peux malheureusement rien changer dans la base. Les index sont ce qu'ils sont et le resteront.
Avec ce postulat de départ, aucun travail sérieux d'optimisation de la requête ne peut être effectué. C'est comme vouloir courir le marathon en s'imposant dès le départ un sac à dos de 30 kilos ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 11h35   #9
Membre éclairé
 
Avatar de Satch
 
Inscription : mars 2004
Messages : 448
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : mars 2004
Messages : 448
Points : 381
Points : 381
Envoyer un message via MSN à Satch
Je n'ai pas de SGBD en particulier. ça DOIT être portable. Donc il faut que j'optimise les choses optimisables indépendamment du SGBD.

Finalement pour les index, ça pourra se faire.

J'avoue que je ne sais pas vraiment quoi indexer.
Si j'ai bien compris, pour des perfs optimale, il faudrait que ce soit les champs qui servent aux jointures qui soient indexés ?
Satch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 13h58   #10
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
Citation:
Envoyé par Satch
Je n'ai pas de SGBD en particulier. ça DOIT être portable. Donc il faut que j'optimise les choses optimisables indépendamment du SGBD.
C'est curieux comme démarche ...
On peut tout à fait écrire du SQL portable et c'est même plutôt sympathique comme idée mais à un moment ou un autre il faut bien "incarner" la requête sur un SGBD donné ...
De plus et comme je l'indiquais les SGBD disposent de cette fonction de détermination des chemins d'accès.

Citation:
Finalement pour les index, ça pourra se faire.

J'avoue que je ne sais pas vraiment quoi indexer.
Si j'ai bien compris, pour des perfs optimale, il faudrait que ce soit les champs qui servent aux jointures qui soient indexés ?
Oui c'est une bonne méthode d'indexer les prédicats de jointure.
On peut éviter les index:
- sur les petites tables
là ça veut dire que la performance n'est pas un problème vu la volumétrie
- si les colonnes en cause si elles sont peu sélectives
là c'est pas forcément une bonne nouvelle car ça veut simplement dire que la présence d'un index n'améliore pas de manière significative la performance qui n'est pas terrible au départ
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 08h25   #11
Membre éclairé
 
Avatar de Satch
 
Inscription : mars 2004
Messages : 448
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : mars 2004
Messages : 448
Points : 381
Points : 381
Envoyer un message via MSN à Satch
Citation:
Envoyé par Luc Orient
C'est curieux comme démarche ...
On peut tout à fait écrire du SQL portable et c'est même plutôt sympathique comme idée mais à un moment ou un autre il faut bien "incarner" la requête sur un SGBD donné ...
Hé bien non justement. C'est une application qui DOIT tourner sur tous les SGBD courants.

En tout cas merci pour les infos.
Satch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 15h40   #12
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 696
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 35
Localisation : Congo-Brazzaville

Informations professionnelles :
Activité : Architecte de base de données
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 2 696
Points : 3 917
Points : 3 917
Envoyer un message via Yahoo à WOLO Laurent
Citation:
Envoyé par Satch
Bonjour,

- des index sur les clef primaires
A vrai dire j'en ai aucune idée.
Il est unitile et contre performance d'ajouter un index à une clé primaire car par définition, une clé primaire est un index primaire étendu.
__________________

Découvrez la FAQ de MS SQL Server.
La chance accorde ses faveurs aux esprits avertis !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 16h54   #13
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
Citation:
Envoyé par WOLO Laurent
Il est unitile et contre performance d'ajouter un index à une clé primaire car par définition, une clé primaire est un index primaire étendu.
C'est quoi un "index primaire étendu" ?

Pour moi une clé primaire au niveau du MLD/MPD se traduira au niveau du DDL par la création d'un ordre tel que (exemple tiré de DB2 for z/OS que je connais) :
Code :
1
2
3
 
CREATE UNIQUE INDEX
 index-name ON table-name (col1, col2, ... ) ;
Effectivement, on ne peut pas ajouter un index à une clé primaire puisque c'est déjà un index ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 22h49   #14
mat.M
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
A vue de nez et d'après expérience professionnelle ça risque de ramer pas mal si tu as 200.000 enregistrements et surtout des jointures...

Faut s'attendre à des temps de traitements supérieurs à 5 min.
Maintenant c'est une estimation qui tient qu'à moi.
J'ai surement tout faux en disant-cela
Faut voir le serveur , les performances du SGBD...

Solution : faire des procédures SQL et apprendre PL-SQL sous Oracle ou Transact-SQL sous SQL-Server par exemple .
Sous MySQL on peut faire des scripts en C pour optimiser je crois
Mais c'est pas portable
  Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2006, 08h20   #15
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 696
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 35
Localisation : Congo-Brazzaville

Informations professionnelles :
Activité : Architecte de base de données
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 2 696
Points : 3 917
Points : 3 917
Envoyer un message via Yahoo à WOLO Laurent
Il y'a un article de sqlpro sur l'optimisation des performances.
__________________

Découvrez la FAQ de MS SQL Server.
La chance accorde ses faveurs aux esprits avertis !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h42.


 
 
 
 
Partenaires

Hébergement Web