每天第一次尝试查询失败,第二次尝试成功

2 投票
1 回答
1998 浏览
提问于 2025-04-17 21:47

我遇到的具体错误如下:

{'trace': "(Error) ('08S01', '[08S01] [FreeTDS][SQL Server]Write to the server failed (20006) (SQLExecDirectW)')"}

在我的Pyramid应用程序中,当我第一次运行查询时就会出现这个错误。无论我运行什么查询(在我的例子中,是一个从数据库返回信息的网页搜索表单)

整个应用程序都是只读的,连接数据库的账户也是只读的。我不知道会有什么东西需要写入而导致失败。就像我说的,如果我重新运行完全相同的操作(或者刷新页面),它就能正常运行,没有错误。

补充说明:强调一下“今天的第一次尝试”。如果在一段时间内没有查询,我又会遇到这个写入错误,然后它就会正常工作。感觉就像它“睡着”了一样,第一次查询会把它叫醒。

1 个回答

2

我猜测有一个数据库连接池,这个池子里的连接会保持打开一段时间,叫做T。不过,服务器会在一段时间后关闭这些连接,这段时间叫做S,而S的时间比T要短。

所以,当你一天中的第一个连接(或者在S时间到期后)去连接数据库时,就会出现这个错误。

你可以试着找找有没有办法把连接池里的“超时时间”改得比S还要短,这样就能解决这个问题。

补充说明:这些时间(T和S)是根据你使用的服务器和库的配置或默认值来决定的。我之前在一个Flask+SQLAlchemy+MySQL的应用中遇到过类似的问题,当时我也需要调整连接的超时时间等等。

补充说明2:T可能是“让连接永远保持打开”或者是一个非常大的值。

撰写回答