2010-07-29 7 views
3

J'ai un peu de mal avec la connexion au serveur Postgres de PHP. J'ai juste commencé à travailler avec le combo Postgres + PHP, et j'ai réalisé que l'établissement de la connexion est vraiment lent.
Il faut généralement 1 s ou parfois plus de 2 secondes pour établir une connexion simple. Et ce n'est qu'un serveur de développement, donc il n'y a pas de vrai trafic. Ok, le serveur n'est pas le meilleur, mais la connexion MySQL est beaucoup plus rapide. Après la connexion, tout se passe bien, chaque requête s'exécute comme je le souhaite. Le temps d'exécution de l'application est d'environ 10% et la connexion est d'environ 90%. Vraiment étrange, car avec la couche de base de données mysql, c'est vraiment rapide.Postgres connexion est lente à partir de PHP

Quel peut être le problème?

J'ai essayé avec PDO, pg_pconnect, pg_connect, mais à chaque fois que le résultat est le même.

Il peut s'agir d'une erreur de configuration Postgres? Mais les requêtes s'exécutent rapidement, seul l'établissement de la connexion est lent. Je n'ai aucune idée.

PG: PostgreSQL 8.3.9
PHP: 5.2.6

Merci à l'avance!

Configuration:

#------------------------------------------------------------------------------ 
# CONNECTIONS AND AUTHENTICATION 
#------------------------------------------------------------------------------ 

# - Connection Settings - 

#listen_addresses = 'localhost'  # what IP address(es) to listen on; 
        # comma-separated list of addresses; 
        # defaults to 'localhost', '*' = all 
        # (change requires restart) 
port = 5432    # (change requires restart) 
max_connections = 100   # (change requires restart) 
# Note: Increasing max_connections costs ~400 bytes of shared memory per 
# connection slot, plus lock space (see max_locks_per_transaction). You might 
# also need to raise shared_buffers to support more connections. 
#superuser_reserved_connections = 3 # (change requires restart) 
unix_socket_directory = '/var/run/postgresql'  # (change requires restart) 
#unix_socket_group = ''   # (change requires restart) 
#unix_socket_permissions = 0777  # begin with 0 to use octal notation 
        # (change requires restart) 
#bonjour_name = ''   # defaults to the computer name 
        # (change requires restart) 

# - Security and Authentication - 

#authentication_timeout = 1min  # 1s-600s 
ssl = true    # (change requires restart) 
#ssl_ciphers = 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH' # allowed SSL ciphers 
        # (change requires restart) 
#password_encryption = on 
#db_user_namespace = off 

# Kerberos and GSSAPI 
#krb_server_keyfile = ''  # (change requires restart) 
#krb_srvname = 'postgres'  # (change requires restart, Kerberos only) 
#krb_server_hostname = ''  # empty string matches any keytab entry 
        # (change requires restart, Kerberos only) 
#krb_caseins_users = off  # (change requires restart) 
#krb_realm = ''     # (change requires restart) 

# - TCP Keepalives - 
# see "man 7 tcp" for details 

#tcp_keepalives_idle = 0  # TCP_KEEPIDLE, in seconds; 
        # 0 selects the system default 
#tcp_keepalives_interval = 0  # TCP_KEEPINTVL, in seconds; 
        # 0 selects the system default 
#tcp_keepalives_count = 0  # TCP_KEEPCNT; 
        # 0 selects the system default 


#------------------------------------------------------------------------------ 
# RESOURCE USAGE (except WAL) 
#------------------------------------------------------------------------------ 

# - Memory - 

shared_buffers = 24MB   # min 128kB or max_connections*16kB 
        # (change requires restart) 
#temp_buffers = 8MB   # min 800kB 
#max_prepared_transactions = 5  # can be 0 or more 
        # (change requires restart) 
# Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory 
# per transaction slot, plus lock space (see max_locks_per_transaction). 
#work_mem = 1MB    # min 64kB 
#maintenance_work_mem = 16MB  # min 1MB 
#max_stack_depth = 2MB   # min 100kB 

# - Free Space Map - 

max_fsm_pages = 153600   # min max_fsm_relations*16, 6 bytes each 
        # (change requires restart) 
#max_fsm_relations = 1000  # min 100, ~70 bytes each 
        # (change requires restart) 

# - Kernel Resource Usage - 

#max_files_per_process = 1000  # min 25 
        # (change requires restart) 
#shared_preload_libraries = ''  # (change requires restart) 

# - Cost-Based Vacuum Delay - 

#vacuum_cost_delay = 0   # 0-1000 milliseconds 
#vacuum_cost_page_hit = 1  # 0-10000 credits 
#vacuum_cost_page_miss = 10  # 0-10000 credits 
#vacuum_cost_page_dirty = 20  # 0-10000 credits 
#vacuum_cost_limit = 200  # 1-10000 credits 

# - Background Writer - 

#bgwriter_delay = 200ms   # 10-10000ms between rounds 
#bgwriter_lru_maxpages = 100  # 0-1000 max buffers written/round 
#bgwriter_lru_multiplier = 2.0  # 0-10.0 multipler on buffers scanned/round 
+1

Pourriez-vous nous montrer les paramètres de connexion de votre cluster? http://www.postgresql.org/docs/current/static/runtime-config-connection.html Les connexions SSL sont beaucoup plus lentes, cela pourrait faire (partie du) problème. –

+0

Hé, j'ai édité mon post. Comme je le vois, ssl est vrai, alors peut-être que nous devrions essayer sans ssl = true? –

+2

À moins que vous ne développiez pour SSL, désactivez-le sur un serveur de développement à coup sûr. –

Répondre

5

Désactivez toujours le protocole SSL si vous ne l'utilisez pas. Et si vous voulez utiliser SSL, assurez-vous que pg_hba.conf a les paramètres appropriés pour exiger une connexion sécurisée.

+1

IMHO la plupart des gens n'ont pas besoin de SSL et devraient l'éteindre. Debian lui fait défaut d'être allumé, cependant. – araqnid

+0

oui, ce serveur de dev a debian lenny, et le pg ssl a été activé par défaut. –

0

Si PostGres est sur le même serveur, essayez de configurer votre connexion à utiliser Unix sockets au lieu de la pile TCP. Votre retard est probablement causé par une résolution DNS inversée ou un retard d'authentification dans le serveur Postgres, donc si les sockets Unix ne sont pas une option, j'activerais la journalisation du débogage sur les postgres et vérifierais ce qui s'y passe.

Questions connexes