Oracle + Web PLSQL
Szczepan Marchewka - 26-11-2005 22:29
Oracle + Web PLSQL
Czesc
Tworze aplikacje webowa w PLSQL, operujaca na bardzo duzej bazie danych. Niektore zapytania do danych tworzone dynamicznie sa tak duze, ze nie jest mozliwe tworzenie zestawienia na biezaco on-line (timeout'y), ale trzeba je kolejkowac na serwerze, zapisywac w bazie, a na ekranie w przegladarce wyswietlac dopiero po ukonczeniu generowania (strona w miedzyczasie sie odswieza cyklicznie z odpowiednim komunikatem ze trwa oczekiwanie na zestawienie). W tej chwili generowanie zestawien jest zrobione w PLSQL jako dynamicznie tworzone joby bazy danych (pojawiajace sie i znikajace po ukonczeniu ;-)), a sam proces generowania wyglada tak, ze w pakiecie PLSQL tworzony jest CLOB (zawierajacy HTML), a nastepnie po zakonczeniu zapisywany do tabeli, z ktorej potem ma wedrowac do przegladarki. Problem polega na tym, ze jest to rozwiazanie malo wydajne jak na nasze potrzeby i sprzet. Samych zapytan SQL juz nie podstroi, gdyz chyba sa juz wyzylowane na maksa. Moim zdaniem mozna i trzeba sprobowac przyspieszyc aplikacje (optymalizacja kodu PLSQL, przyspieszenie engine PLSQL itd, optymalizacja bazy danych w ktorej jest aplikacja). W zwiazku z tym mam kilka pytan: 1. W jaki sposob przyspieszyc engine PLSQL (jakie parametry mozna pozmieniac itd)? 2. Czy natywna kompilacja moze cos tu pomoc i w jakim stopniu? 3. Jakie rozwiazanie zamiast generowania duzej zmiennej CLOB i zapisu jej do tabeli tymczasowej mozna zastosowac (zapis jako pliki na dysku)? 4. Jaka jest wydajnosc obslugi plikow poprzez UTL_FILE (czy to moze przyspieszyc tworzenie zestawien)? 5. Jak moze wplywac liczba jobow na baze danych i aplikacje? 6. Czy lepiej miec np 5 stale dzialajacych jobow, cyklicznie obslugujacych kolejne zestawienia, czy tez dopuscic np. 20-30 jobow, odpalanych dynamicznie na zadanie? 7. Jak wypada wydajnosc procedur pisanych w Java w stosunku do PLSQL?
Oczywiscie nie da sie arbitralnie odpowiedziec na wszystkie pytania, ale moze ktos juz zadawal sobie niektore z tych pytan i potrafi cos doradzic. Wszystkie rozwiazania moglbym testowac osobiscie, ale czas nagli, a madrych ludzi nie brakuje. ;-))
Z gory dzieki za pomoc.
Szczepan@Marchewka.info.pl ----------------------------------------------------------------------- In the beginner's mind there are many possibilities, but in the expert's mind there are few. (Shunryu Suzuki 1905-1971) -----------------------------------------------------------------------
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 26-11-2005 22:29
Szczepan Marchewka wrote: > Czesc > > Tworze aplikacje webowa w PLSQL, operujaca na bardzo duzej bazie danych. > Niektore zapytania do danych tworzone dynamicznie sa tak duze, ze nie jest > mozliwe tworzenie zestawienia na biezaco on-line (timeout'y), ale trzeba je > kolejkowac na serwerze, zapisywac w bazie, a na ekranie w przegladarce > wyswietlac dopiero po ukonczeniu generowania (strona w miedzyczasie sie > odswieza cyklicznie z odpowiednim komunikatem ze trwa oczekiwanie na > zestawienie). > W tej chwili generowanie zestawien jest zrobione w PLSQL jako dynamicznie > tworzone joby bazy danych (pojawiajace sie i znikajace po ukonczeniu ;-)), > a sam proces generowania wyglada tak, ze w pakiecie PLSQL tworzony jest > CLOB (zawierajacy HTML), a nastepnie po zakonczeniu zapisywany do tabeli, z > ktorej potem ma wedrowac do przegladarki. > Problem polega na tym, ze jest to rozwiazanie malo wydajne jak na nasze > potrzeby i sprzet. Samych zapytan SQL juz nie podstroi, gdyz chyba sa juz > wyzylowane na maksa.
Nie wiem, czy dużo osiągniesz optymalizując w sposób jaki chcesz. Raczej postaraj się aby dane do zestawień były zawsze dostępne w formie która umożliwia ich przoste i szybkie wybranie selectem, lub procedurą. Możesz to zrobić przy pomocy triggerów, albo przygotowując co jakiś czasz częściowo zagregowane dane. Oczywiście nie zawsze da się pójść w tym kierunku, ale zazwyczaj można.
-- P.M.
Lucyna Witkowska - 26-11-2005 22:29
Paweł Matejski <madej@spam.madej.pl.eu.org> napisał:
> Nie wiem, czy dużo osiągniesz optymalizując w sposób jaki chcesz. Raczej > postaraj się aby dane do zestawień były zawsze dostępne w formie która umożliwia > ich przoste i szybkie wybranie selectem, lub procedurą. Możesz to zrobić przy > pomocy triggerów, albo przygotowując co jakiś czasz częściowo zagregowane dane. > Oczywiście nie zawsze da się pójść w tym kierunku, ale zazwyczaj można.
Zgadzam sie. Tez bym poszla w strone, np. materialized view. Jesli tych stron generowanych do CLOBa jest duzo, to wyciaganie ich z bazy tez obciaza serwer.
Pozdrowienia, LW
news - 26-11-2005 22:29
> 1. W jaki sposob przyspieszyc engine PLSQL (jakie parametry mozna > pozmieniac itd)? > 2. Czy natywna kompilacja moze cos tu pomoc i w jakim stopniu?
W 9i istniala kompilacja natywna kodu PL/SQL - powinna dac do 30% wydajnosci. Ale i tak musisz to sprawdzic...
> 3. Jakie rozwiazanie zamiast generowania duzej zmiennej CLOB i zapisu jej > do tabeli tymczasowej mozna zastosowac (zapis jako pliki na dysku)? > 4. Jaka jest wydajnosc obslugi plikow poprzez UTL_FILE (czy to moze > przyspieszyc tworzenie zestawien)? > 5. Jak moze wplywac liczba jobow na baze danych i aplikacje?
job_queue_processes - zmieniany automatycznie
> 6. Czy lepiej miec np 5 stale dzialajacych jobow, cyklicznie obslugujacych > kolejne zestawienia, czy tez dopuscic np. 20-30 jobow, odpalanych > dynamicznie na zadanie?
Sprawdz - zakladajac ze w ilosci jobow tkwi problem.
> 7. Jak wypada wydajnosc procedur pisanych w Java w stosunku do PLSQL?
Z tego co slyszalem to PL/SQL jest zawsze najszybszy...
Przy tuningu musisz sobie odpowiedziec co w Twoim przypadku zajmuje najwiecej czasu. Podales 7 mozliwych punktow, ale sam musisz przetestowac i dokladnie okreslic co jest waskim gardlem.
Spotkalem sie tez z takim rozwiazaniem, ze strony sa generowane automatycznie w nocy, a zawartosc w postaci danych z Oracle jest dolaczana pozniej. Przy pierwszym odwolaniu do strony jest tez sprawdzane czy jej wyglad (nie tresc) nie zostal zmieniony. Jesli tak to jest ona na nowo generowana, jesli nie to czeka sie tylko na selekty z bazy danych.
dap
Radoslaw Witkowicki - 26-11-2005 22:29
> > 7. Jak wypada wydajnosc procedur pisanych w Java w stosunku do PLSQL?
> Z tego co slyszalem to PL/SQL jest zawsze najszybszy...
To źle Pan słyszał, Java jest o niebo szybsza od PL/SQL.
news - 29-11-2005 10:11
Radoslaw Witkowicki wrote: >>> 7. Jak wypada wydajnosc procedur pisanych w Java w stosunku do PLSQL? > >> Z tego co slyszalem to PL/SQL jest zawsze najszybszy... > > To źle Pan słyszał, Java jest o niebo szybsza od PL/SQL.
Jakies dzialajace przyklady?
dap
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
Oracle 19g +Insert +Insert +Insert...
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?=
=?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?=
MSSQL Express czy Oracle Express
=?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?=
=?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
zanotowane.pldoc.pisz.plpdf.pisz.plred-hacjenda.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|