[ cesare @ 05.02.2010. 20:07 ] @
Pozdrav svima !!!!

Napravio sam program u VBNET-u koji manipuliše podacima iz MySQL baze. Program vodi evidenciju o listi robe na lageru. Program radi u LAN mreži. Baza je na jednom računaru, a program (klijent) na drugom. Kada korisnik unosi podatke preko programa unos podataka je jedno vreme ok. Bez pravila se dogodi greška koja kaže da server nije odgovorio na zahtev klijenta u potrebnom vremenu. Korišćenje bilo kog drugog programa koji rad u mreži ne pravi problem. Npr. TotalCommander sa računara gde je instaliran moj program, bez problema manipuliše fajlovima sa računara gde je baza instalirana. U čemu može biti problem u komunikaciji programa i MySQL baze.

Unapred hvala ....
[ tarla @ 05.02.2010. 22:12 ] @
Razlog može biti svašta... Od podzemnih voda do mjesečevih pjega...

Jedan od 2 milijarde načina da barem počneš rješavati problem je da pogledaš logove na serveru, pustiš ping ka server i vidiš da li se šta izmjenjalo u momentu kada zabode program, itd itd... ...
[ bogdan.kecman @ 05.02.2010. 22:59 ] @
Citat:
cesaremanipuliše podacima iz MySQL baze.
...
Bez pravila se dogodi greška koja kaže da server nije odgovorio na zahtev klijenta u potrebnom vremenu.


da li zatvaras konekcije ka bazi kada ti vise ne trebaju?
da li mozes da imas pauze izmedju upita (npr otvoris konekciju kada startujes program, i onda kad user negde klikne ti iskoristis tu konekciju da posaljes upit tako da efektivno ako koristnik ostavi aplikaciju da radi i ode na kafu moze da bude 2h razmak izmedju dva upita)?
da li hendlujes greske koje vracaju mysql funkcije?

99% je razlog to sto otvoris konekciju i onda je koristis "kad ti treba" a ne proveravas greske koje ti mysql vrati, tako da kada imas razmak izmedju dva upita veci od timeout varijable mysql zatvori konekciju a ti to ne skontas i sledeci put kada pustis upit ode sve u ....

onih 1% je moguce da imas los upit koji se izvrsava satima pa .nemoj sa tvoje strane odustane i kaze da nesto nije u redu posto mu mysql ne odgovara ..

sve u svemu
1. hendluj gresku koju vraca mysql konektor - tu ti pise tacno sta se desilo i zasto
2. pogledaj logove na mysql-u kao sto ti rece tarla
[ cesare @ 06.02.2010. 17:21 ] @
Malo sam se igrao sa programom i u kodu povecao Timeout vrednost za MySqlConnection objekat i za SelectCommand objekat i trazio da mi prikaze vreme potrebno za izvrsavanje upita. Vreme iznosi 53 sekunde. Upit povezuje podatke iz 5 tabela (dobavljaci,kategorije,proizvodjaci,modeli i roba). U tabeli roba se nalaze polja o nekoj robi (nabavna i prodajna cena, kolicina, sifra na lageru itd. i polja dobavljac,kategorija,model koja su id brojevi odgovarajucih upisa u odnosne tabele. Upit pored podataka o ceni kolicini sifri itsl. vadi i podatke o nazivima dobavljaca, kategorije, proizvodjaca i modela robe iz odnosnih tabela i sve ih zajedno prikazuje. U tabeli roba trenutno postoji 773 zapisa. Probao sam par programa za administraciju MySQL baze i svi oni gotovo trenutno ucitavaju kompletnu tabelu roba.


Postoji li nacin da se ovaj upit ubrza ? Sva polja koja upit trazi su potrebna za prikaz. Evo i upita:

Code:

"SELECT tblroba.IdBroj,tblroba.SifraRobe,tblroba.Dobavljac,tblkomitenti.Naziv,tblmodeli.NIdBroj,tblproizvodjaci.Naziv,tblroba.Model,tblmodeli.Naziv,tblroba.Serial,tblroba.NCena,tblroba.Valuta,tblroba.PCena,tblroba.PDV,tblroba.LKolicina,tblroba.Komentar,tblmodeli.Slika,tblroba.Stanje FROM tblproizvodjaci INNER JOIN (tblmodeli INNER JOIN (tblkategorije INNER JOIN (tblkomitenti INNER JOIN tblroba ON tblkomitenti.IdBroj = tblroba.Dobavljac) ON tblkategorije.IdBroj = tblroba.Kategorija) ON tblmodeli.IdBroj = tblroba.Model) ON tblproizvodjaci.IdBroj = tblmodeli.NIdBroj WHERE tblroba.Kategorija='" & xxx & "' AND tblroba.ProdajnoMesto='" & xxx & "' AND tblroba.Status='L'"


Unapred hvala ...
[ bogdan.kecman @ 07.02.2010. 02:25 ] @
mozda, ako ubacis jedan EXPLAIN pre tog upita, pa bacis ovde izlaz, mozda vidimo sta ti davi kokoske
[ cesare @ 07.02.2010. 09:50 ] @
Evo "odgovora" EXPLAIN-a gornjeg upita:

Code:

id      select_type    table                      type  rows  extra

1    SIMPLE        tblproizvodjaci            ALL    28    
1    SIMPLE        tblkategorije            ALL    30    Using where; Using join buffer
1    SIMPLE        tblkomitenti            ALL    43    Using join buffer
1    SIMPLE        tblroba                    ALL    764    Using where; Using join buffer
1    SIMPLE        tblmodeli                    ALL    778    Using where; Using join buffer
[ bogdan.kecman @ 07.02.2010. 13:38 ] @
el imas indexe na?

tblroba.Dobavljac
tblroba.Kategorija
tblroba.Model
tblroba.ProdajnoMesto
tblroba.Status
tblkategorije.IdBroj
tblmodeli.IdBroj
tblkomitenti.IdBroj

posto deluje da nemas?
[ cesare @ 08.02.2010. 15:43 ] @
Indeksirao sam polja koja si naznacio. "Tošiba ko ludo" :-)

Puno hvala još jednom !!!!
[ bogdan.kecman @ 08.02.2010. 19:09 ] @
nema na cemu, nadam se da si nesto naucio :)