PDA

Pogčedajte punu verziju : stored procedure brzina


_korso_
14. 04. 2008., 11:23
Imam jedno pitanje, vezano za stored procedure kod Sql Server-a 2005. Da napomenem da ih nikad nisam pisao. Jedino sam video kako izgledaju.
Pitanje bi glasilo ovako: "Da li je brze izvrsavanje SP-e ili obicnog upita ?".
E sada, verovatno da se ovo moze sagledati sa raznih strana.
Nema smisla govoriti o zameni upita "select * from users where userid=1" stored procedurom.
Ali tamo gde se vrsi join nad vise tabela, ili gde ima dosta podataka za obradu (par hiljada, desetina hiljada slogova) ili pak tamo gde se izvlace podaci koji bi se mozda dobili sekvencijalnim izvrsavanjem par upita.
Interesuju me vasa iskustva sa ovim (ukoliko ste ih imali) ?
Takodje koliko bi imalo smisla koristiti iste na web-u (opet vezano za brzinu, ako postoji taj speed issue).
Moje neko licno misljenje (mozda posto ih nisam koristio) je da je ipak brzina izvrsavanja obicnih upita veca, ali ... mozda to zavisi od slucaja do slucaja ?
//edit
sada sam bas video jedan zanimljiv tekst
http://statestreetgang.net/post/2008/04/My-Statement-on-Stored-Procedures.aspx

jablan
14. 04. 2008., 12:14
Načelno, nema mnogo prednosti u korišćenju SP sve dok ne odlučiš da malo veće parčiće koda postaviš u njih (kreiranje nekih temp tabela, rad sa kursorima, prosleđivanje kolekcija kroz parametre kao XML, itd). Sa druge strane, SP ti ostavljaju manje mogućnosti da brljaš (upiti svuda u kodu, sklapanje koje omogućava SQL injection itd).

Moj generalni savet je da ih koristiš.

Dejan Topalovic
14. 04. 2008., 13:08
Principijelno su direktni SQL upiti brzi od uskladistenih procedura, ali sve zavisi od namjene i kolicine zatrazenih/obradjenih podataka.

Ukoliko imas potrebu za serijskim izvrsavanjem veceg broja upita i za obradom tih dobijenih podataka, onda su uskladistene procedure bolje rjesenje.

Iz mog visegodisnjeg iskustva u radu sa Oracleom (jbg, ne radim sa SQL Serverom), mogu ti potvrditi da su direktni SQL upiti daleko brzi nego da koristis uskladistenu proceduru (zato sto Oracle u uskladistenoj proceduri skace sa RDBMS engina na PL/SQL engine i obrnuto, da ne davim sad internim funkcionisanjem baze), ali direktne upite veoma rijetko koristimo, jer nam je baza oko 90% DataWarehouse orjentisana (import podataka, dnevni/sedmicni/mjesecni/kvartalni/godisnji obracuni, export podataka i td.), a 10% OLTP orjentisana (za Web formulare i par aplikacija za rucni unos podataka).

Mi imamo poprilican broj uskladistenih procedura, koje se pozivaju iz razlicitih aplikacija radjenih u Javi, C# i Delphiju - zamisli sta bi bilo da smo za svaku aplikaciju morali pisati/prilagodjavati SQL upite... Ili da moras mijenjati neki upit da bi dodao par kolona ili neko ogranicenje u WHERE klauzulu - u proceduri moras samo jednom izmijeniti, a u suprotnom bi u svakoj aplikaciji morao da trazis te upite i mijenjati ih jedno po jedno...

Ako podatke zelis samo izlistati iz baze i prikazati na ekranu/papiru, onda pokusaj za tu namjenu koristiti direktni SQL upit. Ukoliko ti je brzina veoma bitna, onda se isplati napisati i kompleksniji SQL upit, nego koristiti uskladistenu proceduru. U svakom drugom slucaju - uskladistena procedura.

_korso_
14. 04. 2008., 13:37
@Dejan Topalovic
Ne verujem (uglavnom uvek) onome sto procitam ili cujem, dok se na ovaj ili onaj nacin, ne uverim sam.

A i hvala na odgovorima BTW. Brzina mi je bitna posto se radi o web aplikaciji.
Uglavnom baza sa kojom cu da radim je vec u funkciji, koristi se u par drugih desktop aplikacija. Takodje postoje neke gotove procedure koje se koriste,ali
neke od njih se bas dugo izvrsavaju, oko 10tak sec. Za web je to rekao bih, puno vremena. Zbog toga sam i pitao o razlici u brzini, posto cu morati neke od tih i sam da koristim.

Dejan Topalovic
14. 04. 2008., 15:54
@_korso_: Mozes li kopirati source code od tih upita ili procedure, da pokusamo optimizovati upite? Prilozi takodje i DDL izraze (za CREATE TABLE).

_korso_
14. 04. 2008., 17:09
Evo koda za jednu SP. Posto je malo veci saljem ga kao attachment. Script tabele trenutno nemam kod sebe.
Posteno ja ne mogu da se snadjem u prilozenoj proceduri, osim sto vidim da je par tabela u igri.

jablan
14. 04. 2008., 18:03
@_korso_: Mozes li kopirati source code od tih upita ili procedure, da pokusamo optimizovati upite? Prilozi takodje i DDL izraze (za CREATE TABLE).
Tražili ste - gledajte... :)

Dejan Topalovic
14. 04. 2008., 19:12
Tražili ste - gledajte... :)Napisao sam "pokušamo", a ne "pokušam". ;)
Ima li neko drugi, ko se bolje razumije u SQL Server, jer sam tu tanak skroz? :D
Jedino da portiram source code na Oracle...

@_korso_: Pogledao sam malo tvoju proceduru i vidim da se tu podaci provjeravaju i obrađuju po određenim uslovima, tako da ne vjerujem da u ovom slučaju možeš izbjeći korištenje uskladištene procedure...

Ovo bih mogao uzeti kao temu za novi tekst na blogu - "Uskladišena procedura vs. direktni SQL upiti". :1014:

jablan
14. 04. 2008., 19:40
Pa ima kursore - teško da će to moći van SP. :)

A sad, da raspetljavam SP od kilo linija, i to još iz bankarstva, neka hvala, to ni za pare ne radim... ;)

_korso_
14. 04. 2008., 22:13
iz bankarstva, neka hvala, to ni za pare ne radim... ;)
takodje moja omiljena oblast ;)


Ovo bih mogao uzeti kao temu za novi tekst na blogu - "Uskladišena procedura vs. direktni SQL upiti". :1014:
Mislim da bi to bilo lepo :), ali vezano za mysql, pa sto da ne i oracle.

Sve u svemu videcu sta cu sa ovim da radim i kako cu da se iskobeljam sa ovim procedurama, jer ima jos par ovakvih a neke idu i do 1,5 K koda.
Bice veselo...