Pomalé načítání databáze 'localhost'

Michal Kumžák
Člen | 107
+
0
-

Dneska a včera jsem několik hodin zjišťoval, proč mi na lokále nette načítá stránku přes 2 sekundy. Nakonec jsem se dostal až k tomu, že 2s trvá první SQL dotaz a bylo jedno co to bylo za dotaz. Nakonec stačilo v configu v konektoru do db vyměnit localhost za 127.0.0.1 a ta dvousekundová prodleva zmizela. Tak třeba to někomu pomůže.

Michal

kminekmatej
Generous Backer | 43
+
+1
-

Změnou z localhost na IP adresu docílíš toho že se klient k databázi nepřipojí přes socket file ale přes IP:PORT. Což je obecně považování za naopak pomalejší způsob připojení.

Nejpravděpodobnější příčinu toho co popisuješ bych spíš hledal v souborové vrstvě – něco blokuje otevření socket file (/run/mysqld/mysqld.sock obvykle)

m.brecher
Generous Backer | 928
+
+1
-

Na Windows jsem změřil TCP connect na MySQL přes localhost a 127.0.0.1. Opakovaná měření ukázala hodnoty:

  • 127.0.0.1 cca 0,2–0,4 ms
  • localhost cca 0,35–0,7 ms

Rozdíl existuje, ale jedná se o desetiny milisekund, nikoliv o sekundy. Pátral bych na konkrétní mašině.

Editoval m.brecher (16. 8. 22:54)

David Grudl
founder | 8324
+
+8
-

localhost se na Windows překládá přes getaddrinfo() a vrací jako první ::1, tedy IPv6. Ale MySQL/MariaDB má často bind-address = 127.0.0.1, takže na IPv6 loopbacku vůbec neposlouchá. Klient tedy nejdřív zkusí ::1, čeká na timeout, a teprve pak se vrátí k IPv4. Ta prodleva bývá kolem sekundy. Když napíšeš 127.0.0.1, přeskočíš jak resolving, tak celý ten neúspěšný IPv6 pokus.