我有一個長時間運行的查詢,大約48分鐘後超時。爲什麼查詢在超時限制內超時?
命令超時設置爲2小時,連接超時設置爲17分鐘。
什麼會導致查詢引發超時? (我假設必須有別的東西,我已經忽略了?)
Npgsql.NpgsqlException:
A timeout has occured. If you were establishing a connection, increase Timeout value in ConnectionString. If you were executing a command, increase the CommandTimeout value in ConnectionString or in your NpgsqlCommand object.
at Npgsql.NpgsqlState.ProcessBackendResponsesEnum(NpgsqlConnector context) in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 384
at Npgsql.NpgsqlCommand.GetReader(CommandBehavior cb) in C:\projects\Npgsql2\src\Npgsql\NpgsqlCommand.cs:line 611
at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior cb) in C:\projects\Npgsql2\src\Npgsql\NpgsqlCommand.cs:line 591
at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior) in C:\projects\Npgsql2\src\Npgsql\NpgsqlCommand.cs:line 538
其他信息:
- Postgres的版本:8.3
- Npgsql的:2.0.11.0
postgres日誌顯示以下「錯誤」:
cancelling statement due to user request
查詢在不同的日期範圍內的不同時間運行了兩次,這兩次運行失敗的時間都是相同的錯誤,運行了相同的時間後 - 「00:48:24.909」 和「00:48:24.936 「
此外,以前的查詢時間不超過00:47:40,所以這表明其他情況會導致48分鐘左右的超時時間。
我在postgres配置文件中看不到任何東西,有沒有其他地方我可以看?
PostgreSQL版本,nPgSQL版本,命令文本和服務器錯誤日誌輸出?在猜測你實際上得到了_network_超時(可能通過NAT連接跟蹤到期問題?)而不是語句超時。無論如何,當您編輯問題以添加該信息時,請在此處評論。 –
Postgres 8.3,NpgSql 2.0.11.0(無法更改版本),無法提供命令文本,也無法訪問數據庫服務器的日誌。服務器和db位於專用交換機上的數據中心中。我雖然超時是由客戶控制,只需計算需要多長時間?我有其他查詢運行時間更長,不超時。 –
在這種情況下 - 是否還有更多的nPgSQL堆棧跟蹤,像Java中的任何「由......引起的」?在你的位置上,我會(a)向DBA詢問日誌,(b)儘可能多地在nPgSQL中啓用跟蹤日誌;和/或(c)使用Wireshark來檢查網絡通信並準確瞭解發生了什麼。 –