PHP: pomalé připojení k MySQL

PHP: pomalé připojení k MySQL
« kdy: 06. 05. 2024, 17:19:35 »
Ahoj, přepisuju jeden fousatý projekt z PHP 5 a MySQL (lib) do PHP8 a PDO.
Narazil jsem u toho na dost nepříjemný problém. Na několika místech se (kromě lokální DB) musím připojit i k sousednímu serveru a tam se kód vždy zasekne na 4sec. Původní projekt, nový projekt a i externí DB běží jako VM na jednom serveru.
Zkusil sem místo PDO použít MySQLi, ale se stejným výsledkem. Firewall mlčí, adresuju přes IP, user/login je bez změny, ale je to prakticky nepoužitelné.

Kód připojení kopíruje vzor z https://phpdelusions.net/pdo_examples/connect_to_mysql

Už nevím co vyzkoušet, nebo kde hledat. Všechno se tváří v pořádku, "jen" zoufale pomalé  :(
PMD85 -> Didaktik Gama -> PC XT -> ... x86/x51/ARM
Basic -> Turbo Pascal -> C++ -> Turbo ASM -> C# -> PHP -> Bash -> Go :-)


petersveter

Re:PHP: pomalé připojení k MySQL
« Odpověď #1 kdy: 06. 05. 2024, 17:33:06 »
4 sekundy je v ramci sveta db absolutne nemyslitelne obrovske cislo. jedine co ma napada ze by to mohlo byt je ze ta ziva db nema indexy a musi robit full scan na vsetkych moznych tabulkach s milionmi zaznamov a/alebo ma neskutocne malo ram alebo nejaky dojebany platnovy disk. inak to nedava ziaden zmysel. je dost mozne ze ten vps je naozaj na najhorsom moznom hw takze otestuj na nom disk, ram aj siet.

McFly

  • *****
  • 598
    • Zobrazit profil
    • E-mail
Re:PHP: pomalé připojení k MySQL
« Odpověď #2 kdy: 06. 05. 2024, 17:33:46 »
Původní projekt je rychlý a bez problémů?

Re:PHP: pomalé připojení k MySQL
« Odpověď #3 kdy: 06. 05. 2024, 17:53:22 »
A při ručním spuštění mysql klienta na stroji s PHP se klient k externímu mysql připojí ihned a rovnou lze dávat query, žádné čekání?

Re:PHP: pomalé připojení k MySQL
« Odpověď #4 kdy: 06. 05. 2024, 18:02:01 »
Dělá to jen při navázání spojení s DB? Není tam nějaký problém s překladem DNS (že by se třeba nejprve zkoušelo připojení na jinou IP adresu nebo jiným IPv4/IPv6 protokolem)? Nedělá databáze nějaké zpětné ověření uživatele třeba přes Ident, nebo nepřekládá si IP adresu klienta na jméno? Nepokouší se tam navazovat šifrování přes TLS?


Re:PHP: pomalé připojení k MySQL
« Odpověď #5 kdy: 06. 05. 2024, 19:38:36 »
Tak popořadě. Připojení z původního kódu je samozřejmě rychlé jako blesk a tam sem nikdy nic speciálního neřešil. Na novém virtuálu je opět jen čistá terminálová instalace a PHP8 místo PHP5.
Ruční připojení do SQL si nejsem jist, zkusím zítra...
DNS překlady, nebo IPv6 celkem vylučuju, když adresu serveru zadávám jako IPv4. Nic jiného tam není - testuju i jen čistý kus kódu kde je připojení k DB a konec.
Reálně pořád běží oba virtuály - starý i nový, právě záseky v připojení ke třetí straně mě brání starou verzi odstavit, to by mě uživatelé utloukli.
PMD85 -> Didaktik Gama -> PC XT -> ... x86/x51/ARM
Basic -> Turbo Pascal -> C++ -> Turbo ASM -> C# -> PHP -> Bash -> Go :-)

Re:PHP: pomalé připojení k MySQL
« Odpověď #6 kdy: 06. 05. 2024, 20:04:53 »
jednou jsme takhle taky honila ducha. divnej byl prave v tom "pokazde presne x sekund + tech par desitek ms co to tvra obvykle".  jako programator nevim presne co to bylo, ale dle spravcu nejakej vosel spatne nakonfiguroval v server house svuj switch. Rozhodne to neni problem aplikacni, bude to neco v sitovani.
Děkuji za možnost editace příspěvku.

Re:PHP: pomalé připojení k MySQL
« Odpověď #7 kdy: 06. 05. 2024, 20:10:25 »
Přesně proto marně vymýšlím, jestli existuje nějaký "debug" místo 4sec koukání na prázdnou stránku.
V tomhle se neorientuju, tak žádné nástroje neznám. Je by mě zajímalo kde se to celou tu dobu poflakuje a co se tam děje...
PMD85 -> Didaktik Gama -> PC XT -> ... x86/x51/ARM
Basic -> Turbo Pascal -> C++ -> Turbo ASM -> C# -> PHP -> Bash -> Go :-)

Wasper

  • ***
  • 124
    • Zobrazit profil
    • E-mail
Re:PHP: pomalé připojení k MySQL
« Odpověď #8 kdy: 06. 05. 2024, 20:47:46 »
DNS překlady, nebo IPv6 celkem vylučuju, když adresu serveru zadávám jako IPv4. Nic jiného tam není - testuju i jen čistý kus kódu kde je připojení k DB a konec.
Pokud to není vypnuté na serveru, tak to SERVER resolvuje, aby matchoval to 'user'@'client' v právech.

Takže ověřit na něm, jestli funguje reverze klienta.

Re:PHP: pomalé připojení k MySQL
« Odpověď #9 kdy: 07. 05. 2024, 07:16:33 »
Já bych navrhoval prozkoumat to pomocí tcpdumpu. Srovnat časy na obou serverech a pustit tcpdump na obou. Porovnání by mohlo vyloučit, že se jedná o síťový problém. Určitě zkusit cli klienta. Případně vytvořit novou prázdnou databázi a připojit se k ní. Bude to dělat dál?

Don.J

Re:PHP: pomalé připojení k MySQL
« Odpověď #10 kdy: 07. 05. 2024, 07:58:45 »
Tohle za mě vypadá na jednu z těchto možností:
- timeout nějakého novějšího protokolu který PDO zkouší, po timeoutu zkusí starší protokol. Co je za verzi MySQL na tom vzdáleném serveru? ... šifrování spojení apod.
- špatně nastavený "virtuální" switch/síťovka
- špatně nastavené IPv6 nebo IPv4, pokud se se serverem nespojí na IPv4 (padne timeout) zkusí IPv6 apod což by mohlo souviset s předchozím bodem.

Jak je nakonfigurovaná síť na Hypervizoru? Jdou data "ven" na fyzický switch a pak zpět nebo se switchuje na virtuálním a pak jdou data případně ven?

Re:PHP: pomalé připojení k MySQL
« Odpověď #11 kdy: 07. 05. 2024, 08:22:40 »
ked tak pozeram co sa tu pise, na mieste zakladatela vlakna by som asi hladal "ako zistit ako to komunikuje".
existuje nieco inteligentnejsie ako pouzit Wireshark? :)

Re:PHP: pomalé připojení k MySQL
« Odpověď #12 kdy: 07. 05. 2024, 08:32:06 »
Tohle za mě vypadá na jednu z těchto možností:
- timeout nějakého novějšího protokolu který PDO zkouší, po timeoutu zkusí starší protokol. Co je za verzi MySQL na tom vzdáleném serveru? ... šifrování spojení apod.

Tohle může být ono, MySQL je 5.0.67.
Dneska sem testoval i připojení z příkazové řádky a prodleva je tam také.
Bohužel do MySQL sáhnout nemůžu, je to součást další muzeální aplikace třetí strany, ze které čtu jen některá data.
PMD85 -> Didaktik Gama -> PC XT -> ... x86/x51/ARM
Basic -> Turbo Pascal -> C++ -> Turbo ASM -> C# -> PHP -> Bash -> Go :-)

Re:PHP: pomalé připojení k MySQL
« Odpověď #13 kdy: 07. 05. 2024, 08:44:07 »
Pokud to není vypnuté na serveru, tak to SERVER resolvuje, aby matchoval to 'user'@'client' v právech.

Takže ověřit na něm, jestli funguje reverze klienta.

Máte pravdu! Pokusím se dokopat správce onoho serveru aby to vypnul a uvidím.
PMD85 -> Didaktik Gama -> PC XT -> ... x86/x51/ARM
Basic -> Turbo Pascal -> C++ -> Turbo ASM -> C# -> PHP -> Bash -> Go :-)