Vous n'êtes pas identifié(e).

#1 Re : Général » Récupération sous forme d'export table et data sans indexs » 29/10/2012 18:27:21

Comme rjuju vous l'a déjà indiqué, votre procédure stockée ne va pas fonctionner correctement. L'ordre COPY est appelé pour chaque ligne retournée par le curseur, et à chaque itération va écraser le fichier créé à l'itération précédente. Vous n'aurez alors que la définition du dernier index retourné par votre requête.
L'ordre suivant est un peu plus simple que ce que vous faites et vous récupère l'ordre de création de tous les index utilisateurs. La fonction et son curseur sont inutiles d'ailleurs:

COPY (SELECT pg_get_indexdef(indexrelid) FROM pg_stat_user_indexes) TO '..../testindex.sql'

#2 Re : Général » pgstatpack et pg_stat_statements » 25/09/2012 23:28:59

Bonjour,

Désolé de ne pas avoir donné de nouvelles depuis. L'auteur a poussé le correctif adéquat pour gérer correctement pg_stat_statements: le patch appliqué.

Vous devriez pouvoir récupérer la dernière version et faire fonctionner pgstatspack correctement dorénavant.

#3 Re : Général » pgstatpack et pg_stat_statements » 21/09/2012 11:51:56

Uwe Bartels va réaliser le correctif. Une nouvelle version sera disponible dans quelques jours normalement.

#4 Re : Général » pgstatpack et pg_stat_statements » 21/09/2012 10:11:24

Bonjour,

Dans un premier temps, il va vous falloir modifier le script sql/pgstatspack_create_snap.sql pour corriger la condition jointure mal écrite (ligne 203 du script SQL):

    join pgstatspack_names n1 on s.query=n1.name

Une fois que c'est fait, il vous faudra recréer la fonction pgstatspack_snap en exécutant le script sur la base sur laquelle vous avez rencontrez ce problème.

Je remonte le bug à l'auteur.

Cordialement,
Thomas

#5 Re : Association PostgreSQLfr » Appel à cotisation 2012 » 03/01/2012 14:00:49

Bonjour et bonne année à vous,

L'année 2012 démarre avec quelques changements pour l'association. Vous devriez recevoir un appel à cotisation bientôt.

Cordialement,
Thomas

#6 Re : Général » index ne prenant pas en compte les accents » 30/12/2011 16:52:16

Ce que je vois, c'est que votre nouvel index n'est utilisé dans aucun cas (cf première ligne de l'explain qui donne un seq scan, donc une lecture séquentielle pour les deux requêtes).
La différence de temps d'exécution s'explique car pour la première requête, PostgreSQL va calculer le résultat de lower(erpunaccent(name)) pour chaque ligne lues et le comparer à 'ogvvatoies%' avec le LIKE. Dans le second cas, PostgreSQL va comparer directement la colonne name à 'oGvvÀtÖiÉ%', mais sans le moindre calcul.


Voici un exemple d'index sur fonction, chose que vous avez probablement faite:

postgres=# EXPLAIN SELECT * FROM test WHERE nom = 'tata';
                                  QUERY PLAN                                  
------------------------------------------------------------------------------
 Index Only Scan using idx_test_nom on test  (cost=0.00..4.30 rows=1 width=5)
   Index Cond: (nom = 'tata'::text)
(2 lignes)

postgres=# EXPLAIN ANALYZE SELECT * FROM test WHERE nom = 'tata';
                                                       QUERY PLAN                                                       
------------------------------------------------------------------------------------------------------------------------
 Index Only Scan using idx_test_nom on test  (cost=0.00..8.45 rows=9 width=5) (actual time=0.070..0.073 rows=1 loops=1)
   Index Cond: (nom = 'tata'::text)
 Total runtime: 0.135 ms
(3 lignes)

postgres=# EXPLAIN ANALYZE SELECT * FROM test WHERE lower(nom) = 'tata';
                                               QUERY PLAN                                               
--------------------------------------------------------------------------------------------------------
 Seq Scan on test  (cost=0.00..5092.17 rows=1311 width=5) (actual time=278.159..278.161 rows=1 loops=1)
   Filter: (lower(nom) = 'tata'::text)
   Rows Removed by Filter: 262144
 Total runtime: 278.215 ms
(4 lignes)

postgres=# CREATE INDEX idx_test_lower_nom ON test (lower(nom));
CREATE INDEX
postgres=# EXPLAIN ANALYZE SELECT * FROM test WHERE lower(nom) = 'tata';
                                                          QUERY PLAN                                                           
-------------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on test  (cost=26.44..1261.33 rows=1311 width=5) (actual time=0.272..0.273 rows=1 loops=1)
   Recheck Cond: (lower(nom) = 'tata'::text)
   ->  Bitmap Index Scan on idx_test_lower_nom  (cost=0.00..26.11 rows=1311 width=0) (actual time=0.253..0.253 rows=1 loops=1)
         Index Cond: (lower(nom) = 'tata'::text)
 Total runtime: 0.343 ms
(5 lignes)

Ensuite, pour utiliser LIKE, n'oubliez pas de créer l'index sur fonction avec l'option varchar_pattern_ops:

postgres=# EXPLAIN ANALYZE SELECT * FROM test WHERE lower(nom) LIKE 'tat%';
                                               QUERY PLAN                                               
--------------------------------------------------------------------------------------------------------
 Seq Scan on test  (cost=0.00..5092.17 rows=1311 width=5) (actual time=244.566..244.568 rows=1 loops=1)
   Filter: (lower(nom) ~~ 'tat%'::text)
   Rows Removed by Filter: 262144
 Total runtime: 244.620 ms
(4 lignes)

postgres=# DROP INDEX idx_test_lower_nom ;
DROP INDEX
postgres=# CREATE INDEX idx_test_lower_nom ON test (lower(nom) varchar_pattern_ops);
CREATE INDEX
postgres=# EXPLAIN ANALYZE SELECT * FROM test WHERE lower(nom) LIKE 'tat%';
                                                          QUERY PLAN                                                           
-------------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on test  (cost=29.72..1264.61 rows=1311 width=5) (actual time=0.262..0.264 rows=1 loops=1)
   Filter: (lower(nom) ~~ 'tat%'::text)
   ->  Bitmap Index Scan on idx_test_lower_nom  (cost=0.00..29.39 rows=1311 width=0) (actual time=0.222..0.222 rows=1 loops=1)
         Index Cond: ((lower(nom) ~>=~ 'tat'::text) AND (lower(nom) ~<~ 'tau'::text))
 Total runtime: 0.335 ms
(5 lignes)

#8 Re : Migration » Migration 8.4 en 9.1.1 - Pb sur psql » 13/10/2011 16:59:10

Je vous demandais de faire rpm -ql sur un paquet particulier. Vous saurez donc où se trouve les binaires.

De mémoire, c'est /usr/pgsql-9.1 mais ce n'est pas sûr.

#9 Re : Migration » Migration 8.4 en 9.1.1 - Pb sur psql » 13/10/2011 12:59:34

Que donne la commande suivante:
rpm -ql postrgresql-9.1

Normalement, vous devrez éditer la variable $PATH pour pointer vers le répertoire des binaires de la 9.1. Cf le retour de la commande précédente.

#10 Re : Général » Retour sur les performances de PostgreSQL sur VMWare ESX » 12/10/2011 16:17:42

Alors, je reviens avec ça. On avait loosé une conf de VMWare pour l'accès au SAN --> réglé.
Ensuite je n'ai pas suivi, mais il y aussi une histoire avec la version de vmware tools et probablement des pilotes. Là, je ne sais pas en dire plus, n'étant pas en charge de ça (et surtout formateur au moment de la résolution).

#12 Re : Sécurité » Pas tout compris » 12/10/2011 13:17:09

Bonjour,

Attention concernant le vocabulaire. En vous connecter avec le user test et en allant voir chez toto,vous vous connectez sur la BASE toto et n'allez pas voir dans le schéma de toto. Une instance Postgres peut héberger plusieurs bases de données - pour preuve, les deux ordres CREATE DATABASE que vous avez passez.
Et pour vous répondre, lorsque vous faites le CREATE DATABASE, Postgres vous place implicitement un ordre "GRANT CONNECT, TEMPORARY ON DATABASE base TO public;" public étant un alias pour dire "tout le monde".
Donc pour interdire à test de se connecter sur la base toto, vous devrez y aller en deux étapes :
- REVOKE CONNECT, TEMPORARY ON DATABASE toto FROM public;
- GRANT CONNECT, TEMPORARY ON DATABASE toto TOTO;

Et contrairement à Oracle (car j'imagine que la confusion vient de là), un utilisateur ne dispose pas d'un schéma particulier qui lui est dédié. A vous de créer les bons schémas dans les bonnes bases. En revanche, chaque base possède un schéma "public" dans lequel tout le monde peut créer des objets.
De la même façon, le schéma public reçoit implicitement un "GRANT ALL ON SCHEMA public TO public;".

#13 Re : Publications » Nouvel article : Migration Oracle ou SQL Server vers PosteGreSQL - les » 12/10/2011 11:32:29

La philosophie du projet Postgres est assez claire en ce qui concerne la gestion de l'espace de stockage: vous devez superviser l'espace disque vous même. Et effectivement, cet espace de stockage ne se gère pas de la même façon qu'Oracle ou SQL Server. Je le vois comme une faiblesse et une force de Postgres: vous êtes plus limité mais le SGBD est bien moins complexe.
Donc à vous de mettre en œuvre une supervision pour que la saturation de l'espace disque n'arrive pas.
Je rejoints Frédéric sur l'absence de tablespace READ ONLY. J'aimerai bien que Postgres puisse disposer d'une telle fonctionnalité.

Et concernant le dernier point, c'est encore la philosophie de Postgres qui entre en jeu. Les développeurs vous fournissent un noyau, le SGBD lui-même, et vous laisse la possibilité de l'enrichir à votre guise. Ainsi sont nés un certain nombre de projets annexes, et notamment Slony et Londiste qui répondent au besoin de réplication des données.

Cdt,
Thomas

#14 Re : Général » Retour sur les performances de PostgreSQL sur VMWare ESX » 26/09/2011 16:32:30

On a une nouvelle piste: les VM qui ont maintenant de bonnes perfs sont en RHEL 5. Celles qui posent encore problèmes sont en CentOS 5. De la même façon, les RHEL disposent de moins de RAM que les CentOS. Encore une fois, il nous faut pousser les tests pour avoir une réponse.
Concernant la charge, on est limite, mais pour l'instant on tient encore.

#15 Re : Général » Retour sur les performances de PostgreSQL sur VMWare ESX » 22/09/2011 22:23:40

Merci Dim pour le truc. J'essayerai de faire mettre ça en place. Ce qui pêche, ce sont surtout les écritures, je doute que ce paramètre influence ces opérations.

A priori, la solution donnée ne fonctionne pas dans tous les cas. On essaye d'avancer encore sur le sujet... En tout cas, ne vous attendez pas à des miracles. On va explorer la piste soulevée par Marc dès le retour de notre admin SAN.

Merci pour vos suggestions.

#16 Re : Général » Retour sur les performances de PostgreSQL sur VMWare ESX » 21/09/2011 13:48:40

Salut Jean-Paul,

Je referai un retour si j'ai l'occasion de faire ces fameux tests de performances. N'hésitez pas à compléter ou à corriger les infos, je ne prétend pas que c'est la recette miracle. Néanmoins, les accès disques sont maintenant normaux.

A+ wink

#18 Re : PL/pgSQL » trigger character 'DD/MM/YYYY' to timestamp » 21/09/2011 10:20:26

Je vois où vous voulez en venir, mais j'ai le sentiment que ce n'est pas la bonne approche.

Voyez d'abord la section 8.5.1 de la doc: http://www.postgresql.org/docs/8.4/stat … etime.html
PostgreSQL devrait décoder de lui même une date de la forme DD/MM/YYYY. Il faudra néanmoins d'assurer que le paramètre datestyle soit positionné à 'iso, dmy' ou 'sql, dmy' (dans le postgresql.conf, ou dans la session avec SET datestyle='sql, dmy';). Vous devriez vous économiser un trigger.

Pour info:
postgres=# CREATE TABLE test (date_referentiel DATE);

postgres=# SHOW datestyle ;
DateStyle
-----------
ISO, DMY
(1 ligne)

postgres=# INSERT INTO test (date_referentiel) VALUES ('21/09/2011');
INSERT 0 1

postgres=# SELECT * FROM test;
date_referentiel
------------------
2011-09-21
(1 ligne)

#19 Re : Général » Retour sur les performances de PostgreSQL sur VMWare ESX » 20/09/2011 17:33:23

J'ai toujours un truc à voir, sur la VM test, on est à 134Mo/s mais sur une autre on est à 276 Mo/s. Je ne sais pas s'il y a encore un facteur qui joue. Je dois démarrer un projet de bench pour s'assurer que les VM ont des perfs potables - bon, dans la vraie vie on l'aurait fait avant de passer en prod.... wink

#20 Général » Retour sur les performances de PostgreSQL sur VMWare ESX » 20/09/2011 11:12:58

frost242
Réponses : 11

Bonjour,

Nous avions des problèmes de performance des accès disques sur des machines virtuelles. A priori, il y a quelques astuces que je rappelle ci-dessous:

- si l'hyperthreading est activé, toujours créer des VMs avec un nombre paire de vCPUs. Si non, ça s'effondre.
- toujours activer explicitement le support matériel de la virtualisation (extension Intel VT-X + EPT RVI ou son équivalent AMD le cas échéant). Ne pas laisser VMWare gérer ça en mode "Automatic".

En gros, nous sommes passés de vitesses d'accès dignes d'un Atari ST à des performances décentes (entre 200 et 300 Mo/s en écriture). Avant modification des confs, nous avions de bonnes performances lorsque les instances PostgreSQL n'étaient pas démarrées, mais des performances exécrables lorsque celles-ci étaient démarrées.

time dd if=/dev/zero of=toto.bin bs=8192 count=1000000
14849+0 enregistrements lus
14849+0 enregistrements écrits
121643008 octets (122 MB) copiés, 13,6363 seconde, 8,9 MB/s

real    0m13.730s
user    0m0.033s
sys     0m2.672s

Après:
time dd if=/dev/zero of=toto.bin bs=8192 count=1000000
119133+0 enregistrements lus
119132+0 enregistrements écrits
975929344 octets (976 MB) copiés, 7,27156 seconde, 134 MB/s

real    0m7.274s
user    0m0.062s
sys     0m1.645s

(La commande dd est interrompue par Ctrl-C ou manque d'espace).

A noter, la présentation de Jignesh Shah au sujet de PostgreSQL en environnement virtualisé: http://jkshah.blogspot.com/2011/09/runn … rtual.html

#23 Re : Général » Virtualisation or not » 30/08/2011 11:13:16

J'ai parlé trop vite, on ne trouve pas. Mais le SAN est innocent.

#24 Re : Général » Virtualisation or not » 29/08/2011 10:22:20

C'était une mauvaise conf de notre part. Voilà. big_smile

#25 Re : Général » Virtualisation or not » 27/08/2011 13:50:51

J'ai un peu testé pgstatsinfo, ça me fait penser à AWR pour ceux qui connaissent. Il va plus loin que ce que tu peux récupérer avec nagios, mais un peu plus intrusif (nécessite une conf particulière, avec CSV Log, etc.). Je n'ai malheureusement pas encore eu le temps de le mettre en production. Et pareil, c'est adapté à de la Red Hat, il faut patchouiller pour que ça tourne avec un noyau récent.

Sinon, quelle est ton expérience est terme de performance pour une base virtualisée ? La perte est-elle importante ?
De notre côté, on a remarqué un truc bizarre sur une VM: lorsque PostgreSQL n'est pas lancé, on a de bonnes performances d'accès au SAN (genre 150 Mo/s et plus), lorsque PostgreSQL est lancé on arrive à 10 Mo/s grand max... Confirmé par l'ami Dédé et un SELECT count(*) sur une table qui n'était pas en cache.

Pied de page des forums

Propulsé par FluxBB