2014-02-25 41 views
1

我正在使用Npgsql連接到Amazon Redshift。這一切都正常工作,但它連接似乎很慢。Npgsql打開連接到Redshift的速度非常慢

一切我做似乎非常標準:

<add name="EventDatabase" connectionString="Server=...us-west-2.redshift.amazonaws.com; Database=analytics; UID=...; PWD=...; Port=...; Pooling=true; MinPoolSize=4; MaxPoolSize=12; ConnectionLifeTime=300;" /> 

Connection = new NpgsqlConnection(
    ConfigurationManager.ConnectionStrings["EventDB"].ConnectionString); 
Connection.Open(); 

標杆這幾次給我的平均時間來打開的0.9S的連接。這比我預期的要高得多。

連接應該合併,我會認爲打開會立即?即使不合並,0.9s似乎也很高。我們40%的查詢時間用於打開連接。這是不正確的。

我錯過了什麼嗎?

回答

0

使用Redshift的Beta1存在問題。使用RC1時,連接開口要快得多。

0

我們發現Npgsql 2.2.5並沒有將連接釋放回連接池,而由於創建新連接需要花費大量時間(每個連接約1秒),這加劇了連接池的連接。

這是找到了一個錯誤:

ERROR: 0A000: SQL command "UNLISTEN *" not supported.

進行以下更改到2.2.5 NpgSql/NpgSql/NpgSqlConnector.cs代碼似乎糾正事項:

internal void ReleaseRegisteredListen() 
    { 
     if (!IsRedshift) 
      NpgsqlCommand.ExecuteBlind(this, NpgsqlQuery.UnlistenAll); 
    } 

免責聲明:這是不完全測試,並且RedShift可能會有不同的清理需求,這在這裏沒有完成。

0

追加「池=假」連接字符串,並調用這個打開連接之前:

ThreadPool.SetMinThreads(512, 512); 
ThreadPool.SetMaxThreads(1024, 1024);