Spor odziv servera (samo jedan query) - 1.7 sec

Imam neki Vps na kojem sam primetio da je spor odziv.

Proverio sam i na Google speed tulu, a i na Gtmetrix sajtu

Ovo je sa google speed tula:
Reduce server response time
In our test, your server responded in 1.7 seconds.
Na Gtmetrix ide i do 2.0 sec.

Proverio sam na jedan testni fajl u kojem imam samo jedan mysqli upit za dve tabele (jedan LEFT JOIN u njemu) i u kojem nema niceg drugog.

Inace, VPS je OpenVZ SSD od 4Gb rama i 2 CPU.

I da je toliko los upit, ako je samo jedan, ne bi trebalo da bude ovako los odziv?

O da, ako je loš query, može ti odaziv biti spor. Probaj jednostavan query napraviti (običan select bez join-a) i tada vidjeti odaziv. Odnah ćeš znati jer server ili loš query.

Uzevši u obzir količinu podataka u tabelama, zavisi i od toga jesu li index-ovane tabele.

Da, sa obicnim upitom brzina je da kazem “normalnija”.

Probao sam JOIN upit (preko PhpMyAdmin svugde) za iste dve tabele, sa istim podacima i na drugom VPSu i na shared hostingu i tamo dobijam izvresenje upita bas brzo.
Na shared Stablehostingu: 0.0004 seconds
Na drugom cloud VPS hetznera gde imam VestaCP, nova instalacija: 0.2073 seconds

Dok na ovom sto mi je najsporije, dobijam: 4.2420 seconds sto je previse

Verovatno je nesto lose podeseno na tom VPS (stara podesavanja od pre 3 godine ili vise),
PHP 5.4, Apache 2.2.15
Server version: 5.5.47 - MySQL
isto je VestaCp.

Da li je do starih verzija php i mysql, i/ili je problem i u samim podesavanjima postojecih verzija?
Kako najlakse proveriti?

Fali mi podatak gdje je server da bi se više moglo reći… sad možemo da je upit loš a ako mu je server tko zna gdje šta onda?

Kod Ramnode je, a server je u Holandiji.
Pisao sam njima, oni prebacili na drugi “node”, pa sad jos nesto sporije.

Inace, ovo je upit:

  SELECT *,  k.id as id, k.katid as kid, k.naslov as naslov, k.naslov1 as naslov1,
  COUNT( o.id ) AS zbir
  FROM `proizvodi_page` `k`
  LEFT JOIN `proizvodi_new` `o`
  ON (`o`.`idfirme` = `k`.`id` or `o`.`idfirme1` = `k`.`id` AND o.akt='Y' AND o.nalageru=1)
  WHERE k.id_page='72' AND k.akt='Y'
  GROUP BY k.naslov ORDER BY k.naslov ASC

Kad stavim samo ovako, dobijam istu brzinu svugde priblizno 0.0160:

SELECT *, k.id as id, k.katid as kid, k.naslov as naslov, k.naslov1 as naslov1, COUNT( k.id ) AS  zbir
FROM `proizvodi_page` `k` 
WHERE k.id_page='72' AND k.akt='Y' GROUP BY k.naslov ORDER BY k.naslov ASC


pozdrav svima, pokušavam nešto za jedan domen, od ovoga nisam mogao nikako bolje da uradim, inače je boombox thema u pitanju, da li je ovo loše ?

Je l’ se koriste druga polja osim ovih:

SELECT *,  k.id as id, k.katid as kid, k.naslov as naslov, k.naslov1 as naslov1, COUNT( o.id ) AS zbir

tj. je li neophodna *?

1 Like

Uradio sam update mysql verzije u MariaDB
Sad taj jedan upit, sa JOINom ucita ispod secudne, od 0.5 do 0.9, kad ga zadam u phpMyAdminu.
Direktno, na samom sajtu, preko php, kada pozovem taj fajl sa jednim upitom, preko Gtmetrix kao ucita za 0.9 secunde, a na Google speed tulu ne pokazuje gresku da postoji problem sa odazivom servera.
Mada mi nestabilno radi, variraju te sekunde, zna da pokaze nekad i vise od sekunde.
Morao bih i php verziju da nadogradim, ali max na 5.6, jer mi je stariji sajt, nije jos pripremljen za 7, da bih video da li je i do PHP, ali mi se cini da je malo teze to da se uradi.

Mislim da idu jos neka polja, ali generalno, mogu da napisem tacne kolone koje su potrebne, ne mora bas zvezdica, nego mi tako lakse,
Evo probao bez *, ucitava duplo brze :slight_smile:

Nisam shvatio: jesu li PHP aplikacija i DB na istom serveru?

Da, na istom serveru.

Pravilo (nepisano) je koristiti nazive polja jer se može naknadno ispostaviti puno lakše za debug kad se mijenja kod ili struktura baze/tabele.
Ali ipak izgleda da je najveći problem taj JOIN.

Mislim da mi je poznato bilo da kad su definisane kolone, onda ide i brze iscitavanje, ali nisam praktikovao.
Sam sajt, ne sadrzi joine, osim tog jednog kojeg sam izdvojio u fajlu, svugde su jednostavni i gledao sam da se ne ponavljam sa upitima vec da smestam u niz, pa odatle vucem kad treba.

Inace za ceo sajt, sada, dobijam na Google Speed tulu:
In our test, your server responded in 1.4 seconds
a bilo je pre ovih cackanja 2.2 seconds.

Ostaje mi da probam da nadogradim php, apache i nginx, pa mozda dobijem jos na brzini.

Probaj ovaj dio zamijeniti sa

LEFT JOIN (SELECT * FROM `proizvodi_new` WHERE akt='Y' AND nalageru=1) `o` 
ON (`o`.`idfirme` = `k`.`id` or `o`.`idfirme1` = `k`.`id`)

Samo pretpostavljam, na tebi je da testiraš i ispravljaš greške koje ti ponudim. :smiley:

Hvala ti!

Probao sam, slicna je brzina, mozda je malo brze, kao sto je bilo, na pocetku.

Isto tako možda ne bilo loše da uradiš kompozitni index kolona akt i nalageru.
Ili čak da napraviš mysql view poput tog subselect-a.

Sklonio sam, za probu ta dva uslova, akt i nalageru, za probu, ali je ista brzina ucitavanja.
Ovo drugo, ne znam vec sta je, a trenutno nema veze, jer mene generalno muci sto iste dve tabele, sa istim upitom, razlicito brzo rade na razlicite VPS-ove i shared hostingu.
Sto znaci da nesto na serveru nije ok.

Da pitam, kako pravis te indexe, da se ucitava brze?
Ja to uradim preko phpMyAdmina, u opcijama koje nudi.
Verovatno moze i drugacije, pomocu mysql upita.

Budi oprezan sa indeksima u zavisnosti od toga kako često praviš insert (vidi ovaj artikal).
U svakom slučaju daju veći benefit nego da je tabela bez njih.
Njihova korist je u iščitavanju (SELECT), dakle dobro osmotri kako su INSERT i UPDATE korišćeni.
Tipa, da li 20 korisnika ima ovlaštenje da napravi insert preko csv fajla sa po 50000 proizvoda svaki itd.
Ima višestruki impakt na zauzeće baze i vremena upisa i izmjene podataka.
Nosi se činjenicom da kol’ko je sporiji unos, tol’ko je brži select i više.

Je l’ ovo znači i dalje je sporo - 1.7 sec?