Re: Timeout parameters
От | Robert Haas |
---|---|
Тема | Re: Timeout parameters |
Дата | |
Msg-id | CA+TgmoZtk3_=FuE-GDRc2qjLV6NnQkWh7Cco4toJBkAWYWUFWw@mail.gmail.com обсуждение исходный текст |
Ответ на | RE: Timeout parameters ("Tsunakawa, Takayuki" <tsunakawa.takay@jp.fujitsu.com>) |
Ответы |
Re: Timeout parameters
RE: Timeout parameters |
Список | pgsql-hackers |
On Wed, Mar 13, 2019 at 11:33 PM Tsunakawa, Takayuki <tsunakawa.takay@jp.fujitsu.com> wrote: > I understood hat the example is about an SELECT that returns multiple rows. If so, statement_timeout should handle it,shouldn't it? Yes. If you want a query timeout, you should use statement_timeout, not this. > > I think the use case for a timeout that has both false positives (i.e. > > it will fire even when there's no problem, as when the connection is > > legitimately idle) and false negatives (i.e. it will fail to trigger > > when there is a problem, as when there are periodic notices or > > notifies from the server connection) is extremely limited if not > > nonexistent, and I think the potential for users to be confused is > > really high. > > My understanding is that the false positive case doesn't occur, because libpq doesn't wait on the socket while the clientis idle and not communicating SQL request/response. As for the false negative case, resetting the timer upon noticesor notifies receipt is good, because they show that the database server is functioning. socket_timeout is not a mechanismto precisely limit the duration of query request/response. It is kind of a stop-gap, last resort to assure returncontrol within reasonable amount of time, rather than minutes or hours. Hmm. You might be right about the false positive case, although there might be some exceptions. As for the false negative case, the only sorta-legitimate scenario I can think of is: suppose the database server process is running, but someone has stopped the session connected to your backend by sending it SIGSTOP or attaching a debugger. Now, the TCP connection is alive, but the server will not be able to send any data, so statement_timeout will not fire, nor will any of the network-level stuff. socket_timeout would. But that's a pretty remote scenario, I think. Now you might say - what if the server is stopped not because of SIGSTOP but because of some other reason, like it's waiting for a lock? Well, in that case, the database server is still functioning, and you will not want the connection to be terminated if no notifies are sent during the lock wait but not terminated if they are sent. At least, I can't see why anyone would want that. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
В списке pgsql-hackers по дате отправления: