Lists: | pgsql-fr-generale |
---|
From: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Deux tablespaces ? |
Date: | 2009-08-11 15:29:35 |
Message-ID: | 1250004575.4307.4.camel@samuel-laptop |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour à tous,
Dans un besoin de performance exellentes, je souhaite mettre en RAM
certaines tables de ma base de données (pas lourdes).
Je vais donc utiliser les tablespace. Or, les performances doivent être
performantes pour la lecture, et non l'écriture. Est-ce possible d'avoir
deux tablespaces pour que si mon serveur crash, j'ai n'ai pas un beau:
ERREUR: n'a pas pu ouvrir la relation 24576/16399/24668 : Aucun fichier
ou répertoire de ce type
A la lecture, il lit dans la tablespace ram, s'il ne le trouve pas, dans
l'autre. A l'écriture, c'est dans les deux...
Est-ce possible ? Ou un système similaire ?
Samuel.
From: | Mathieu Arnold <mat(at)mat(dot)cc> |
---|---|
To: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>, pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-11 15:35:52 |
Message-ID: | D5306881FC430353286749E1@ATuin.local |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
+--On 11 août 2009 17:29:35 +0200 Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
wrote:
| Est-ce possible ? Ou un système similaire ?
Je dirais que je mettrais plutôt beaucoup de RAM dans la machine et que je
laisserai postgresql en manger une énorme partie et l'OS utiliser le reste
pour le cache disque.
--
Mathieu Arnold
From: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
---|---|
To: | Mathieu Arnold <mat(at)mat(dot)cc> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-11 15:38:46 |
Message-ID: | 1250005126.4307.5.camel@samuel-laptop |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Et moi je dirais qu'il me faut 50MB uniquement dans la mémoire RAM et
que la partition est limité à cette taille.
Le mardi 11 août 2009 à 17:35 +0200, Mathieu Arnold a écrit :
> +--On 11 août 2009 17:29:35 +0200 Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
> wrote:
> | Est-ce possible ? Ou un système similaire ?
>
> Je dirais que je mettrais plutôt beaucoup de RAM dans la machine et que je
> laisserai postgresql en manger une énorme partie et l'OS utiliser le reste
> pour le cache disque.
>
From: | Jean-Samuel Reynaud <reynaud(at)elma(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-11 15:50:02 |
Message-ID: | 20090811175002.516537a6@reynaud-dell |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour,
À ma connaissance, il n'existe pas de système faisant cela. Je serai d'ailleurs très surpris de le découvrir
un jour dans la mesure où un tel système serait illogique dans le fonctionnement de Postgresql (comme de toute les
bases de données d'ailleurs) qui est de garantir au maximum la non-perte de données... (Je pense en fait que tu
cherches en réalité un mécanisme de mise en cache/ram automatique des tables .)
Dans la mise en place de ton mécanisme, Postgresql râle de ne pas trouver la table là où elle était attendue et
tu as une erreur (normale) mais qui, en général, est très grave (sauf que toi tu l'as provoquée volontairement). Je pense que tu
vas au devant de gros problèmes à détourner Postgresql de cette manière là (à mon avis tout du moins).
Je t'encourage à utiliser un autre mécanisme. Si tu es sous linux, le cache OS est très agressif naturellement et il
peut être configuré finement.
Je pense que s'appuyer sur ce cache me semble très largement suffisant. En gros tu n'as qu'a 'pré-charger' les tables dans le
cache de l'OS si tu veux vraiment sur ça soit en RAM dès le démarrage (avec simplement un select * des tables par exemple mais il
doit exister d'autre solutions).
Les autres mécanismes de cache en ram sont plus des gestions applicatives de ton problème (avec memcache par exemple)
Voilà,
Le Tue, 11 Aug 2009 17:29:35 +0200,
Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> a écrit :
> Bonjour à tous,
>
> Dans un besoin de performance exellentes, je souhaite mettre en RAM
> certaines tables de ma base de données (pas lourdes).
>
> Je vais donc utiliser les tablespace. Or, les performances doivent être
> performantes pour la lecture, et non l'écriture. Est-ce possible d'avoir
> deux tablespaces pour que si mon serveur crash, j'ai n'ai pas un beau:
>
> ERREUR: n'a pas pu ouvrir la relation 24576/16399/24668 : Aucun fichier
> ou répertoire de ce type
>
> A la lecture, il lit dans la tablespace ram, s'il ne le trouve pas, dans
> l'autre. A l'écriture, c'est dans les deux...
>
> Est-ce possible ? Ou un système similaire ?
>
> Samuel.
>
>
From: | Marc Cousin <cousinmarc(at)gmail(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-11 16:08:52 |
Message-ID: | 200908111808.52553.cousinmarc@gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Je présume que le message précédent suggérait simplement de laisser posgresql
faire. Si la table est réellement utilisée tout le temps, elle sera en cache.
C'est plus simple que de la mettre dans un ramdisk, et plus robuste (on reste
dans le cadre d'un fonctionnement normal).
Sinon si il s'agit vraiment de mettre des données précises en cache, la
solution se trouve peut-être hors de la base de données ? (memcached ou affilié)
Le Tuesday 11 August 2009 17:38:46, Samuel ROZE a écrit :
> Et moi je dirais qu'il me faut 50MB uniquement dans la mémoire RAM et
> que la partition est limité à cette taille.
>
> Le mardi 11 août 2009 à 17:35 +0200, Mathieu Arnold a écrit :
> > +--On 11 août 2009 17:29:35 +0200 Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
> >
> > wrote:
> > | Est-ce possible ? Ou un système similaire ?
> >
> > Je dirais que je mettrais plutôt beaucoup de RAM dans la machine et que
> > je laisserai postgresql en manger une énorme partie et l'OS utiliser le
> > reste pour le cache disque.
From: | Jean-Max Reymond <jmreymond(at)gmail(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-11 16:25:26 |
Message-ID: | h5s61n$oac$1@ger.gmane.org |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Samuel ROZE a écrit :
> Bonjour à tous,
>
> Dans un besoin de performance exellentes, je souhaite mettre en RAM
> certaines tables de ma base de données (pas lourdes).
>
> Je vais donc utiliser les tablespace. Or, les performances doivent être
> performantes pour la lecture, et non l'écriture. Est-ce possible d'avoir
> deux tablespaces pour que si mon serveur crash, j'ai n'ai pas un beau:
>
> ERREUR: n'a pas pu ouvrir la relation 24576/16399/24668 : Aucun fichier
> ou répertoire de ce type
>
> A la lecture, il lit dans la tablespace ram, s'il ne le trouve pas, dans
> l'autre. A l'écriture, c'est dans les deux...
>
> Est-ce possible ? Ou un système similaire ?
>
> Samuel.
>
>
il fut un temps où je m'étais écrit un petit gestionnaire de cache qui
gérait en mémoire les requêtes SQL et les retours de Postgres et tant
que la table Postgres n'était pas mis à jour (en update ou delete) et
que la requête était identique renvoyait le contenu de la requête
mémorisée dans un tableau en mémoire. Le gros avantage, c'est que
l'ayant interfacé avec pgpool, c'était transparent pour l'applicatif et
pour ces fainéants de développeurs qui ne voulaient pas toucher à leur
code et je dois dire que sur les incessants (:-( ) SELECT COUNT(*), ça
faisait des merveilles :-)
ceci dit, il auraient pu gérer le tout avec memcached mais projet à la
bourre, etc, etc
je l'avais proposé aux dev postgresql mais retour dans mes 22 car
purement applicatif (donc gérable par memcached) et pas bdd :-(
--
Jean-Max Reymond
CKR Solutions Open Source http://www.ckr-solutions.com
From: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-11 16:30:36 |
Message-ID: | 1250008236.4307.21.camel@samuel-laptop |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour,
Merci à toi et à Marc.
Ce sont des données simples qui sont appellées individuellements sur
plusieurs jours/semaines. C'est-à-dire que pendant 30 minutes, c'est un
enregistrement qui va être appellé souvent, après, pendant 15 jours il
ne va pas être appellé...
Or, dès la première récupération, ça doit être éfficace. Memcached vous
semble être une solution ou PostgreSQL fait ça très bien ?
(je ne connais absolument pas comment PostgreSQL fonctionnes au niveau
de son cache...)
Cordialement,
Samuel.
Le mardi 11 août 2009 à 17:50 +0200, Jean-Samuel Reynaud a écrit :
> Bonjour,
>
> À ma connaissance, il n'existe pas de système faisant cela. Je serai d'ailleurs très surpris de le découvrir
> un jour dans la mesure où un tel système serait illogique dans le fonctionnement de Postgresql (comme de toute les
> bases de données d'ailleurs) qui est de garantir au maximum la non-perte de données... (Je pense en fait que tu
> cherches en réalité un mécanisme de mise en cache/ram automatique des tables .)
>
> Dans la mise en place de ton mécanisme, Postgresql râle de ne pas trouver la table là où elle était attendue et
> tu as une erreur (normale) mais qui, en général, est très grave (sauf que toi tu l'as provoquée volontairement). Je pense que tu
> vas au devant de gros problèmes à détourner Postgresql de cette manière là (à mon avis tout du moins).
> Je t'encourage à utiliser un autre mécanisme. Si tu es sous linux, le cache OS est très agressif naturellement et il
> peut être configuré finement.
> Je pense que s'appuyer sur ce cache me semble très largement suffisant. En gros tu n'as qu'a 'pré-charger' les tables dans le
> cache de l'OS si tu veux vraiment sur ça soit en RAM dès le démarrage (avec simplement un select * des tables par exemple mais il
> doit exister d'autre solutions).
> Les autres mécanismes de cache en ram sont plus des gestions applicatives de ton problème (avec memcache par exemple)
>
> Voilà,
> Le Tue, 11 Aug 2009 17:29:35 +0200,
> Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> a écrit :
>
> > Bonjour à tous,
> >
> > Dans un besoin de performance exellentes, je souhaite mettre en RAM
> > certaines tables de ma base de données (pas lourdes).
> >
> > Je vais donc utiliser les tablespace. Or, les performances doivent être
> > performantes pour la lecture, et non l'écriture. Est-ce possible d'avoir
> > deux tablespaces pour que si mon serveur crash, j'ai n'ai pas un beau:
> >
> > ERREUR: n'a pas pu ouvrir la relation 24576/16399/24668 : Aucun fichier
> > ou répertoire de ce type
> >
> > A la lecture, il lit dans la tablespace ram, s'il ne le trouve pas, dans
> > l'autre. A l'écriture, c'est dans les deux...
> >
> > Est-ce possible ? Ou un système similaire ?
> >
> > Samuel.
> >
> >
>
From: | Mathieu Arnold <mat(at)mat(dot)cc> |
---|---|
To: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-11 16:40:32 |
Message-ID: | 1103A07723100F00E4A471E3@ATuin.local |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
+--On 11 août 2009 17:38:46 +0200 Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
wrote:
| Et moi je dirais qu'il me faut 50MB uniquement dans la mémoire RAM et
| que la partition est limité à cette taille.
|
| Le mardi 11 août 2009 à 17:35 +0200, Mathieu Arnold a écrit :
|> +--On 11 août 2009 17:29:35 +0200 Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
|> wrote:
|> | Est-ce possible ? Ou un système similaire ?
|>
|> Je dirais que je mettrais plutôt beaucoup de RAM dans la machine et que
|> je laisserai postgresql en manger une énorme partie et l'OS utiliser le
|> reste pour le cache disque.
Ben, alors, si la table fait 50Mo, si la machine a un peu de ram, entre 1
et 2Go, ta table sera déjà dans le cache disque, et tu n'a pas a te
préoccuper du problème de tablespace plus là au redémarrage.
--
Mathieu Arnold
From: | Marc Cousin <cousinmarc(at)gmail(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-11 16:50:34 |
Message-ID: | 200908111850.34672.cousinmarc@gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Si la donnée n'est pas appelée pendant 15 jours, elle a de bonnes chances de
sortir du cache. Maintenant, qu'appelle t'on efficace ? La plupart du temps,
aller chercher un enregistrement qui n'est pas dans le cache, ça va entrainer
2 ou 3 entrées/sorties (trouver l'entrée dans l'index puis aller dans le bon
bloc de la table). Donc probablement dans les 10ms sur un bon disque…
50Mo c'est vraiment une très petite table…
Le Tuesday 11 August 2009 18:30:36, Samuel ROZE a écrit :
> Bonjour,
>
> Merci à toi et à Marc.
>
> Ce sont des données simples qui sont appellées individuellements sur
> plusieurs jours/semaines. C'est-à-dire que pendant 30 minutes, c'est un
> enregistrement qui va être appellé souvent, après, pendant 15 jours il
> ne va pas être appellé...
>
> Or, dès la première récupération, ça doit être éfficace. Memcached vous
> semble être une solution ou PostgreSQL fait ça très bien ?
>
> (je ne connais absolument pas comment PostgreSQL fonctionnes au niveau
> de son cache...)
>
> Cordialement,
> Samuel.
>
> Le mardi 11 août 2009 à 17:50 +0200, Jean-Samuel Reynaud a écrit :
> > Bonjour,
> >
> > À ma connaissance, il n'existe pas de système faisant cela. Je serai
> > d'ailleurs très surpris de le découvrir un jour dans la mesure où un tel
> > système serait illogique dans le fonctionnement de Postgresql (comme de
> > toute les bases de données d'ailleurs) qui est de garantir au maximum la
> > non-perte de données... (Je pense en fait que tu cherches en réalité un
> > mécanisme de mise en cache/ram automatique des tables .)
> >
> > Dans la mise en place de ton mécanisme, Postgresql râle de ne pas
> > trouver la table là où elle était attendue et tu as une erreur (normale)
> > mais qui, en général, est très grave (sauf que toi tu l'as provoquée
> > volontairement). Je pense que tu vas au devant de gros problèmes à
> > détourner Postgresql de cette manière là (à mon avis tout du moins). Je
> > t'encourage à utiliser un autre mécanisme. Si tu es sous linux, le cache
> > OS est très agressif naturellement et il peut être configuré finement.
> > Je pense que s'appuyer sur ce cache me semble très largement suffisant.
> > En gros tu n'as qu'a 'pré-charger' les tables dans le cache de l'OS si tu
> > veux vraiment sur ça soit en RAM dès le démarrage (avec simplement un
> > select * des tables par exemple mais il doit exister d'autre solutions).
> > Les autres mécanismes de cache en ram sont plus des gestions
> > applicatives de ton problème (avec memcache par exemple)
> >
> > Voilà,
> > Le Tue, 11 Aug 2009 17:29:35 +0200,
> >
> > Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> a écrit :
> > > Bonjour à tous,
> > >
> > > Dans un besoin de performance exellentes, je souhaite mettre en RAM
> > > certaines tables de ma base de données (pas lourdes).
> > >
> > > Je vais donc utiliser les tablespace. Or, les performances doivent être
> > > performantes pour la lecture, et non l'écriture. Est-ce possible
> > > d'avoir deux tablespaces pour que si mon serveur crash, j'ai n'ai pas
> > > un beau:
> > >
> > > ERREUR: n'a pas pu ouvrir la relation 24576/16399/24668 : Aucun
> > > fichier ou répertoire de ce type
> > >
> > > A la lecture, il lit dans la tablespace ram, s'il ne le trouve pas,
> > > dans l'autre. A l'écriture, c'est dans les deux...
> > >
> > > Est-ce possible ? Ou un système similaire ?
> > >
> > > Samuel.
From: | Dimitri Fontaine <dfontaine(at)hi-media(dot)com> |
---|---|
To: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-11 21:29:34 |
Message-ID: | B709F160-CFA6-4EBA-839C-8AB134E82B6B@hi-media.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour,
Le 11 août 09 à 18:30, Samuel ROZE a écrit :
> Or, dès la première récupération, ça doit être éfficace. Memcached
> vous
> semble être une solution ou PostgreSQL fait ça très bien ?
>
> (je ne connais absolument pas comment PostgreSQL fonctionnes au niveau
> de son cache...)
Ne _jamais_ optimiser _avant_ d'avoir des problèmes de performance, ou
bien en anglais dans le texte :
In DonaldKnuth's paper "StructuredProgrammingWithGoToStatements",
he wrote: "Programmers waste enormous amounts of time thinking about,
or worrying about, the speed of noncritical parts of their programs,
and these attempts at efficiency actually have a strong negative
impact when debugging and maintenance are considered. We should forget
about small efficiencies, say about 97% of the time: premature
optimization is the root of all evil."
Or ta dernière intervention me fait penser que tu ne sais pas encore
si tu vas être confronté à un soucis de performance, et pas non plus
si celui là sera lié à la manière de mettre les données en cache.
Il est temps de faire des tests de performances (je recommandes Tsung)
sur ton application (ou son prototype, mais avec des quantités de
données représentatives) et si nécessaire un peu de profiling. Ensuite
on parlera peut être de comportement du cache système et linux.
Bonne soirée,
--
dim
From: | Cédric Villemain <cedric(dot)villemain(at)dalibo(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Cc: | Dimitri Fontaine <dfontaine(at)hi-media(dot)com>, Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-12 14:47:01 |
Message-ID: | 200908121647.07669.cedric.villemain@dalibo.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le mardi 11 août 2009, Dimitri Fontaine a écrit :
> Bonjour,
>
> Le 11 août 09 à 18:30, Samuel ROZE a écrit :
> > Or, dès la première récupération, ça doit être éfficace. Memcached
> > vous
> > semble être une solution ou PostgreSQL fait ça très bien ?
> >
> > (je ne connais absolument pas comment PostgreSQL fonctionnes au niveau
> > de son cache...)
>
> Ne _jamais_ optimiser _avant_ d'avoir des problèmes de performance, ou
> bien en anglais dans le texte :
>
> In DonaldKnuth's paper "StructuredProgrammingWithGoToStatements",
> he wrote: "Programmers waste enormous amounts of time thinking about,
> or worrying about, the speed of noncritical parts of their programs,
> and these attempts at efficiency actually have a strong negative
> impact when debugging and maintenance are considered. We should forget
> about small efficiencies, say about 97% of the time: premature
> optimization is the root of all evil."
>
> Or ta dernière intervention me fait penser que tu ne sais pas encore
> si tu vas être confronté à un soucis de performance, et pas non plus
> si celui là sera lié à la manière de mettre les données en cache.
>
> Il est temps de faire des tests de performances (je recommandes Tsung)
> sur ton application (ou son prototype, mais avec des quantités de
> données représentatives) et si nécessaire un peu de profiling. Ensuite
> on parlera peut être de comportement du cache système et linux.
j'aurais pas mieux dit :)
>
> Bonne soirée,
----
Cédric Villemain
Administrateur de Base de Données
Cel: +33 (0)6 74 15 56 53
http://dalibo.com - http://dalibo.org
From: | William Dode <wilk(at)flibuste(dot)net> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-12 16:22:00 |
Message-ID: | h5uq78$1vs$1@ger.gmane.org |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
On 11-08-2009, Samuel ROZE wrote:
> Bonjour,
>
> Merci à toi et à Marc.
>
> Ce sont des données simples qui sont appellées individuellements sur
> plusieurs jours/semaines. C'est-à-dire que pendant 30 minutes, c'est un
> enregistrement qui va être appellé souvent, après, pendant 15 jours il
> ne va pas être appellé...
>
> Or, dès la première récupération, ça doit être éfficace. Memcached vous
> semble être une solution ou PostgreSQL fait ça très bien ?
>
> (je ne connais absolument pas comment PostgreSQL fonctionnes au niveau
> de son cache...)
Sauf erreur, postgresql n'as pas de query cache (pourquoi au fait ?),
donc un cache applicatif est intéressant surtout s'il y a des requêtes
lourdes et répétées, sans mises à jour entre. Et memcached est utile
à son tour si en plus de cette condition plusieurs applis distinctes,
voir sur des machines différentes, accèdent à la base en même temps.
--
William Dodé - http://flibuste.net
Informaticien Indépendant
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Cc: | William Dode <wilk(at)flibuste(dot)net> |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-12 16:58:01 |
Message-ID: | 200908121858.01790.guillaume@lelarge.info |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le mercredi 12 août 2009 à 18:22:00, William Dode a écrit :
> On 11-08-2009, Samuel ROZE wrote:
> > Bonjour,
> >
> > Merci à toi et à Marc.
> >
> > Ce sont des données simples qui sont appellées individuellements sur
> > plusieurs jours/semaines. C'est-à-dire que pendant 30 minutes, c'est un
> > enregistrement qui va être appellé souvent, après, pendant 15 jours il
> > ne va pas être appellé...
> >
> > Or, dès la première récupération, ça doit être éfficace. Memcached vous
> > semble être une solution ou PostgreSQL fait ça très bien ?
> >
> > (je ne connais absolument pas comment PostgreSQL fonctionnes au niveau
> > de son cache...)
>
> Sauf erreur, postgresql n'as pas de query cache (pourquoi au fait ?),
Parce que chaque session voit une image spécifique de la base. Le processus 1
ne voit pas forcément la même chose que le processus 2. C'est le principe du
système MVCC.
Même au sein d'un même processus, ce n'est pas forcément intéressant. Une
requête r1 exécutée au temps t1 ne renverra pas forcément la même chose que la
même requête exécutée par le même processus au temps t2.
> donc un cache applicatif est intéressant surtout s'il y a des requêtes
> lourdes et répétées, sans mises à jour entre.
Même avec des mises à jour, cela peut être intéressant. Mais généralement pour
des tables de type dictionnaire, dont les données changent, mais peu
fréquemment. Avec le système du LISTEN/NOTIFY, un client peut être averti de
certains changements.
--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com
From: | Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr> |
---|---|
To: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org, William Dode <wilk(at)flibuste(dot)net> |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-25 08:46:59 |
Message-ID: | 20090825084659.GA10891@nic.fr |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
On Wed, Aug 12, 2009 at 06:58:01PM +0200,
Guillaume Lelarge <guillaume(at)lelarge(dot)info> wrote
a message of 45 lines which said:
> > Sauf erreur, postgresql n'as pas de query cache (pourquoi au fait ?),
>
> Parce que chaque session voit une image spécifique de la base.
Ce qui ne veut pas dire que les caches n'existent pas lorsqu'on crée
une nouvelle transaction à chaque fois, puisqu'il y a ceux du
système. Ici, sur Debian/Linux, avec l'option -e qui fait une nouvelle
connexion à chaque requête, notez la durée bien plus longue de la
première requête :
% echoping -n 8 -m postgresql localhost -c dbname=dnsmezzo2 -e \
'SELECT count(*) FROM DNS_packets WHERE file=57'
Elapsed time: 119.581666 seconds
Elapsed time: 0.965749 seconds
Elapsed time: 0.995577 seconds
Elapsed time: 0.936664 seconds
Elapsed time: 0.983532 seconds
Elapsed time: 0.988601 seconds
Elapsed time: 0.986463 seconds
Elapsed time: 0.991618 seconds
---
Minimum time: 0.936664 seconds (273 bytes per sec.)
Maximum time: 119.581666 seconds (2 bytes per sec.)
Average time: 15.803733 seconds (16 bytes per sec.)
Standard deviation: 39.224375
Median time: 0.987532 seconds (259 bytes per sec.)
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org, William Dode <wilk(at)flibuste(dot)net> |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-25 08:56:08 |
Message-ID: | 200908251056.08598.guillaume@lelarge.info |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le mardi 25 août 2009 à 10:46:59, Stephane Bortzmeyer a écrit :
> On Wed, Aug 12, 2009 at 06:58:01PM +0200,
> Guillaume Lelarge <guillaume(at)lelarge(dot)info> wrote
>
> a message of 45 lines which said:
> > > Sauf erreur, postgresql n'as pas de query cache (pourquoi au fait ?),
> >
> > Parce que chaque session voit une image spécifique de la base.
>
> Ce qui ne veut pas dire que les caches n'existent pas lorsqu'on crée
> une nouvelle transaction à chaque fois, puisqu'il y a ceux du
> système. Ici, sur Debian/Linux, avec l'option -e qui fait une nouvelle
> connexion à chaque requête, notez la durée bien plus longue de la
> première requête :
>
> % echoping -n 8 -m postgresql localhost -c dbname=dnsmezzo2 -e \
> 'SELECT count(*) FROM DNS_packets WHERE file=57'
> Elapsed time: 119.581666 seconds
> Elapsed time: 0.965749 seconds
> Elapsed time: 0.995577 seconds
> Elapsed time: 0.936664 seconds
> Elapsed time: 0.983532 seconds
> Elapsed time: 0.988601 seconds
> Elapsed time: 0.986463 seconds
> Elapsed time: 0.991618 seconds
> ---
> Minimum time: 0.936664 seconds (273 bytes per sec.)
> Maximum time: 119.581666 seconds (2 bytes per sec.)
> Average time: 15.803733 seconds (16 bytes per sec.)
> Standard deviation: 39.224375
> Median time: 0.987532 seconds (259 bytes per sec.)
Ce n'est pas un cache de requêtes, c'est un cache de fichiers (au niveau
Linux, comme au niveau PostgreSQL).
--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com
From: | Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr> |
---|---|
To: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org, William Dode <wilk(at)flibuste(dot)net> |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-25 09:00:30 |
Message-ID: | 20090825090030.GA15478@nic.fr |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
On Tue, Aug 25, 2009 at 10:56:08AM +0200,
Guillaume Lelarge <guillaume(at)lelarge(dot)info> wrote
a message of 40 lines which said:
> Ce n'est pas un cache de requêtes, c'est un cache de fichiers (au
> niveau Linux, comme au niveau PostgreSQL).
Le résultat est le même :-) Et, si on veut pinailler, c'est sans doute
surtout un cache de blocs :-)
From: | Jean-Max Reymond <jmreymond(at)gmail(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-25 09:04:49 |
Message-ID: | h709fh$916$1@ger.gmane.org |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Stephane Bortzmeyer a écrit :
> On Tue, Aug 25, 2009 at 10:56:08AM +0200,
> Guillaume Lelarge <guillaume(at)lelarge(dot)info> wrote
> a message of 40 lines which said:
>
>> Ce n'est pas un cache de requêtes, c'est un cache de fichiers (au
>> niveau Linux, comme au niveau PostgreSQL).
>
> Le résultat est le même :-) Et, si on veut pinailler, c'est sans doute
> surtout un cache de blocs :-)
>
le résultat n'est pas le même car si tu as un count(*) sur une table de
24 Go, tu as plus de chance d'avoir dans ton cache de requête le
résultat de ton count(*) que celui des 24 Go de la table dans ton cache
de fichiers.
--
Jean-Max Reymond
CKR Solutions Open Source http://www.ckr-solutions.com
From: | Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr> |
---|---|
To: | Jean-Max Reymond <jmreymond(at)gmail(dot)com> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-25 09:14:37 |
Message-ID: | 20090825091437.GA17368@nic.fr |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
On Tue, Aug 25, 2009 at 11:04:49AM +0200,
Jean-Max Reymond <jmreymond(at)gmail(dot)com> wrote
a message of 19 lines which said:
> le résultat n'est pas le même car si tu as un count(*) sur une table
> de 24 Go, tu as plus de chance d'avoir dans ton cache de requête le
> résultat de ton count(*) que celui des 24 Go de la table dans ton
> cache de fichiers.
Oui, je comprends (au fait, la table de mes tests faisait justement 24
Go pile, c'est amusant mais le WHERE réduisait la taille
considérablement). Ceci dit, lorsqu'on fait un COUNT(*), je ne pense
pas que PostgreSQL lise depuis le disque la totalité des données,
non ? Cela serait inutile.
(On dévie du sujet original, là, je suis d'accord avec la conclusion
générale, qu'il faut acheter de la RAM et laisser PostgreSQL et Linux
se débrouiller, mais je voulais juste améliorer ma compréhension du
fonctionnement du SGBD.)
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Cc: | "Jean-Max Reymond" <jmreymond(at)gmail(dot)com> |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-25 09:15:26 |
Message-ID: | 200908251115.26899.guillaume@lelarge.info |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le mardi 25 août 2009 à 11:04:49, Jean-Max Reymond a écrit :
> Stephane Bortzmeyer a écrit :
> > On Tue, Aug 25, 2009 at 10:56:08AM +0200,
> > Guillaume Lelarge <guillaume(at)lelarge(dot)info> wrote
> >
> > a message of 40 lines which said:
> >> Ce n'est pas un cache de requêtes, c'est un cache de fichiers (au
> >> niveau Linux, comme au niveau PostgreSQL).
> >
> > Le résultat est le même :-) Et, si on veut pinailler, c'est sans doute
> > surtout un cache de blocs :-)
>
> le résultat n'est pas le même car si tu as un count(*) sur une table de
> 24 Go, tu as plus de chance d'avoir dans ton cache de requête le
> résultat de ton count(*) que celui des 24 Go de la table dans ton cache
> de fichiers.
Sans compter qu'il suffit de lire le résultat dans un cas, alors que dans
l'autre il faut tout recalculer. Donc, même dans le cas où tout tient dans le
cache, il serait plus rapide d'avoir le résultat via un cache de requêtes que
via un cache de blocs (car c'est bien des blocs pour être précis :) ).
--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Cc: | Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr>, "Jean-Max Reymond" <jmreymond(at)gmail(dot)com> |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-25 09:44:50 |
Message-ID: | 200908251144.50288.guillaume@lelarge.info |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le mardi 25 août 2009 à 11:14:37, Stephane Bortzmeyer a écrit :
> On Tue, Aug 25, 2009 at 11:04:49AM +0200,
> Jean-Max Reymond <jmreymond(at)gmail(dot)com> wrote
>
> a message of 19 lines which said:
> > le résultat n'est pas le même car si tu as un count(*) sur une table
> > de 24 Go, tu as plus de chance d'avoir dans ton cache de requête le
> > résultat de ton count(*) que celui des 24 Go de la table dans ton
> > cache de fichiers.
>
> Oui, je comprends (au fait, la table de mes tests faisait justement 24
> Go pile, c'est amusant mais le WHERE réduisait la taille
> considérablement). Ceci dit, lorsqu'on fait un COUNT(*), je ne pense
> pas que PostgreSQL lise depuis le disque la totalité des données,
> non ? Cela serait inutile.
>
Il lit l'intégralité de la table, ce qui sous-entend des lectures du cache
pour les blocs en cache et des lectures du disque pour les autres.
> (On dévie du sujet original, là, je suis d'accord avec la conclusion
> générale, qu'il faut acheter de la RAM et laisser PostgreSQL et Linux
> se débrouiller, mais je voulais juste améliorer ma compréhension du
> fonctionnement du SGBD.)
--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com
From: | William Dode <wilk(at)flibuste(dot)net> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Deux tablespaces ? |
Date: | 2009-08-25 10:46:48 |
Message-ID: | h70feo$gn6$1@ger.gmane.org |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Puisqu'on revient sur le sujet...
On 12-08-2009, Guillaume Lelarge wrote:
> Le mercredi 12 août 2009 à 18:22:00, William Dode a écrit :
>> On 11-08-2009, Samuel ROZE wrote:
>> > Bonjour,
>> >
>> > Merci à toi et à Marc.
>> >
>> > Ce sont des données simples qui sont appellées individuellements sur
>> > plusieurs jours/semaines. C'est-à-dire que pendant 30 minutes, c'est un
>> > enregistrement qui va être appellé souvent, après, pendant 15 jours il
>> > ne va pas être appellé...
>> >
>> > Or, dès la première récupération, ça doit être éfficace. Memcached vous
>> > semble être une solution ou PostgreSQL fait ça très bien ?
>> >
>> > (je ne connais absolument pas comment PostgreSQL fonctionnes au niveau
>> > de son cache...)
>>
>> Sauf erreur, postgresql n'as pas de query cache (pourquoi au fait ?),
>
> Parce que chaque session voit une image spécifique de la base. Le processus 1
> ne voit pas forcément la même chose que le processus 2. C'est le
> principe du système MVCC.
>
> Même au sein d'un même processus, ce n'est pas forcément intéressant. Une
> requête r1 exécutée au temps t1 ne renverra pas forcément la même chose que la
> même requête exécutée par le même processus au temps t2.
Les processus différents ou non peuvent savoir assez facilement s'il
y a eu une mise à jour sur la base. Au niveau applicatif je gère ce cas,
c'est tellement simple, s'il n'y a eu strictement aucune mises à jour
sur la base (un seul applicatif y a accès) toutes les requêtes sont
mises en cache. A la moindre mise à jour j'efface le cache.
Il me semble que le problème vient surtout du fait qu'une requête
pourrait avoir des effets de bords (appel d'une fonction, d'une date
etc.) et qu'il serait compliqué d'analyser la requête juste pour ça.
Alors qu'au niveau appli, je le décide moi-même suivant la requête.
>
>> donc un cache applicatif est intéressant surtout s'il y a des requêtes
>> lourdes et répétées, sans mises à jour entre.
>
> Même avec des mises à jour, cela peut être intéressant. Mais généralement pour
> des tables de type dictionnaire, dont les données changent, mais peu
> fréquemment. Avec le système du LISTEN/NOTIFY, un client peut être averti de
> certains changements.
Je sais ce qui est la moyenne, mais dans la grande majorité de mes
applis j'ai vraiment beaucoup de requêtes en lecture sans mises à jour
entre. Sur des sites web ça peut même être des mises à jours une seule
fois par semaine.
Ce qui est gênant c'est que d'autres bdd le font, mysql il me semble, ça
peut vachement influencer les benchs...
Par contre, pour moi c'est vraiment simple à gérer au niveau appli donc
ça ne me dérange pas.
--
William Dodé - http://flibuste.net
Informaticien Indépendant