2010-07-29 71 views
3

我從php的Postgres服務器連接有點麻煩。我剛剛開始使用Postgres + PHP組合,並且我意識到連接建立非常慢。
通常需要1秒或有時超過2秒才能進行簡單連接。它只是一個開發服務器,所以沒有真正的流量。好的,服務器不是最好的,但MySQL連接速度更快。Postgres與PHP的連接速度很慢

連接後,一切順利,每個查詢運行我期望的。應用程序運行時間約爲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 
+1

你能告訴我們你的集羣的連接設置嗎? http://www.postgresql.org/docs/current/static/runtime-config-connection.html SSL連接速度慢得多,這可能是(部分)問題。 – 2010-07-29 07:29:46

+0

嘿,我編輯了我的帖子。正如我所看到的,ssl是真的,所以也許我們應該嘗試沒有ssl = true? – 2010-07-29 08:40:11

+2

除非您正在開發SSL,否則肯定會在開發服務器上禁用它。 – 2010-07-29 13:21:27

回答

5

如果您不使用SSL,請務必關閉SSL。如果您想使用SSL,請確保pg_hba.conf具有適當的設置以要求安全連接。

+1

恕我直言,大多數人不需要SSL,應該關閉它。儘管如此,Debian默認它處於開啓狀態。 – araqnid 2010-07-29 17:45:14

+0

是的,這個dev服務器有debian lenny,默認情況下pg ssl是打開的。 – 2010-07-30 06:28:00

0

如果服務器是由同一個服務器上,嘗試配置您的連接使用Unix套接字而非TCP堆棧。很可能您的延遲是由於Postgres服務器中的反向DNS解析或認證延遲導致的,所以如果Unix套接字不是一個選項,我將啓用postgres上的調試日誌記錄並查看發生了什麼。