[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Optymalizacja



Tomasz Judycki wrote:
> 
> Cos mi sie wydaje, ze problem tkwi gdzie indziej. Moze brakuje USE-INDEX w FOR
> EACH, albo jest, ale wskazuje na zly indeks?
>

USE-INDEX w tym wypadku moze zadziałac słabo, bo efektywnie indeks będzie
wykorzystany tylko w kontekscie zakladu.

Panu Markowi polecam

compile procedura.p listing procedura.lst.
compile procedura.p xref procedura.xrf.

I sprawdzenie w odpowiedniej linii pliku procedura.xrf w referencji SEARCH
(numer linii mamy z pliku procedura.lst) czy indeks jest uzyty efektywnie
(jesli jest WHOLE-INDEX to zle). 


> 
> Ilu moze byc pracownikow w jednym wydziale? 10 tysiecy? 20 tysiecy?
> Sekwencyjne przejrzenie 20 tysiecy rekordow na byle PCcie trwa 4-5 sekund, a
> przeciez zwykle nie potrzebujemy wszystkich rekordow na raz. Co to jest ten
> niezadawalajacy wynik? Odpowiedz po 2 sekundach? 2 minutach?
> 
> Jesli pracownikow jednego zakladu jest 100 tysiecy, wydzialow 100, a zwykle
> przeglada sie pracownikow 2-3 wydzialow to sugeruje uzycie temp table:
> 
> def temp-table tt_prac
>  field nazwisko as char
>  field imie as char
>  field prac_recid as recid
>  index nazwisko imie.
> 
> 
> def var vListaWydzialow as char.
> def var i as int.
> def var vZaklad as char.
> 
> do i = 1 to num-entries( vListaWydzialow ):
>   for each prac where prac.zaklad = vZaklad and
>                       prac.wydzial = entry( i, vListaWydzialow
> )                 no-lock:
>     create tt_prac.
>     assign
>       tt_prac.nazwisko = prac.nazwisko
>       tt_prac.imie     = prac.imie
>       tt_prac.prac_recid    = recid( prac ).
>   end.
> end.
> 
> for each tt_prac:
>   ......
> end.
> 

Moim zdaniem to moze byc troche sliskie. Jesli ktos zada warunek, ktory
wpadnie na wystarczajaco duze wydzialy i przy okazji system bedzie
obciazony to ta operacja moze byc zabojcza. A co gdy zapytanie jest jednym
z czesciej zadawanych i uruchomi go kilku uzytkownikow jednoczesnie? Brrrrr
ja bym sie bal ze zawale system plikow operacjami zapisu... Ale wszystko
oczywiscie zalezy od wielkosci systemu, liczby rekordow, liczby
uzytkownikow itd. 

Ale balbym sie tego robic nawet przy tych liczbach: 100 wydzialow, w kazdym
srednio 1000 pracownikow. Zadajac warunek na pracownikow 5 wydzialow mamy
do stworzenia ok 5000 rekordow tt_prac. Zakladajac ze srednio wydajny
serwer moze wygenerowac pi razy drzwi 700 rekordow na sekunde, to mamy 7
sekund na stworzenie rekordow (i to przy zalozeniu ze serwer nic wiecej nie
robi). A jesli zapytanie jest jednym z czesciej zadawanych... 

Troche malo wiemy i dlatego moze zbyt daleko siegamy w wyobrazeniach...
Jakie sa te niezadowalajace czasy?


> Oczywiscie w tabeli prac musi byc indeks rozpoczynajacy sie od zaklad,
> wydzial.
> 
> Pozdrawiam!
> 
> Tomasz Judycki
> 
> Textus Virtualis Sp. z o.o.
> Szaserów 3
> 04-293 Warszawa
> tel/fax (48 22) 879 82 00
> http://www.tv.com.pl
> 

Uklony,

Tomek Fidecki
------
Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
Obsluga listy:  listserv@zeto.bydgoszcz.pl
Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
------