Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ne poznati query i preopterecenje servera

[es] :: MySQL :: Ne poznati query i preopterecenje servera

Strane: 1 2

[ Pregleda: 3477 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Ne poznati query i preopterecenje servera12.07.2011. u 21:56 - pre 155 meseci
Pozdrav svima...

Od pre koji dan na klijentovom serveru se počelo nešto čudno dešavati...
Oko 19H (nisam siguran dali se uvek u isto vreme dešava, nisam pratio ranije), mysql server počne da se guši... Server je samo za mysql u njemu tri baze, koje koriste tri sajta i svaki ima poseban user
Jedan sajt(po useru vidim koji je) odjedanput počne da šalje query-je bez LIMIT-a, pa to ispadne "SELECT mama, tata, deda, baba FROM rodbina;" i pošto ta tabela ima preko 35k records-a ... možete misliti na šta to liči i šta se dešava kad krene select bez limita. Zapuca se server jer on radi "Sorting data" ostali query se lockuju i eto zabave. Ono sto mene buni je to što u scripti NEMA querija bez limita.. svaki query i onaj najmanji ima neki limit.
Scripta ima i mamcache koji radi al u tom trenutku ne pomaže (99,53% sam siguran da memcache radi jel ga pratim u tom trenutku, a i radjen je upgrade na noviju verziju)
Ono što je još meni čudno je to što nije ništa radjeno na sajtu u poslednjih mesec dana i sve je radilo odlično, čak je i pala poseta sajta znači nije ni preopterećen.

Šta tu može da bude? Kako to da sprečim ili preteknem?
Verzija mysql-a je 5.0.92, možda tu treba upgrade.
Key effency je 100%
query cache hit je oko 45%
Connection usage je u normalu oko 10 a kad se preoptereti ja mislim (nisam siguran) da se popne oko 500..+ kad je sve ok imam 3-4queryja max u bazu ostalo sve iz cache vuče...

Za informacije koje nisam siguran sutra ću proveriti kad ponovo zagrcne server..

So help me god.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera12.07.2011. u 22:03 - pre 155 meseci
myisam ili innodb ? rekao bi da je myisam - povecaj key cache ako imas rama

drugo LIMIT ne znaci previse za query, znaci ali ne previse, mnogo je bitnije da query koristi bazu kako treba

upali logovanje querija koji ne koriste indexe http://dev.mysql.com/doc/refma..._log-queries-not-using-indexes

pa pogledaj sta tu ima da se poboljsa, posto ako radis full table scan, nista ti nece pomoci osim redizajna.. memcached nema sa svim tim nikakve veze
 
Odgovor na temu

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Re: Ne poznati query i preopterecenje servera12.07.2011. u 22:13 - pre 155 meseci
myisam je tabela.
Mislis key_cache_block_size? Sad je stavljeno na 1024... koliko bi mogao da stavim? Mislim jel zavisi jos od nekog parametra?
Memcache ima veze jer jednom kad se odradi query on ga kesira...a ovde je fora da ih radi uzastopce i ko da ih nije kesirao...
Stvori se jedno stotinjak istih query-a i to query koji ne mogu da nadjem u scripti a znam je napamet...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera13.07.2011. u 04:25 - pre 155 meseci
1024 cega? kilobajta, megabajta? pogledaj optimizacija / konfiguracija mysql servera

ako kesiras rezultat queria onda ti je mozda bolje da ga kesiras direktno u mysql-u (query cache) nego u memcached-u

ako query traje dugo i smara masinu a tvoja skripta ga pozove opet i opet i opet onda ce krenuti da se taj isti query gomila zato sto svaki za sebe uzima sve iste resurse, posto su krenuli paralelno svi vuku podatke direkt sa diska, generalno smor .. moras da

1. nadjes odakle ide taj query (vidis u show process sa kog ip-a dolazi, koji user koristi..)
2. da pustis jedan explain extended na taj query i vidis kako mozes da ga ubrzas
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera13.07.2011. u 04:26 - pre 155 meseci
btw ima jedno "krajnje" resenje kome ne treba cesto pribegavati ali posto takve situacije mogu da smore db server "kompletno" (glup skript besomucno pokusava da izvrsi query i salje jos i jos jos .. a mysql oce umre izvrsavajuci njiih stotine) - a to je MKILL skripta kojoj kazes "ubijaj sve upite duze od xyz sekundi" .. nije uopste dobro resenje ni za sta ali moze privremeno da resi neke probleme
 
Odgovor na temu

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Re: Ne poznati query i preopterecenje servera13.07.2011. u 16:34 - pre 155 meseci
evo sad mi se desava isto..kao sto sam rekao konekcija preko 500 imam, nemam querija bez indexa, slow query log mi se puni ali to zbog par querija koji sortiraju podatka...
Kao sto sma rekao znam sa kog sajt i kog usera ide i sve znam samo queri ne znam jer takav ne postoji u scripti...query bez limit (koji usporava server) ne postoji .. i svaki query u skripiti ima odredjeni limit i po tome ja znam iz kog fajla zeza...ovo me buni jer takav ne postoji...
procitao sam na tvom blogu o optimizaciji servera nesto sam primenio nesto je vec bilo...ne verujem da ce ista poraviti al ajd


evo jedan deo samo ..kako to izgleda

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera14.07.2011. u 06:15 - pre 155 meseci
ne razumem, el pokusavas sad da objasnis kako je bezgresno zacece moguce tj da je mysql sam odlucio da izvrsava neke upite iz dosade?
ako je query tu, znaci da ga neko izvrsava. Ovo sto deluje sa ove slike (osim sto ne kontam sta su ove kuke i kvake - verovatno si ti skremblovo da se en vidi hostname) je da sve konekcije dolaze sa istog hosta i kao isti user (ako su ove kuke hostname)

elem, da li koristis neki ERM ? moguce da te to ... posto razlog da povuce celu tabelu moze da bude neki tupav ERM sistem ...
druga mogucnost je da ti neko krade bazu, da imas negde neku rupu u tim tvojim skriptama i da ti onda neko izvrsava taj upit da pokupi podatke, pa je onda podelio foru sa drugarima ..

no najverovatnije je da prosto od nekud pozivas taj script .. sta da ti kazem grep je iz raja izasao, mysql tu nema sta da ti pomogne, mysql ti pokazuje koji user, sa kog hosta, sta radi .. i to je to, mysql ne moze da ti kaze nista drugo, sve ostalo je sada na tebi, da vidis na tom hostu sta se kaci na mysql, da li ima neki proces koji se kaci na mysql osim tog procesa koji tera te skripte (mozes sa lsof da vidis sve procese koji su konektovani na mysql server) pa da vidis dal mozda neko tera neki drugi app koji izvrsava taj upit .. i onda grep, grep grep, eventualno awk
 
Odgovor na temu

tarla

Član broj: 15527
Poruke: 1648



+42 Profil

icon Re: Ne poznati query i preopterecenje servera14.07.2011. u 10:03 - pre 155 meseci
Ne kontam šta može biti nepoznato ako:
- znaš koji user izvršava upit
- znaš na kojoj bazi se izvršava upit
- znaš sa kojeg hosta se izvršava upit
- znaš koliko traje, šta ga koči i tačno vrijeme kada je izvršen...




 
Odgovor na temu

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Re: Ne poznati query i preopterecenje servera13.09.2011. u 15:49 - pre 153 meseci
Opet ja sa problemom, ne da mi mira

Query jedan pomalo problematican trenutno

Code (sql):

EXPLAIN SELECT v.VID, v.title, v.channel, v.duration, v.thumb, v.thumbs, vs.viewnumber, vs.rate, v.videoURL FROM video AS v, video_stats AS vs WHERE  v.TYPE = 'public' AND v.active = '1' AND v.VID=vs.VID ORDER BY v.addtime DESC LIMIT 18


+----+-------------+-------+--------+---------------------+-------------+---------+----------------+-------+-----------------------------+
| id | select_type | TABLE | TYPE   | possible_keys       | KEY         | key_len | REF            | ROWS  | Extra                       |
+----+-------------+-------+--------+---------------------+-------------+---------+----------------+-------+-----------------------------+
|  1 | SIMPLE      | v     | REF    | PRIMARY,type_active | type_active | 26      | const,const    | 24693 | USING WHERE; USING filesort |
|  1 | SIMPLE      | vs    | eq_ref | PRIMARY             | PRIMARY     | 8       | redtubes.v.VID |     1 |                             |
+----+-------------+-------+--------+---------------------+-------------+---------+----------------+-------+-----------------------------+
2 ROWS IN SET (2.82 sec)

+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| TABLE | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | NULL | Index_type | Comment |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| video |          0 | PRIMARY     |            1 | VID         | A         |       33960 |     NULL | NULL   |      | BTREE      |         |
| video |          1 | vkey        |            1 | vkey        | A         |       33960 |     NULL | NULL   |      | BTREE      |         |
| video |          1 | addtime     |            1 | addtime     | A         |       33960 |     NULL | NULL   | YES  | BTREE      |         |
| video |          1 | type_active |            1 | TYPE        | A         |           2 |     NULL | NULL   |      | BTREE      |         |
| video |          1 | type_active |            2 | active      | A         |           6 |     NULL | NULL   |      | BTREE      |         |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
5 ROWS IN SET (0.01 sec)

+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| TABLE       | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | NULL | Index_type | Comment |
+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| video_stats |          0 | PRIMARY  |            1 | VID         | A         |       33960 |     NULL | NULL   |      | BTREE      |         |
| video_stats |          1 | viewtime |            1 | viewtime    | A         |       33960 |     NULL | NULL   |      | BTREE      |         |
+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
2 ROWS IN SET (0.00 sec)
 


Onaj filesort me muci jako, zakljucava ostale query-e, i ako se pojave vise njih ne bude bas veselo... Radi on ovako al ako se poveca poseta nagarbusio sam.
Kako ovo da resim?
Dal prvo da izvucem ID-ove pa onda napravim drugi query koji trazi tacno te ID-ove?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera13.09.2011. u 17:42 - pre 153 meseci
pocni sa tim da pises explicitno join, lakse za gledati

Code:

SELECT v.VID, v.title, v.channel, v.duration, v.thumb, v.thumbs, vs.viewnumber, vs.rate, v.videoURL 
FROM 
  video v 
JOIN 
  video_stats vs USING (VID)
WHERE  
  v.type = 'public' 
  AND v.active = '1'
ORDER BY v.addtime DESC LIMIT 18


Ono sto mozes ovde da ubrzas je da kreiras kljuc (VID, type, active) u video tabeli posto mysql tu ili koristi tvoj primarni kljuc (vid) ili koristi "type, active" kljuc a trebaju mu oba ... napravi mu vid, type, active i radice brze

dalje, povecaj ako imas prostora malo sort buffer size mada ako se secam ti imas tu neka text polja sto znaci da su podaci "veliki". Probaj prvo da samo dodas index, ako pomnogne super, ako ne pomogne onda uradi nesto tipa

Code:

SELECT av.VID, av.title, av.channel, av.duration, av.thumb, av.thumbs, avs.viewnumber, avs.rate, av.videoURL from 
video av, video_status avs where av.VID in
(SELECT v.VID
FROM 
  video v 
JOIN 
  video_stats vs USING (VID)
WHERE  
  v.type = 'public' 
  AND v.active = '1'
ORDER BY v.addtime DESC LIMIT 18)
ORDER BY v.addtime DESC;


fora je sto u ovom drugom slucaju ovaj interni query radi sortiranje minimalnog result set-a i ne mora da premesta ogromne slogove tamo vamo ... vrati 18 id-ova i onda povuce podatke za samo tih 18 i sortira ih na brzaka (samo njih 18)
 
Odgovor na temu

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Re: Ne poznati query i preopterecenje servera13.09.2011. u 19:44 - pre 153 meseci
Ubacio VID nestao filesort, al sad koristi addtime key :)

Code (sql):

+----+-------------+-------+--------+--------------------+---------+---------+----------------+-------+-------------+
| id | select_type | TABLE | TYPE   | possible_keys      | KEY     | key_len | REF            | ROWS  | Extra       |
+----+-------------+-------+--------+--------------------+---------+---------+----------------+-------+-------------+
|  1 | SIMPLE      | v     | INDEX  | PRIMARY,all_in_one | addtime | 63      | NULL           | 25483 | USING WHERE |
|  1 | SIMPLE      | vs    | eq_ref | PRIMARY            | PRIMARY | 8       | redtubes.v.VID |     1 |             |
+----+-------------+-------+--------+--------------------+---------+---------+----------------+-------+-------------+
2 ROWS IN SET (0.01 sec)
 


Inace resursa na serveru ima dosta, da imam i txt polje(videoUrl, prebacio bi ja u char da mogu al ne mogu bas), ovaj query u query mogu da koristim to mi nije problem ako bi mi pomogao (mada tu mogu i sphinx da iskoristim) al zar mi nije bolje dva posebna querya (prvo izvuce id a u drugom tacne podatke) ili je nested bolje?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera13.09.2011. u 19:53 - pre 153 meseci
jedan pa drugi vs nested - ista prica mysq ce sam odraditi to u dva koraka svejedno .. a izbegavas round trip do aplikacije

verovatno je izracunao da mu je brze sa addtime indexom (zbog sorta) probaj da forsiras onaj index sa vid + type + active) i uporedi vreme izvrsenja sa ovim exec path-om koji on sam pronalazi
 
Odgovor na temu

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Re: Ne poznati query i preopterecenje servera13.09.2011. u 20:16 - pre 153 meseci
meni se cinilo ovo forsiranje prosto al ko da nije

Code (sql):

SQL query:  

EXPLAIN SELECT v.VID, v.title, v.channel, v.duration, v.thumb, v.thumbs, vs.viewnumber, vs.rate, v.videoURL
FROM video AS v, video_stats AS vs
USE INDEX ( v.all_in_one )
WHERE v.TYPE = 'public'
AND v.active = '1'
AND v.VID = vs.VID
ORDER BY v.addtime DESC
LIMIT 18

MySQL said:  
 #1064 - You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near '.all_in_one) WHERE  v.type = 'public' AND v.active = '1' AND v.VID=vs.VID ORDER ' at line 1
 


Ako stavi v.all_in_one, vs.PRIMARY isto dobijem ...


P.S a sad video i ovo "#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'" bas lepo :)

[Ovu poruku je menjao squirll dana 13.09.2011. u 23:01 GMT+1]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera13.09.2011. u 23:04 - pre 153 meseci
da, u pravu si, taj wl jos uvek nije odradjen :(

moras da stavis to u from ..

Code:

SELECT 
av.VID, av.title, av.channel, av.duration, av.thumb, av.thumbs, avs.viewnumber, avs.rate, av.videoURL 
FROM
video av 
JOIN video_status avs USING (VID)
JOIN 
(SELECT VID
FROM 
  video v 
WHERE  
  type = 'public' 
  active = '1'
ORDER BY addtime DESC LIMIT 18) 
X USING (VID)
ORDER BY v.addtime DESC;


E sad, JAKO BITNO, ako ti je active char prebaci ga u tinyint, ako ti je vec tinyint onda ne smes da radis "active = '1'" jer to onda ne moze da koristi index, moras "active = 1" - dakle bez navodnika, posto sa navodnicima (apostrofima u tvom upitu) ti poredis string i broj !!!



[Ovu poruku je menjao bogdan.kecman dana 14.09.2011. u 00:21 GMT+1]
 
Odgovor na temu

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Re: Ne poznati query i preopterecenje servera13.09.2011. u 23:23 - pre 153 meseci
active mi je char(1) ok bice prebaceno...ajd mi samo jos u vezi uSE indexa pomozi ..to mi se cini da bi mi pomoglo vise nego ovaj query
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera14.09.2011. u 09:56 - pre 153 meseci
char(1) je ok. slobodno ostavi .. ja vise volim tiny ali char(1) je isto ok. Bitno je samo da ne poredis broj i string posto to pravi haos (ne koriste se indexi) a ako poredis string sa stringom to je ok ..
 
Odgovor na temu

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Re: Ne poznati query i preopterecenje servera14.09.2011. u 12:40 - pre 153 meseci
Ajde ovako ...taj videoUrl mi je text polje, i kontaj ja da mi to "kolje" bazu, u sta bi ja to mogao da prebacim da mi bolje radi?
Polje sadrzi podatke tipa "beograd-hronika.hml"
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera14.09.2011. u 13:03 - pre 153 meseci
url je zeznut zato sto moze da bude ogroman. Ako ti znas da ti je url "kratak" ako ga stavis na 200 latin1 karaktera onda nemas problem. Ako moze da bude dugacak onda je jedino resenje da ga sibnes u drugu tabelu a ovde da vuces samo id i da onda taj text povuces kad ti stvarno treba
 
Odgovor na temu

squirll

Član broj: 248171
Poruke: 106
*.dynamic.isp.telekom.rs.



+66 Profil

icon Re: Ne poznati query i preopterecenje servera16.09.2011. u 10:32 - pre 153 meseci
pa ne mogu da ogranicavam url pozivam ga samo kad mi treba (citaj uvek)...
Jos mi ostalo da skontam sto USE INDEX nece da radi :S
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Ne poznati query i preopterecenje servera16.09.2011. u 14:26 - pre 153 meseci
mozes url da sibnes u drugu tabelu i onda da ga zoves sa posebnim pozivom po id-u ..

uradi copy/paste tog use sto ti ne radi
 
Odgovor na temu

[es] :: MySQL :: Ne poznati query i preopterecenje servera

Strane: 1 2

[ Pregleda: 3477 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.