sql >> Database >  >> RDS >> PostgreSQL

Hoe verbindingen TCP/IP te verbreken door keepalive postgreSQL zonder iets in het register te veranderen?

PostgreSQL op Windows ondersteunt geen keepalive-instellingen voor één verbinding. Het gebruikt setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE, ...) wat IMHO Linux-specifiek is.

U kunt een patch voor Postgres implementeren, zodat deze gebruikmaakt van SIO_KEEPALIVE_VALS . Iets als dit in src/backend/libpq/pqcomm.c in StreamConnection functie.

{
    DWORD bytesReturned = 0;
    tcp_keepalive vals;
    vals.keepalivetime = 60*1000; /* milliseconds */
    vals.keepaliveinterval = 60*1000; /* milliseconds */
    vals.onoff = 1;
    err = WSAIoctl(
        port->sock,
        SIO_KEEPALIVE_VALS,
        (char *)&vals, sizeof(vals), NULL, 0,
        &bytesReturned, NULL, NULL);
    if (err == -1) {
        elog(LOG, "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %m");
    }
}

Of u kunt systeembrede instellingen instellen in het Windows-register HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters met behulp van KeepAliveInterval en KeepAliveTime instellingen (telling is altijd 10 op Windows Vista en hoger).




  1. Hoe krijg ik PHP aan het werk met ADOdb en MySQL?

  2. MySQL combineert twee kolommen in één kolom

  3. Manieren om SQL Server te repareren Detecteerde een op logische consistentie gebaseerde I/O-fout

  4. Kolom niet gevonden:1054 Onbekende kolom laravel