Postgres медленное соединение с PHP - PullRequest
3 голосов
/ 29 июля 2010

У меня небольшая проблема с подключением к серверу Postgres из php.Я только начал работать с комбинированной программой Postgres + PHP и понял, что установление соединения происходит очень медленно.
Обычно для создания простого соединения требуется 1 с, а иногда и более 2 секунд.И это только сервер разработки, поэтому реального трафика нет.Хорошо, сервер не самый лучший, но соединение с MySQL намного быстрее.

После подключения все идет хорошо, каждый запрос выполняется так, как я ожидаю.Время выполнения приложения составляет около 10%, а соединение составляет около 90%.Действительно странно, потому что со слоем базы данных mysql это действительно быстро.

В чем может быть проблема?

Я пробовал с PDO, pg_pconnect, pg_connect, но каждый раз результат один и тот же.

Это может быть ошибка конфигурации Postgres?Но запросы выполняются быстро, только установление соединения происходит медленно.Понятия не имею.

PG: PostgreSQL 8.3.9
PHP: 5.2.6

Заранее спасибо!

Конфигурация:

#------------------------------------------------------------------------------
# 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

Ответы [ 2 ]

5 голосов
/ 29 июля 2010

Всегда выключайте SSL, если вы его не используете. И если вы хотите использовать SSL, убедитесь, что pg_hba.conf имеет правильные настройки, требующие также безопасного соединения.

0 голосов
/ 29 июля 2010

Если PostGres находится на том же сервере, попробуйте настроить соединение для использования сокетов Unix вместо стека TCP. Скорее всего, ваша задержка вызвана либо обратным разрешением DNS, либо задержкой аутентификации на сервере Postgres, поэтому, если Unix-сокеты не являются опцией, я бы включил отладочную регистрацию на postgres и выяснил, что там происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...