我正在使用Npgsql连接到Amazon 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.9秒的连接。这比我预期的要高得多。
应该汇总连接,我会想到开放会是即时的吗?即使它没有汇集,0.9s似乎也很高。我们查询时间的40%用于打开连接。那不对。
我错过了什么吗?
答案 0 :(得分:0)
Beta1使用Redshift时出现问题。使用RC1,连接开口更快。
答案 1 :(得分:0)
我们发现Npgsql 2.2.5没有将连接释放回连接池,这会因创建新连接的时间过长而加剧(每个连接约1秒)。
这被追踪到一个错误:
错误:0A000:不支持SQL命令“UNLISTEN *”。
对2.2.5 NpgSql/NpgSql/NpgSqlConnector.cs
代码进行以下更改似乎可以解决问题:
internal void ReleaseRegisteredListen()
{
if (!IsRedshift)
NpgsqlCommand.ExecuteBlind(this, NpgsqlQuery.UnlistenAll);
}
免责声明:这尚未经过全面测试,RedShift可能需要进行不同的清理,这里没有做到。
答案 2 :(得分:0)
Append "Pooling=False" to the connection string, and call this before opening the connection:
ThreadPool.SetMinThreads(512, 512);
ThreadPool.SetMaxThreads(1024, 1024);