Avaleht
uus teema   vasta Tarkvara »  WWW »  MySQL slow query log märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Dirty Harry
HV Guru

liitunud: 05.09.2002




sõnum 03.04.2014 13:21:55 MySQL slow query log vasta tsitaadiga

Tere.

Tuli virtuaalserveri teenusepakkujalt selline automaatne e-mail:
Spoiler Spoiler Spoiler

Kaasas logi:

Spoiler Spoiler Spoiler


Kuna ma MySQL'i nüansse väga ei tunne siis ei oska hästi midagi peale hakata. Tegu on Pixelpostil jooksva leheküljega, mis siis kasutab all MySQL baasi. Arvestades, et Pixelposti näol on tegu aastaid arendusest maas oleva lahendusega siis ma ise kardan, et äkki on tegu mingitsorti (spämmi)robotiga, mis käis indekseerimas.

Igaljuhul - mida võiks ette võtta? Ma ise mõtlen juba tükk aega, et peaks Pixelposti pealt migrama kodulehe millegi teise peale kuna ilmselgelt pole Pixelposti näol enam tegu turvalise lahendusega. Või annaks kuidagi lehte/baasi kaitsta? Või peakski indeksite lisamise suunas vaatama?
Kommentaarid: 181 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 145
tagasi üles
vaata kasutaja infot saada privaatsõnum
kullar
HV kasutaja
kullar

liitunud: 26.11.2006



Autoriseeritud ID-kaardiga

sõnum 03.04.2014 16:29:37 vasta tsitaadiga

Proovi lasta käima EXPLAIN käsuga mõned päringud ja postita vastused siia. Lase käima selliselt:

EXPLAIN SELECT COUNT(*) AS max
FROM pixelpost_pixelpost AS p, pixelpost_tags AS t
WHERE t.alt_tag LIKE '' AND p.id = t.img_id AND p.datetime<='2014-03-28 02:02:52'
GROUP BY t.tag
ORDER BY max DESC
LIMIT 1

Ehk iga päringu ette pane EXPLAIN käsk ja paned mõned tulemused siia. See aitab näha, et kas väljd on üldse indekseeritud, kui pole, siis tuleks seda teha.

_________________
Online Perekonna Eelarve, Keerukamad veebipõhised infosüsteemid jms
Kommentaarid: 27 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum
Dirty Harry
HV Guru

liitunud: 05.09.2002




sõnum 04.04.2014 10:08:56 vasta tsitaadiga

Sedasorti tulemus on (ei osanud kuidagi viisakalt teksti siia foorumisse poetada): https://www.dropbox.com/s/rdr85v905az0wzc/mysql_v2ljund.PNG
Kas saab selle põhjal midagi otsustada?
Kommentaarid: 181 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 145
tagasi üles
vaata kasutaja infot saada privaatsõnum
andresv
HV kasutaja

liitunud: 06.12.2004



Autoriseeritud ID-kaardiga

sõnum 10.04.2014 09:44:56 vasta tsitaadiga

esiteks count(*) vist tuleks asendada millegi konkreetse countimiseg, count(p.id) näiteks. Ja nagu öeldud tuleb vanu andmeid aegajalt kustutada (arhiveerida)
Arvatavasti "AND p.datetime<='2014-03-28 02:02:52' " tingimus tagastab liiga plaju ridu ja tulemus ei mahu enam mällu ning sorteerimiseks kasutatakse faile kettal mis teeb asja kordi aeglasemaks.

võibolla aitab ka p.datetime veerule indeksi tegemine.
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
renekas
HV kasutaja
renekas

liitunud: 25.03.2004




sõnum 10.04.2014 09:59:24 vasta tsitaadiga

Where lausete väljadele tee indeksid ja kui countid siis counti indekseeritud väljadelt mitte tervet tabelit.
Kommentaarid: 22 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 21
tagasi üles
vaata kasutaja infot saada privaatsõnum
kullar
HV kasutaja
kullar

liitunud: 26.11.2006



Autoriseeritud ID-kaardiga

sõnum 10.04.2014 12:03:15 vasta tsitaadiga

Pane selline index, mis teeb joini kiiremaks. Vaatan, et kuupäeval on index olemas. Kui paned indexi ära, siis pane uuesti siia see explain tulemus.
sql:
  1.  
  2. ALTER TABLE `pixelpost_tags` ADD INDEX `img_id` (`img_id`)
  3.  

_________________
Online Perekonna Eelarve, Keerukamad veebipõhised infosüsteemid jms
Kommentaarid: 27 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum
renekas
HV kasutaja
renekas

liitunud: 25.03.2004




sõnum 10.04.2014 16:20:52 vasta tsitaadiga

pixelpost_pixelpost ID peale ka kui juba ei ole.
Kommentaarid: 22 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 21
tagasi üles
vaata kasutaja infot saada privaatsõnum
Dirty Harry
HV Guru

liitunud: 05.09.2002




sõnum 10.04.2014 19:16:50 vasta tsitaadiga

Midagi tegin:
https://www.dropbox.com/s/zr3b8wp2ap2afkh/mysql_v2ljund_2.PNG
Kommentaarid: 181 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 145
tagasi üles
vaata kasutaja infot saada privaatsõnum
kullar
HV kasutaja
kullar

liitunud: 26.11.2006



Autoriseeritud ID-kaardiga

sõnum 10.04.2014 23:41:32 vasta tsitaadiga

renekas kirjutas:
pixelpost_pixelpost ID peale ka kui juba ei ole.

Kes see siis ID peale paneb, kui see on PRIMARY key? Sinna pole seda küll vaja ja tegelikkuses on see olemas, kui tehakse primary key.

Millegipärast ta nüüd ei kasuta seda indexit, mille lisasid. Kas välja pikkused(id ja img_id) ja tüübid on erinevad?

_________________
Online Perekonna Eelarve, Keerukamad veebipõhised infosüsteemid jms
Kommentaarid: 27 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum
renekas
HV kasutaja
renekas

liitunud: 25.03.2004




sõnum 11.04.2014 10:20:12 vasta tsitaadiga

Kus mina tean kas on primary key või mitte, kohtan pidevalt selliseid tabeleid kuhu pole üldse contrainte pandud.
Kommentaarid: 22 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 21
tagasi üles
vaata kasutaja infot saada privaatsõnum
kullar
HV kasutaja
kullar

liitunud: 26.11.2006



Autoriseeritud ID-kaardiga

sõnum 11.04.2014 11:32:53 vasta tsitaadiga

renekas kirjutas:
Kus mina tean kas on primary key või mitte, kohtan pidevalt selliseid tabeleid kuhu pole üldse contrainte pandud.

Kui sa vaatad neid, pilte mida Mark0 ülesse panid, siis seal on ju selgelt kirjas(Possible keys all).

_________________
Online Perekonna Eelarve, Keerukamad veebipõhised infosüsteemid jms
Kommentaarid: 27 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum
serk
HV kasutaja

liitunud: 24.05.2003




sõnum 04.06.2014 14:23:14 vasta tsitaadiga

Tuimalt indeksid peale või icon_biggrin.gif icon_biggrin.gif
Klge mehed, lugege natuke ennem ja tehke endale selgeks, mis asi on indeks ja kuidas ta töötab.

Indeksit kasutatakse juhul, kui andmehulk mida päritakse tabelist, jääb ca 3% mahu sisse. Kui tagastatavate andmete hulk on suurem, teeb indeks asja üldjuhul hullemaks. Kui vaadata antud päringut, siis probleem on andmehulgas mida päritakse.
EXPLAIN SELECT COUNT(*) AS max
FROM pixelpost_pixelpost AS p, pixelpost_tags AS t
WHERE t.alt_tag LIKE '' AND p.id = t.img_id AND p.datetime<='2014-03-28 02:02:52'
GROUP BY t.tag
ORDER BY max DESC
LIMIT 1

võetakse ju kõik andmed mis on vanemad kui 28.03 - mis seal siis oodata? Arvata võib, et ajaloos on palju palju datat. Full Scan tehakse sellisel juhul anyway, olenemata kas paned sinna indeksi või mitte. Sa kammid lihtsalt kõik andmed oma kuupäeva filtri tõttu läbi.

Ja see on nagu kõige tobedam "häkk" mida teha annab, arvates, et see piirab kuidagi baasi päringu mahtu või tööd: "ORDER BY max DESC LIMIT 1 " Isegi loogiliselt mõeldes peaks aru saama, mis siin valesti on koormuse mõistes(miks see ei aita koormust lahendada)

pane datetime betweeni vahele, from ja to, IO väheneb sul kolaki kohe. Peale seda vaata andmehulka mida päritakse. Kui see jääb 3% sisse, pane indeksid peale. Peale seda vaata päringut jälle EXPLAIN planiga ja kas asjad paranesid või mitte.
Samuti võid partitsioneerida tabeleid, pakun, et arhiveerimine siin juhul on keeruline. isegi PhpMyAdmin minuarust suudab näidata indeksi mõtekust veergudel, kasuta kasvõi seda abina enda jaoks.
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 04.06.2014 16:00:10 vasta tsitaadiga

Saan ma õigesti aru - päring loendab/grupeerib kirjeid vastavalt veeru TAG väärtusele (mida see sisaldab? aga teised päringus kasutatud veerud?) ja tagastab siis suurima väärtuse (kirjete arvu) ilma TAG väärtuseta? Mida selline päring sisuliselt annab? Näiteks: "siin foorumis on postituste arvu järgi suurimas teemas 420 postitust". No mida sellise asjaga peale hakata? Oleks seal "tag, count(*)", saaks aru (suurim teema postituste arvu järgi on X ja selles on Y kirjet).

PS. ma eeldan, et p.id on PK ja t.img_id-le on defineeritud FK, mis viitab esimesele?
PPS. Ma pole ise MySQLi tarbinud, ainult suured kommertstooted.
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  MySQL slow query log
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.