2014-02-25 30 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);