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

#1 15/02/2011 15:02:13

genio
Membre

parametre enable_seqscan

Bonjour à tous...
j'ai effectué quelques lectures sur ce paramètre mais je n'arrive pas vraiment à comprendre pourquoi certaine fois, il faut le mettre à OFF et d'autres à ON...

Pouvez-vous m'aider ?


PS : Que veut dire : langage plsql volatile

Hors ligne

#2 15/02/2011 19:28:53

gleu
Administrateur

Re : parametre enable_seqscan

Simple. Il ne faut jamais le mettre à off en production. Ensuite, il est possible de le mettre à off sur sa session pour voir si cela favorise l'utilisation des index. Et du coup, s'il faut repenser sa requête ou prévoir d'autres index pour optimiser la requête.


Guillaume.

Hors ligne

#3 16/02/2011 11:38:08

genio
Membre

Re : parametre enable_seqscan

Merci ...
Je continue ...
1°) Comment mettre ce paramètre à Off sur 'MA' session, étant donné qu'il est présent dans le fichier postgrès.conf ?
2°) Me trompe-je si je dis que :
             2.1) A ON, ce paramètre permet à l'optimiseur d'utiliser les index de 2 façons suivante : Direct et scan ?
             2.2) A OFF ce paramètre ne permet pas l'index scan, maois permet l'acces direct ?
3°) Et dans l'affirmative, à quoi sert ce paramètre qui empêche l'optimiseur de chopsir lui-même son chemin d'accès ?

Merci pour vos réponses...

Hors ligne

#4 16/02/2011 14:36:11

Marc Cousin
Membre

Re : parametre enable_seqscan

1) set enable_seqscan to off
2) oui, c'est faux. le paramètre passe juste le coût du seqscan à un 1 suivi de beaucoup de zéros. si il n'y a pas d'index utilisable, il passera en seq scan quand même.
3) Juste pour du debug: s'assurer qu'un index est utilisable. si même avec ce paramètre à off, le moteur ne passe pas par l'index, c'est vraisemblablement qu'il ne peut pas.


Marc.

Hors ligne

#5 16/02/2011 14:59:05

genio
Membre

Re : parametre enable_seqscan

Excusez-moi Marc mais quand vous dites : 'Oui, c'est faux' , dois-je en conclure que :
oui => question 2.1
faux => Question 2.2  ?

Hors ligne

#6 16/02/2011 15:06:07

Marc Cousin
Membre

Re : parametre enable_seqscan

non, c'est juste faux: le paramètre n'empêche rien. il ne fait que défavoriser très très fortement le seqscan. Par exemple:


marc=# CREATE TABLE test (a int);
CREATE TABLE
marc=# INSERT INTO test (a) select generate_series(1,1000);
INSERT 0 1000
marc=# CREATE INDEX tst1 ON test ( a );
CREATE INDEX
marc=# EXPLAIN SELECT * from test where a=1;
                           QUERY PLAN                           
-----------------------------------------------------------------
Index Scan using tst1 on test  (cost=0.00..8.27 rows=1 width=4)
   Index Cond: (a = 1)
(2 rows)

marc=# SET enable_seqscan TO off;
SET
marc=# EXPLAIN SELECT * from test where a=1;
                           QUERY PLAN                           
-----------------------------------------------------------------
Index Scan using tst1 on test  (cost=0.00..8.27 rows=1 width=4)
   Index Cond: (a = 1)
(2 rows)

marc=# DROP INDEX tst1 ;
DROP INDEX
marc=# EXPLAIN SELECT * from test where a=1;
                               QUERY PLAN                               
------------------------------------------------------------------------
Seq Scan on test  (cost=10000000000.00..10000000017.50 rows=1 width=4)
   Filter: (a = 1)
(2 rows)

J'ai désactivé le seq scan. Mais il n'y a pas d'index. Il n'a pas trop le choix, il fait un seq scan tout de même. Et on voit même comment il s'y prend: le seq scan a une pénalité de 10000000000. Il n'est pas empêché d'utiliser le scan séquentiel.


Marc.

Hors ligne

#7 16/02/2011 15:32:04

genio
Membre

Re : parametre enable_seqscan

OK merci ...

Hors ligne

Pied de page des forums