helios a écrit :Alain Montfranc a écrit :Dans son message précédent, Eric Demeester a écrit :dans (in) fr.comp.applications.sgbd, WebShaker
ecrivait (wrote) :
Bonjour Étienne,mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner
beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
helios a écrit :
Alain Montfranc a écrit :
Dans son message précédent, Eric Demeester a écrit :
dans (in) fr.comp.applications.sgbd, WebShaker <etienne@tlk.fr>
ecrivait (wrote) :
Bonjour Étienne,
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?
Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner
beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
helios a écrit :Alain Montfranc a écrit :Dans son message précédent, Eric Demeester a écrit :dans (in) fr.comp.applications.sgbd, WebShaker
ecrivait (wrote) :
Bonjour Étienne,mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner
beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
Alain Montfranc a écrit :helios a écrit :Alain Montfranc a écrit :Dans son message précédent, Eric Demeester a écrit :dans (in) fr.comp.applications.sgbd, WebShaker
ecrivait (wrote) :
Bonjour Étienne,mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner
beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
si le fichier n'a pas de jointure il est scanné plus rapidement qu un
fichier qui a des jointures car dans le premier cas le temps de faire
les jointures egale 0
scanner un article de fichier sans jointure c'est lire un article
scanner un article de fichier avec jointures c'est lire un article (plus
petit) puis aller voir les "renvois" vers autres fichiers definie par
les jointures donc c'est plus long
exemple
sans jointure :
*Nicolas Sarkozy* (*Nicolas Paul Stéphane Sarközy de Nagy-Bocsa*), né le
28 <http://fr.wikipedia.org/wiki/28_janvier> janvier
<http://fr.wikipedia.org/wiki/Janvier> 1955
<http://fr.wikipedia.org/wiki/1955> dans le 17^e arrondissement
<http://fr.wikipedia.org/wiki/17e_arrondissement_de_Paris> de Paris
<http://fr.wikipedia.org/wiki/Paris>, est un homme d'État
<http://fr.wikipedia.org/wiki/Homme_d%27%C3%89tat> français
<http://fr.wikipedia.org/wiki/France>.
avec jointures:
*"prenom x fiche prenom" Sarkozy* (*"prenom x fiche prenom"** **"prenom
y fiche prenom"** **"prenom z fich prenom"** Sarközy de Nagy-Bocsa*), né
le 28 <http://fr.wikipedia.org/wiki/28_janvier> janvier
<http://fr.wikipedia.org/wiki/Janvier> 1955
<http://fr.wikipedia.org/wiki/1955> dans le 17^e arrondissement
<http://fr.wikipedia.org/wiki/17e_arrondissement_de_Paris> de "ville x
fichier ville" <http://fr.wikipedia.org/wiki/Paris>, est un "profession
z fichier profession" <http://fr.wikipedia.org/wiki/Homme_d%27%C3%89tat>
laquel de ces deux fiche est la plus rapide a lire ?
Alain Montfranc a écrit :
helios a écrit :
Alain Montfranc a écrit :
Dans son message précédent, Eric Demeester a écrit :
dans (in) fr.comp.applications.sgbd, WebShaker <etienne@tlk.fr>
ecrivait (wrote) :
Bonjour Étienne,
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?
Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner
beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
si le fichier n'a pas de jointure il est scanné plus rapidement qu un
fichier qui a des jointures car dans le premier cas le temps de faire
les jointures egale 0
scanner un article de fichier sans jointure c'est lire un article
scanner un article de fichier avec jointures c'est lire un article (plus
petit) puis aller voir les "renvois" vers autres fichiers definie par
les jointures donc c'est plus long
exemple
sans jointure :
*Nicolas Sarkozy* (*Nicolas Paul Stéphane Sarközy de Nagy-Bocsa*), né le
28 <http://fr.wikipedia.org/wiki/28_janvier> janvier
<http://fr.wikipedia.org/wiki/Janvier> 1955
<http://fr.wikipedia.org/wiki/1955> dans le 17^e arrondissement
<http://fr.wikipedia.org/wiki/17e_arrondissement_de_Paris> de Paris
<http://fr.wikipedia.org/wiki/Paris>, est un homme d'État
<http://fr.wikipedia.org/wiki/Homme_d%27%C3%89tat> français
<http://fr.wikipedia.org/wiki/France>.
avec jointures:
*"prenom x fiche prenom" Sarkozy* (*"prenom x fiche prenom"** **"prenom
y fiche prenom"** **"prenom z fich prenom"** Sarközy de Nagy-Bocsa*), né
le 28 <http://fr.wikipedia.org/wiki/28_janvier> janvier
<http://fr.wikipedia.org/wiki/Janvier> 1955
<http://fr.wikipedia.org/wiki/1955> dans le 17^e arrondissement
<http://fr.wikipedia.org/wiki/17e_arrondissement_de_Paris> de "ville x
fichier ville" <http://fr.wikipedia.org/wiki/Paris>, est un "profession
z fichier profession" <http://fr.wikipedia.org/wiki/Homme_d%27%C3%89tat>
laquel de ces deux fiche est la plus rapide a lire ?
Alain Montfranc a écrit :helios a écrit :Alain Montfranc a écrit :Dans son message précédent, Eric Demeester a écrit :dans (in) fr.comp.applications.sgbd, WebShaker
ecrivait (wrote) :
Bonjour Étienne,mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner
beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
si le fichier n'a pas de jointure il est scanné plus rapidement qu un
fichier qui a des jointures car dans le premier cas le temps de faire
les jointures egale 0
scanner un article de fichier sans jointure c'est lire un article
scanner un article de fichier avec jointures c'est lire un article (plus
petit) puis aller voir les "renvois" vers autres fichiers definie par
les jointures donc c'est plus long
exemple
sans jointure :
*Nicolas Sarkozy* (*Nicolas Paul Stéphane Sarközy de Nagy-Bocsa*), né le
28 <http://fr.wikipedia.org/wiki/28_janvier> janvier
<http://fr.wikipedia.org/wiki/Janvier> 1955
<http://fr.wikipedia.org/wiki/1955> dans le 17^e arrondissement
<http://fr.wikipedia.org/wiki/17e_arrondissement_de_Paris> de Paris
<http://fr.wikipedia.org/wiki/Paris>, est un homme d'État
<http://fr.wikipedia.org/wiki/Homme_d%27%C3%89tat> français
<http://fr.wikipedia.org/wiki/France>.
avec jointures:
*"prenom x fiche prenom" Sarkozy* (*"prenom x fiche prenom"** **"prenom
y fiche prenom"** **"prenom z fich prenom"** Sarközy de Nagy-Bocsa*), né
le 28 <http://fr.wikipedia.org/wiki/28_janvier> janvier
<http://fr.wikipedia.org/wiki/Janvier> 1955
<http://fr.wikipedia.org/wiki/1955> dans le 17^e arrondissement
<http://fr.wikipedia.org/wiki/17e_arrondissement_de_Paris> de "ville x
fichier ville" <http://fr.wikipedia.org/wiki/Paris>, est un "profession
z fichier profession" <http://fr.wikipedia.org/wiki/Homme_d%27%C3%89tat>
laquel de ces deux fiche est la plus rapide a lire ?
helios a écrit :Alain Montfranc a écrit :Dans son message précédent, Eric Demeester a écrit :dans (in) fr.comp.applications.sgbd, WebShaker
ecrivait (wrote) :
Bonjour Étienne,mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner
beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
helios a écrit :
Alain Montfranc a écrit :
Dans son message précédent, Eric Demeester a écrit :
dans (in) fr.comp.applications.sgbd, WebShaker <etienne@tlk.fr>
ecrivait (wrote) :
Bonjour Étienne,
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?
Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner
beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
helios a écrit :Alain Montfranc a écrit :Dans son message précédent, Eric Demeester a écrit :dans (in) fr.comp.applications.sgbd, WebShaker
ecrivait (wrote) :
Bonjour Étienne,mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner
beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
Alain Montfranc a écrit :helios a écrit :Alain Montfranc a écrit :Dans son message précédent, Eric Demeester a écrit :dans (in) fr.comp.applications.sgbd, WebShaker
ecrivait (wrote) :
Bonjour Étienne,mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
l'informatique defis les regles de la réalité ?
desolé mais dans la realité il est toujours plus rapide de lire une fiches
complete que de lire une fiche qui fait des jointures (renvois) vers d'autre
fiche
en informatique il en est de meme
libre a qui le veux d'avoir des phantasmes qui dise que en informatique la
réalité ne s'applique pas
fin de troll
Alain Montfranc a écrit :
helios a écrit :
Alain Montfranc a écrit :
Dans son message précédent, Eric Demeester a écrit :
dans (in) fr.comp.applications.sgbd, WebShaker <etienne@tlk.fr>
ecrivait (wrote) :
Bonjour Étienne,
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?
Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
l'informatique defis les regles de la réalité ?
desolé mais dans la realité il est toujours plus rapide de lire une fiches
complete que de lire une fiche qui fait des jointures (renvois) vers d'autre
fiche
en informatique il en est de meme
libre a qui le veux d'avoir des phantasmes qui dise que en informatique la
réalité ne s'applique pas
fin de troll
Alain Montfranc a écrit :helios a écrit :Alain Montfranc a écrit :Dans son message précédent, Eric Demeester a écrit :dans (in) fr.comp.applications.sgbd, WebShaker
ecrivait (wrote) :
Bonjour Étienne,mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
C'est tellement évident que personne n'a évoqué ce point, mais as-tu
défini des index pertinents dans tes tables ?Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
Même remarque, en définissant de bons index, tu devrais gagner beaucoup
de temps dans le traitemen des requètes.
Index ou pas, il y aura un scan de toute la base
et avec les jointures cela multiplie le temps de scan
si jointure, alors index accellere - relire cours
l'informatique defis les regles de la réalité ?
desolé mais dans la realité il est toujours plus rapide de lire une fiches
complete que de lire une fiche qui fait des jointures (renvois) vers d'autre
fiche
en informatique il en est de meme
libre a qui le veux d'avoir des phantasmes qui dise que en informatique la
réalité ne s'applique pas
fin de troll
> Une ou des tables temporaires ou en mémoire pourquoi pas, mais c'est
> surtout utile si ça te permet de permet de faire des agrégats qui
> resserviront plusieurs fois (donc ça dépend de tes requêtes) ou si
> ça te permet de travailler sur une table réduite (avec moins de
> colonnes), qui peut du coup tenir en mémoire.
Hum...
Mon idée c'est surtout de dupliquer les données tous les soirs dans
de nouvelles tables regroupant plusieurs tables. (Voir si c'est
possible un jour de ne plus dupliquer intégralement mais mettre en
jour en fct des données modifiées.)
Par exemple fusionner les tables produits, commandline, commande, bl
et facture dans une seule table puisque pour chaque ligne de commande
j'ai évidement qu'une seule commande, une seule facture, un seul
produit. bon pour les bl c'est plus complexe à cause des reliquats et
livraison partielle.
je pense que le temps pris pour générer cette table sera conséquent
mais me permettra de faire des requêtes avec nettement moins de
jointure. Par contre quasiment toutes les requêtes liront alors
l'intégralité de la table puisque compter le nombre de factures va
devenir
SELECT count(DISTINCT idfacture) FROM compact_table;
Alors qu'avant je faisais un
SELECT count(*) FROM facture;
La table était plus petite et donc la requête plus rapide.
L'interet supplementaire d'une table unique est qu'il devient
extrêment simple de réaliser un outil permettant à chaque utilisate ur
de créer ses propres graphes.
par exemple supposons qu'un de mes patrons soit intéressé par un
graph de CA / region de livraison.
> Une ou des tables temporaires ou en mémoire pourquoi pas, mais c'est
> surtout utile si ça te permet de permet de faire des agrégats qui
> resserviront plusieurs fois (donc ça dépend de tes requêtes) ou si
> ça te permet de travailler sur une table réduite (avec moins de
> colonnes), qui peut du coup tenir en mémoire.
Hum...
Mon idée c'est surtout de dupliquer les données tous les soirs dans
de nouvelles tables regroupant plusieurs tables. (Voir si c'est
possible un jour de ne plus dupliquer intégralement mais mettre en
jour en fct des données modifiées.)
Par exemple fusionner les tables produits, commandline, commande, bl
et facture dans une seule table puisque pour chaque ligne de commande
j'ai évidement qu'une seule commande, une seule facture, un seul
produit. bon pour les bl c'est plus complexe à cause des reliquats et
livraison partielle.
je pense que le temps pris pour générer cette table sera conséquent
mais me permettra de faire des requêtes avec nettement moins de
jointure. Par contre quasiment toutes les requêtes liront alors
l'intégralité de la table puisque compter le nombre de factures va
devenir
SELECT count(DISTINCT idfacture) FROM compact_table;
Alors qu'avant je faisais un
SELECT count(*) FROM facture;
La table était plus petite et donc la requête plus rapide.
L'interet supplementaire d'une table unique est qu'il devient
extrêment simple de réaliser un outil permettant à chaque utilisate ur
de créer ses propres graphes.
par exemple supposons qu'un de mes patrons soit intéressé par un
graph de CA / region de livraison.
> Une ou des tables temporaires ou en mémoire pourquoi pas, mais c'est
> surtout utile si ça te permet de permet de faire des agrégats qui
> resserviront plusieurs fois (donc ça dépend de tes requêtes) ou si
> ça te permet de travailler sur une table réduite (avec moins de
> colonnes), qui peut du coup tenir en mémoire.
Hum...
Mon idée c'est surtout de dupliquer les données tous les soirs dans
de nouvelles tables regroupant plusieurs tables. (Voir si c'est
possible un jour de ne plus dupliquer intégralement mais mettre en
jour en fct des données modifiées.)
Par exemple fusionner les tables produits, commandline, commande, bl
et facture dans une seule table puisque pour chaque ligne de commande
j'ai évidement qu'une seule commande, une seule facture, un seul
produit. bon pour les bl c'est plus complexe à cause des reliquats et
livraison partielle.
je pense que le temps pris pour générer cette table sera conséquent
mais me permettra de faire des requêtes avec nettement moins de
jointure. Par contre quasiment toutes les requêtes liront alors
l'intégralité de la table puisque compter le nombre de factures va
devenir
SELECT count(DISTINCT idfacture) FROM compact_table;
Alors qu'avant je faisais un
SELECT count(*) FROM facture;
La table était plus petite et donc la requête plus rapide.
L'interet supplementaire d'une table unique est qu'il devient
extrêment simple de réaliser un outil permettant à chaque utilisate ur
de créer ses propres graphes.
par exemple supposons qu'un de mes patrons soit intéressé par un
graph de CA / region de livraison.
Le 24/05/2010 20:46, Yliur a écrit :
> Pour la grande table unique, je ne sais pas si ça va être plus
> efficace, il faudra tout charger pour chaque requête... Sauf si elle
> tient complètement en mémoire et qu'il n'y a plus qu'elle peut-êt re,
> mais si tes tables tiennent déjà en mémoire...
>
> Sais-tu si ce sont les accès disque ou si c'est le processeur qui
> limite la rapidité de tes traitements ? Ça peut être intéressan t. La
> question c'est un peu : tu as 16 Go de mémoire, est-ce que ça permet
> au SGBD de tout garder en mémoire ou non ? Les solutions ne seront
> pas forcément les mêmes.
>
> La modification incrémentielle de tes tables, ça peut être une bo nne
> piste.
Hum tu as tout a fait raison.
nom cas est étroitement lié au materiel utilisé.
je suppose que toutes ma base va tenir en RAM en effet.
Lorsque je la dump elle est bien moins grosse que la mémoire dont je
dispose. (le me fait 1.3 go)
Et justement l'idée de tout fusionner dans une seule table (je
l'espère) permettra a tous les processus de lire la même zone mémoi re.
Actuellement mon problème avec les tas de jointure que je fais c'est
que postgres alloue (enfin je pense) de la mémoire pour chaque
processus puisque les requêtes croisent des tables éventuellement
différentes. Et donc je suppose qu'il n'arrive pas a mutualiser le
cache. car la ressource problèmatique aujourd'hui des clairement les
IO. Et donc pas conséquent la Ram que j'utilise en trop grosse
quantité lors de requête concurrente.
D'où une autre idée que je suis en train d'évaluer.
Installer un deuxième postgres et le faire tourner dans un ram disque.
Dans ce cas, ma fameuse table fusionnée (qui peut être reconstruite
sans problème en cas de perte de ma base) serait créé dans ce ram
disque. Et là, je devrais obtenir des performances assez élevée.
Il faudrait pas contre que j'arrive à desactiver les caches disque
qui ne seront plus utile et risque de bouffer de la mémoire
inutilement.
Bref tout ca c'est des tests de grande envergure... qui si ca se
trouve ne vont déboucher sur rien du tout :)
> Tu as regardé les cubes multidimensionnels (par exemple avec
> Mondrian/JPivot en Java) ? Ça pourrait t'intéresser.
Je connais le concept des cubes, mais rien de plus.
Faudrait que j'en trouve un open source qui tourne sous linux pour
faire des essais.
Par contre, je supporte pas le java :)
alors pas en java.
Etienne
Le 24/05/2010 20:46, Yliur a écrit :
> Pour la grande table unique, je ne sais pas si ça va être plus
> efficace, il faudra tout charger pour chaque requête... Sauf si elle
> tient complètement en mémoire et qu'il n'y a plus qu'elle peut-êt re,
> mais si tes tables tiennent déjà en mémoire...
>
> Sais-tu si ce sont les accès disque ou si c'est le processeur qui
> limite la rapidité de tes traitements ? Ça peut être intéressan t. La
> question c'est un peu : tu as 16 Go de mémoire, est-ce que ça permet
> au SGBD de tout garder en mémoire ou non ? Les solutions ne seront
> pas forcément les mêmes.
>
> La modification incrémentielle de tes tables, ça peut être une bo nne
> piste.
Hum tu as tout a fait raison.
nom cas est étroitement lié au materiel utilisé.
je suppose que toutes ma base va tenir en RAM en effet.
Lorsque je la dump elle est bien moins grosse que la mémoire dont je
dispose. (le me fait 1.3 go)
Et justement l'idée de tout fusionner dans une seule table (je
l'espère) permettra a tous les processus de lire la même zone mémoi re.
Actuellement mon problème avec les tas de jointure que je fais c'est
que postgres alloue (enfin je pense) de la mémoire pour chaque
processus puisque les requêtes croisent des tables éventuellement
différentes. Et donc je suppose qu'il n'arrive pas a mutualiser le
cache. car la ressource problèmatique aujourd'hui des clairement les
IO. Et donc pas conséquent la Ram que j'utilise en trop grosse
quantité lors de requête concurrente.
D'où une autre idée que je suis en train d'évaluer.
Installer un deuxième postgres et le faire tourner dans un ram disque.
Dans ce cas, ma fameuse table fusionnée (qui peut être reconstruite
sans problème en cas de perte de ma base) serait créé dans ce ram
disque. Et là, je devrais obtenir des performances assez élevée.
Il faudrait pas contre que j'arrive à desactiver les caches disque
qui ne seront plus utile et risque de bouffer de la mémoire
inutilement.
Bref tout ca c'est des tests de grande envergure... qui si ca se
trouve ne vont déboucher sur rien du tout :)
> Tu as regardé les cubes multidimensionnels (par exemple avec
> Mondrian/JPivot en Java) ? Ça pourrait t'intéresser.
Je connais le concept des cubes, mais rien de plus.
Faudrait que j'en trouve un open source qui tourne sous linux pour
faire des essais.
Par contre, je supporte pas le java :)
alors pas en java.
Etienne
Le 24/05/2010 20:46, Yliur a écrit :
> Pour la grande table unique, je ne sais pas si ça va être plus
> efficace, il faudra tout charger pour chaque requête... Sauf si elle
> tient complètement en mémoire et qu'il n'y a plus qu'elle peut-êt re,
> mais si tes tables tiennent déjà en mémoire...
>
> Sais-tu si ce sont les accès disque ou si c'est le processeur qui
> limite la rapidité de tes traitements ? Ça peut être intéressan t. La
> question c'est un peu : tu as 16 Go de mémoire, est-ce que ça permet
> au SGBD de tout garder en mémoire ou non ? Les solutions ne seront
> pas forcément les mêmes.
>
> La modification incrémentielle de tes tables, ça peut être une bo nne
> piste.
Hum tu as tout a fait raison.
nom cas est étroitement lié au materiel utilisé.
je suppose que toutes ma base va tenir en RAM en effet.
Lorsque je la dump elle est bien moins grosse que la mémoire dont je
dispose. (le me fait 1.3 go)
Et justement l'idée de tout fusionner dans une seule table (je
l'espère) permettra a tous les processus de lire la même zone mémoi re.
Actuellement mon problème avec les tas de jointure que je fais c'est
que postgres alloue (enfin je pense) de la mémoire pour chaque
processus puisque les requêtes croisent des tables éventuellement
différentes. Et donc je suppose qu'il n'arrive pas a mutualiser le
cache. car la ressource problèmatique aujourd'hui des clairement les
IO. Et donc pas conséquent la Ram que j'utilise en trop grosse
quantité lors de requête concurrente.
D'où une autre idée que je suis en train d'évaluer.
Installer un deuxième postgres et le faire tourner dans un ram disque.
Dans ce cas, ma fameuse table fusionnée (qui peut être reconstruite
sans problème en cas de perte de ma base) serait créé dans ce ram
disque. Et là, je devrais obtenir des performances assez élevée.
Il faudrait pas contre que j'arrive à desactiver les caches disque
qui ne seront plus utile et risque de bouffer de la mémoire
inutilement.
Bref tout ca c'est des tests de grande envergure... qui si ca se
trouve ne vont déboucher sur rien du tout :)
> Tu as regardé les cubes multidimensionnels (par exemple avec
> Mondrian/JPivot en Java) ? Ça pourrait t'intéresser.
Je connais le concept des cubes, mais rien de plus.
Faudrait que j'en trouve un open source qui tourne sous linux pour
faire des essais.
Par contre, je supporte pas le java :)
alors pas en java.
Etienne
salut.
on me demande de réaliser une requête qui consiste a compter le nombre
de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
surtout que le requête suivante est de compter le quantité par catégorie
de produit.
la ca donne
SELECT cat, count(*) FROM commandline INNER JOIN produit ON
commandline.idproduit = produit.idproduit GROUP BY cat;
Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
ou alors il faut que je fasse un mécanisme de cache, mais la je ne
connais pas trop les techniques (table temporaire peut être, je ne sais
pas).
Etienne
salut.
on me demande de réaliser une requête qui consiste a compter le nombre
de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
surtout que le requête suivante est de compter le quantité par catégorie
de produit.
la ca donne
SELECT cat, count(*) FROM commandline INNER JOIN produit ON
commandline.idproduit = produit.idproduit GROUP BY cat;
Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
ou alors il faut que je fasse un mécanisme de cache, mais la je ne
connais pas trop les techniques (table temporaire peut être, je ne sais
pas).
Etienne
salut.
on me demande de réaliser une requête qui consiste a compter le nombre
de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
surtout que le requête suivante est de compter le quantité par catégorie
de produit.
la ca donne
SELECT cat, count(*) FROM commandline INNER JOIN produit ON
commandline.idproduit = produit.idproduit GROUP BY cat;
Les suivantes sont encore pire...
Dans touts les cas, il me faut parcourir la table commandline.
ou alors il faut que je fasse un mécanisme de cache, mais la je ne
connais pas trop les techniques (table temporaire peut être, je ne sais
pas).
Etienne
WebShaker a écrit :salut.
on me demande de réaliser une requête qui consiste a compter le
nombre de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
la solution est de mettre en place une vue matérialisée (Oracle, DB2)
ou indexées (SQL Server).
Exemple sous MS SQL Server :
CREATE VIEW dbo.V_commandline
WITH SCHEMABINDING
AS
SELECT ref, count_big(*) AS NOMBRE
FROM dbo.commandline
GROUP BY ref;
GO
CREATE UNIQUE CLUSTERED INDEX X_V_commandline
ON dbo.V_commandline (ref);
Dès lors votre requête :
SELECT ref, count(*) FROM commandline GROUP BY ref
Mettra 0 secondes et consommera environ 2 pages !
A +
WebShaker a écrit :
salut.
on me demande de réaliser une requête qui consiste a compter le
nombre de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
la solution est de mettre en place une vue matérialisée (Oracle, DB2)
ou indexées (SQL Server).
Exemple sous MS SQL Server :
CREATE VIEW dbo.V_commandline
WITH SCHEMABINDING
AS
SELECT ref, count_big(*) AS NOMBRE
FROM dbo.commandline
GROUP BY ref;
GO
CREATE UNIQUE CLUSTERED INDEX X_V_commandline
ON dbo.V_commandline (ref);
Dès lors votre requête :
SELECT ref, count(*) FROM commandline GROUP BY ref
Mettra 0 secondes et consommera environ 2 pages !
A +
WebShaker a écrit :salut.
on me demande de réaliser une requête qui consiste a compter le
nombre de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
la solution est de mettre en place une vue matérialisée (Oracle, DB2)
ou indexées (SQL Server).
Exemple sous MS SQL Server :
CREATE VIEW dbo.V_commandline
WITH SCHEMABINDING
AS
SELECT ref, count_big(*) AS NOMBRE
FROM dbo.commandline
GROUP BY ref;
GO
CREATE UNIQUE CLUSTERED INDEX X_V_commandline
ON dbo.V_commandline (ref);
Dès lors votre requête :
SELECT ref, count(*) FROM commandline GROUP BY ref
Mettra 0 secondes et consommera environ 2 pages !
A +
SQLpro a écrit :WebShaker a écrit :salut.
on me demande de réaliser une requête qui consiste a compter le
nombre de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
la solution est de mettre en place une vue matérialisée (Oracle, DB2)
ou indexées (SQL Server).
Exemple sous MS SQL Server :
CREATE VIEW dbo.V_commandline
WITH SCHEMABINDING
AS
SELECT ref, count_big(*) AS NOMBRE
FROM dbo.commandline
GROUP BY ref;
GO
CREATE UNIQUE CLUSTERED INDEX X_V_commandline
ON dbo.V_commandline (ref);
Dès lors votre requête :
SELECT ref, count(*) FROM commandline GROUP BY ref
Mettra 0 secondes et consommera environ 2 pages !
A +
et le codagedes dates depuis JC à nos jours peut se faire sur 2octets ????
SQLpro a écrit :
WebShaker a écrit :
salut.
on me demande de réaliser une requête qui consiste a compter le
nombre de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
la solution est de mettre en place une vue matérialisée (Oracle, DB2)
ou indexées (SQL Server).
Exemple sous MS SQL Server :
CREATE VIEW dbo.V_commandline
WITH SCHEMABINDING
AS
SELECT ref, count_big(*) AS NOMBRE
FROM dbo.commandline
GROUP BY ref;
GO
CREATE UNIQUE CLUSTERED INDEX X_V_commandline
ON dbo.V_commandline (ref);
Dès lors votre requête :
SELECT ref, count(*) FROM commandline GROUP BY ref
Mettra 0 secondes et consommera environ 2 pages !
A +
et le codagedes dates depuis JC à nos jours peut se faire sur 2octets ????
SQLpro a écrit :WebShaker a écrit :salut.
on me demande de réaliser une requête qui consiste a compter le
nombre de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
la solution est de mettre en place une vue matérialisée (Oracle, DB2)
ou indexées (SQL Server).
Exemple sous MS SQL Server :
CREATE VIEW dbo.V_commandline
WITH SCHEMABINDING
AS
SELECT ref, count_big(*) AS NOMBRE
FROM dbo.commandline
GROUP BY ref;
GO
CREATE UNIQUE CLUSTERED INDEX X_V_commandline
ON dbo.V_commandline (ref);
Dès lors votre requête :
SELECT ref, count(*) FROM commandline GROUP BY ref
Mettra 0 secondes et consommera environ 2 pages !
A +
et le codagedes dates depuis JC à nos jours peut se faire sur 2octets ????
Le 29-05-2010, ? propos de
Re: optimiser une requete qui doit de toute façon lire toute la base,
helios ?crivait dans fr.comp.applications.sgbd :SQLpro a écrit :WebShaker a écrit :salut.
on me demande de réaliser une requête qui consiste a compter le
nombre de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
la solution est de mettre en place une vue matérialisée (Oracle, DB2)
ou indexées (SQL Server).
Exemple sous MS SQL Server :
CREATE VIEW dbo.V_commandline
WITH SCHEMABINDING
AS
SELECT ref, count_big(*) AS NOMBRE
FROM dbo.commandline
GROUP BY ref;
GO
CREATE UNIQUE CLUSTERED INDEX X_V_commandline
ON dbo.V_commandline (ref);
Dès lors votre requête :
SELECT ref, count(*) FROM commandline GROUP BY ref
Mettra 0 secondes et consommera environ 2 pages !
A +
et le codagedes dates depuis JC à nos jours peut se faire sur 2octets ????
Tu es vraiment un abruti de première classe avec palme et
fourragère [1]. Lâche-le avec ça. Si tout le monde ici te mettait à
chacune de tes interventions nullissimes le nez dans tes erreurs, on
n'en finirait pas !
Quant à la discussion actuelle sur Wikipedia, elle montre à tous
ceux qui ne te connaissait pas encore la profondeur de tes
connaissances. Tout ce que tu prétends faire avec PICK, on peut le
faire au moins aussi bien avec SQL (et ce n'est pas une histoire de
lisibilité). Ce que je n'arrive pas à comprendre, c'est qu'il y ait
encore quelqu'un à jouer avec toi sur Wikipedia. Un autre mystère
est pour moi ta capacité à prétendre faire des choses avec un
système de base de données sans en connaître le fonctionnement
interne minimal ! Et je passe sur le fait que tu racontes un peu
partout des exploits professionnels à des endroits où j'aurais dû te
voir...
JKB
[1] et je ne parlerai pas de ton doctorat, parce qu'il y aurait beaucoup
de choses à dire. Que les nouveaux venus recherchent dans les archives
de ce groupe.
PS: répond ce que tu veux, je n'entrerai pas dans ton jeu.
Le 29-05-2010, ? propos de
Re: optimiser une requete qui doit de toute façon lire toute la base,
helios ?crivait dans fr.comp.applications.sgbd :
SQLpro a écrit :
WebShaker a écrit :
salut.
on me demande de réaliser une requête qui consiste a compter le
nombre de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
la solution est de mettre en place une vue matérialisée (Oracle, DB2)
ou indexées (SQL Server).
Exemple sous MS SQL Server :
CREATE VIEW dbo.V_commandline
WITH SCHEMABINDING
AS
SELECT ref, count_big(*) AS NOMBRE
FROM dbo.commandline
GROUP BY ref;
GO
CREATE UNIQUE CLUSTERED INDEX X_V_commandline
ON dbo.V_commandline (ref);
Dès lors votre requête :
SELECT ref, count(*) FROM commandline GROUP BY ref
Mettra 0 secondes et consommera environ 2 pages !
A +
et le codagedes dates depuis JC à nos jours peut se faire sur 2octets ????
Tu es vraiment un abruti de première classe avec palme et
fourragère [1]. Lâche-le avec ça. Si tout le monde ici te mettait à
chacune de tes interventions nullissimes le nez dans tes erreurs, on
n'en finirait pas !
Quant à la discussion actuelle sur Wikipedia, elle montre à tous
ceux qui ne te connaissait pas encore la profondeur de tes
connaissances. Tout ce que tu prétends faire avec PICK, on peut le
faire au moins aussi bien avec SQL (et ce n'est pas une histoire de
lisibilité). Ce que je n'arrive pas à comprendre, c'est qu'il y ait
encore quelqu'un à jouer avec toi sur Wikipedia. Un autre mystère
est pour moi ta capacité à prétendre faire des choses avec un
système de base de données sans en connaître le fonctionnement
interne minimal ! Et je passe sur le fait que tu racontes un peu
partout des exploits professionnels à des endroits où j'aurais dû te
voir...
JKB
[1] et je ne parlerai pas de ton doctorat, parce qu'il y aurait beaucoup
de choses à dire. Que les nouveaux venus recherchent dans les archives
de ce groupe.
PS: répond ce que tu veux, je n'entrerai pas dans ton jeu.
Le 29-05-2010, ? propos de
Re: optimiser une requete qui doit de toute façon lire toute la base,
helios ?crivait dans fr.comp.applications.sgbd :SQLpro a écrit :WebShaker a écrit :salut.
on me demande de réaliser une requête qui consiste a compter le
nombre de produit vendu par référence.
il s'agit donc de
SELECT ref, count(*) FROM commandline GROUP BY ref;
mais j'ai 17.000.000 de lignes de de commandes dans ma base...
Alors la question est simple.
que peut on faire pour optimiser ce genre de requête...
la solution est de mettre en place une vue matérialisée (Oracle, DB2)
ou indexées (SQL Server).
Exemple sous MS SQL Server :
CREATE VIEW dbo.V_commandline
WITH SCHEMABINDING
AS
SELECT ref, count_big(*) AS NOMBRE
FROM dbo.commandline
GROUP BY ref;
GO
CREATE UNIQUE CLUSTERED INDEX X_V_commandline
ON dbo.V_commandline (ref);
Dès lors votre requête :
SELECT ref, count(*) FROM commandline GROUP BY ref
Mettra 0 secondes et consommera environ 2 pages !
A +
et le codagedes dates depuis JC à nos jours peut se faire sur 2octets ????
Tu es vraiment un abruti de première classe avec palme et
fourragère [1]. Lâche-le avec ça. Si tout le monde ici te mettait à
chacune de tes interventions nullissimes le nez dans tes erreurs, on
n'en finirait pas !
Quant à la discussion actuelle sur Wikipedia, elle montre à tous
ceux qui ne te connaissait pas encore la profondeur de tes
connaissances. Tout ce que tu prétends faire avec PICK, on peut le
faire au moins aussi bien avec SQL (et ce n'est pas une histoire de
lisibilité). Ce que je n'arrive pas à comprendre, c'est qu'il y ait
encore quelqu'un à jouer avec toi sur Wikipedia. Un autre mystère
est pour moi ta capacité à prétendre faire des choses avec un
système de base de données sans en connaître le fonctionnement
interne minimal ! Et je passe sur le fait que tu racontes un peu
partout des exploits professionnels à des endroits où j'aurais dû te
voir...
JKB
[1] et je ne parlerai pas de ton doctorat, parce qu'il y aurait beaucoup
de choses à dire. Que les nouveaux venus recherchent dans les archives
de ce groupe.
PS: répond ce que tu veux, je n'entrerai pas dans ton jeu.