Tracing + TKProf = detaljna analiza za optimizaciju nekog (SQL) procesa

Friday, 23.11.2007 – Dejan

Ako pred sobom imate neku sporu aplikaciju, tj. neki spor SQL upit, u većini slučajeva ćete prvo pogledati šta kaže EXPLAIN PLAN, a ako ni nakon toga ne uočite potencijalni problem, onda u pomoć dolazi trejsovanje (tracing) i TKProf.

Pročitaj kompletan tekst »


Administrator Oracle baza podataka

Friday, 16.11.2007 – Dejan

Šta radi jedan administrator Oracle baza podataka? Kako izgleda jedan njegov radni dan?

Na nekoliko foruma sam već viđao ovakva pitanja, a u zadnje vrijeme sam ih dobio nekoliko putem E-Maila. Stoga ne bi bilo loše ukratko navesti osnovne zadatke jednog Oracle DBA i opisati kako izgleda jedan njegov radni dan.

Na Wikipediji imate veoma opširan opis jednog administratora baza podataka (“Database administrator“), a ja ću napisati samo stvari iz ličnog iskustva.

Kao Oracle DBA u firmi sam zadužen za slijedeće zadatke:

– Instalacija Oracle softwarea na serverima i klijentskim kompjuterima (za klijente sam napravio jednu silent install skriptu, kako ne bih morao ići od jednog kompjutera do drugog, pa se ta skripta može ručno pokrenuti ili putem jednog rollout updatea na nivou operativnog sistema)
– Testiranje novih komponenti i instalacija novih zakrpa (patching)
– Nadgledanje (monitoring) svih baza putem automatizovanih procesa i putem Enterprise Managera (Database Control i Grid Control)
– Praćenje performansi baze i aktivnih aplikacija, a potom optimizacija loših upita ukoliko su performanse loše
– Podrška programerima pri svakodnevnom radu (savjetovanje kako šta bolje da urade, konsultacije pri dizajniranju strukture tabela i drugih objekata, na šta treba da paze i td.); u sklopu ovog zadatka sam zadužen i za Acceptance i Development baze, te za replikaciju friških podataka sa Production baze na ove dvije, kako bi programeri imali uvijek nove podatke za ispravno testiranje i razvoj aplikacija; osim replikacije, koristim nekad i DataPump Export/Import
– Backup i recovery baze
– Svakodnevno praćenje security liste sa najnovijim propustima i rješenjima
– Kreiranje Service Requesta na MetaLinku ukoliko naletimo na neki Oracle bug
– Usavršavanje čitanjem knjiga i raznih članaka na internetu, kako bih novostečeno znanje prenio drugim kolegama (ja jedini volim da čitam Oracle knjige i dokumentaciju, da pratim razvoj Oracle softwarea i pronalaženje korisnih stvari, a onda kolege samo dođu i pitaju:”Dejane, kako da uradim ovo?” ili “Dejane, postoji li neka funkcija, pomoću koje se ovo može efikasno odraditi?“) – imaju sreće što volim da nesebično prenosim svoje znanje drugima. 😀
– i td.

Jedan radni dan ne mogu generalno da opišem, jer mi nije svaki radni dan isti. Nekad provedem cijeli dan sarađujući sa podrškom iz Oracle Support putem MetaLinka, nekad provedem cijeli dan na optimizaciji nekog lošeg SQL upita ili čitave procedure, a nekad odradim masu sitnih stvari uključujući kratke sastanke, nadgledanje baze, provjeru backupa, analizu alert loga, pomaganje kolegama i sl.

U svakom slučaju, nije istina što ljudi (programeri uglavnom) kažu kako Oracle DBA efektivno dnevno radi samo 2 sata, a ostalo vrijeme provodi surfujući ili zujeći po kancelariji, odnosno po okolnim kafićima. 😀
Nekad se radi čak i 3 sata!! 😉 Just kidding.

Ako imaš odgovornost da Oracle baza mora biti dostupna i da sve radi što je bolje moguće, onda nema šanse da sve zadatke obaviš u samo 2-3 sata. Ja lično uglavnom nemam stresa i frke, ali kad se i to desi, ne traje dugo.

U svakom slučaju veoma zanimljiv posao, a ako imate kao i ja sreće da volite to šta radite i da ste još uz to dobro plaćeni, onda će vam zanimanje Oracle DBA zvučiti primamljivim.


Forum o dizajniranju baza podataka

Thursday, 15.11.2007 – Srdjan

Gospodin Alf Pedersen (The Database Design Resource Center) je startovao forum o dizajniranju baza podataka. Forum se nalazi na adresi http://forum.databasedesign-resource.com/.

Nadam se da će forum biti kvalitetan i da će postati web lokacija koju ću rado posećivati.


Baze na serveru, a server u bunkeru

Wednesday, 14.11.2007 – Dejan

Pošto je našoj firmi dostupnost Oracle baze veoma važna, serveri su smješteni u jednoj vrsti “bunkera”. Skromno ću reći – ukoliko se skrši Oracle baza, onda ili propada cijela firma ili više od pola ljudi u firmi ostaje bez posla.

“Bunker” je ogromna prostorija smještena 10 m ispod zemlje, sa zaštitom protiv požara, poplave i zemljotresa, a posjeduje i vlastito alternativno napajanje strujom (baterijske jedinice i 3 velika dizel agregata).

Pristup imaju samo ovlaštene osobe sa chip karticama, a danas smo i mi dobili jedinstvenu priliku da posjetimo taj bunker i iskoristimo priliku za fotografisanje. 😀

Na prvoj slici smo ja (prvi s lijeva), moj šef Edi i radni kolega John (Oracle DBA, radio za Oracle Austrija ranije), a na ostalim slikama su naš stari server, naš novi server i na kraju SAN storage za novi server.

Dejan, Edi, John Stari production server Novi production server SAN storage za novi server

A gdje su smješteni vaši serveri? Koliko vam je važna dostupnost baze?


Stigao nam TOAD Oracle for Professional

Wednesday, 14.11.2007 – Dejan

TOAD for Oracle ProfessionalJuče nam je stigao paket sa novom verzijom “TOAD for Oracle Professional“, pa smo se obradovali kao mala djeca kad dobiju novu igračku. 😀

Osjećaj je drugačiji kad dobiješ ovakav paket poštom u odnosu kad skineš neki software sa neta…

Inače, nova verzija ima dosta poboljšanja i nekoliko novosti, ali ne bih sad da vas gnjavim time. Detaljnu listu tih izmjena možete naći na službenom sajtu.


Čovek se uči dok je živ…..

Friday, 09.11.2007 – Zidar

Kada mi je Dejan ponudio da se pridružim “blogovanju”, bio sam veoma uzbuđen i počašćen. Međutim,  kad je trebalo sesti i nešto napisati, mozak mi je potpuno stao. Sve mi se činilo nekako nedovoljno dobro, već viđeno i slično. Ličio sam sâm sebi na pisce iz crno-belih filmova. Pisac sedi za pisaćom mašinom, cigareta u ruci (ja ne pušim, ali takva je slika), gomila izgužvanih papira okolo, pisac frustrirano umeće novi list u mašinu da bi ga odmah izvadio zgužvao i bacio na pod. Onda ustaje i nervozno šeta po sobi, povlači dim, trgne iz boce, oznojeno mu čelo, hladan znoj. Već je ponoć, ideja nikako da naiđe, a rok za predaju rukopisa je sutra u 8 … 

Kad se ideja napokon pojavila, shvatio sam da imam još jedan problem. Nije veliki, ali je neprijatan, “embarassing”, rekli bi englezi. Nisam umeo da koristim naša slova. To je OK možda na forumima, tamo je cilj da se što brže napiše odgovor. Blog je po meni nešto drugo, na malo višem nivou. Blog je dnevnik, a od mnogih dnevnika su nastale knjige, memoari i slične stvari. Ne kažem da će od ovog bloga postati knjiga, ali postovi zaslužuju da barem lepo izgledaju.  Dejan i Srđan ulažu mnogo truda da ovaj sajt izgleda lepo i profesionalno. Pa ko velim, ja mogu bar toliko da se potrudim, da na našem sajtu pišem našim pismom. Uz Srđanovu nesebičnu pomoć, evo naučio sam kako da dobijem naša slova. U privatnom životu naravno koristim i ćirilicu, ali ovo je tehnička materija, pa je nekako prirodno da bude na latinici. Ako ikad budem pisao poeziju u nekom blogu, biće na ćirilici, da se ne zaborave koreni…

Ja po profesiji nisam informatičar, niti programer. Ovo o čemu pričam po forumima, naučio sam silom prilika, trebalo mi je da rešim neke tadašnje profesionalne probleme u svom polju – građevinarstvu. Valjda su inženjeri takva sorta, da uvek moraju da znaju ne samo šta treba da se radi, nego i zašto je to tako i može li to bolje i efikasnije. Za prve pokušaje bio je dovoljan i FORTRAN, pa onda BASIC u raznim varijantama, pa Dbase i Clipper. Onda je došao Windows, pa Access i na kraju SQL, generalno, a konkretno MS SQL. Jedno kratko vreme život je bio lep. Dok se nije pojavila Objektno orijentisana priča i sve što uz to ide, UML, četiri amigosa, ćuse case, klase i Bog te pita šta još. I programeri su prestali da uče relacionu teoriju i SQL. Barem na ovoj strani Atlantika. Ne potpuno, ali se sve svelo na nekoliko stranica u knjizi o recimo C#, onako usput. I tako su ljudi svašta i naučili, onako usput. Naravno, slika na terenu počinje da se menja, na gore. Ono što je veoma jednostavno uraditi u SQL-u, radi se proceduralno, pišu se funkcije, klase i metodi. Ne želimo naravno špageti kod, sve je lepo i strukturno i objektno 🙂 I uglavnom užasno nefleksibilno. Pratimo specifikaciju doslovno, nema prostora za mrdanje levo ili desno. Posledica – za svaku, pa i najmanju izmenu, mora da se menja kod.

Iz ovoga je proizišla nova kategorija – nikada završeni programi, to jest završeni ali sa veoma kratkim vekom trajanja – do prve izmene. Ili po naški, “drži bure vodu dok majstori odu”. Što je najtužnije u celoj priči, razlog nije premalo znanja. Naprotiv, razlog za ovakvo stanje je previše znanja. Programeri su postali veoma dobri u onome što rade – pišu kod.

Onaj ko brzo piše kod, ne može da shvati zašto bi koristio SELECT … GROUP BY kad je njemu očas posla da otvori ADO rekordset, definiše konekcije, ODBC source i sve ostalo, deklariše nekoliko varijabli, protrči par puta kroz rekordset. DO WHILE je čarobna struktura, uživanje je pisati kod koji koristi petlje 🙂

 Pošto rezultat treba mom šefu, onda je mali problem kako to predstaviti. Ništa lakše, napisaćemo .NET aplikacijicu, koja će to da prikaže. Ali nama to treba samo jednom, to je više ad-hoc. O, pa upotrebimo SQL Report Services, napravimo report, postavimo link, damo šefu userid i password i eto mu reporta. Da, ali zašto onda ADO? Nema problema, napisaćemo stored proceduru, sa temp tabelom unutra, pa ćemo odatle da pošaljemo podatke u Report Services. Dobro, ali smo sad sve podigli na nivo interneta, Reporting Services traži bar intranet. Zašto nam sve to treba? O, pa zbog skalabilnosti. Ali meni treba ad-hoc izveštaj, za tačno jednog korisnika. O, pa mi uvek mislimo na budućnost i moguća proširenja sistema (kao da će biti dvesta šefova širom kontinenta koliko iduće nedelje :-).

Dobro, a šta ako šef zatraži neke nove kolone u izveštaju? Ništa zato, samo nam javite par dana ranije šta vam treba, mislim dajte nam specifikaciju i mi ćemo to odraditi, tačno po specifikaciji, ako imamo raspoložive programere u tom mometu. Pa šta vam rade programeri ako nisu raspoloživi? Pa prepravljaju kod pošto vi svaki čas menjate specifikacije.

Verovali ili ne ovo je bila priča iz stvarnog života. A sve što nam je trebalo je bio najprostiji SELECT.. GROUP BY sa možda Cut-Paste u Excel. Znanje i mudrost su očigledno dve različite kategorije.

Kao što rekoh, inženjeri su takva sorta da uvek moraju da znaju ne samo šta treba da se radi, nego i zašto je to tako i može li to bolje i efikasnije. Pitam se, pitam, mora li sve ovako ili može efikasnije  🙂


“Used by”: Pretražite svoj source code

Thursday, 08.11.2007 – Dejan

Često se ukaže potreba da provjerimo, gdje se u našem “source code-u” koristi neka tabela, paket, procedura i sl.

Mnogi IDE alati (npr. TOAD i PL/SQL Developer) mogu to vizuelno da prikažu, kada odaberete neki objekt i onda kliknete na “Used by”. Time dobijate listu objekata (objekat može biti neka procedura, funkcija, paket, trigger, view i td.) u kojima se koristi traženi objekat.

Ukoliko nemate pri ruci neki takav alat, onda možete jednostavno jednim SQL upitom saznati, gdje se šta koristi ili da jednostavno pretražite scoj “source code”:

SELECT * 
FROM user_source s 
WHERE UPPER(s.text) LIKE '%IME\_NEKE\_TABELE%' ESCAPE '\'; 

SELECT * 
FROM user_source s 
WHERE UPPER(s.text) LIKE '%MOJA\_USKLADISTENA\_PROCEDURA%' ESCAPE '\';

ORA-00600: internal error code, arguments: [pxTmpAlo_pkey]

Wednesday, 07.11.2007 – Dejan

Ukoliko koristite višeprocesorske servere, Real Application Cluster i/ili paralelizovane upite nad ogromnim tabelama, može se dogoditi da dobijete gorenavedenu grešku, npr.:
ORA-00600: internal error code, arguments: [pxTmpAlo_pkey], [2], [3], [], [], [], [], []

onda podesite parametar _slave_mapping_enabled na false:

alter system set "_slave_mapping_enabled"=false scope=both sid='*';

Edit (12.11.2007): Primijetio sam da se ovo dešava sa tabelama, koje su kreirane sa opcijom PARALLEL (DEGREE 2) . Kada prebacim te tabele u NOPARALLEL režim, onda se gorenavedena greška više ne pojavljuje. Inače, ova greška je riješena u patchu 10.2.0.4 i u verziji 11g.


Stanje na tržištu baza podataka

Wednesday, 07.11.2007 – Dejan

U okviru predavanja na HROUG konferenciji ove godine u Rovinju, gdin. Zoran Jovanović je napisao opširan tekst o stanju na tržištu upravljačkih sistema baza podataka, tj. o stanju na tržištu baza podataka.

Možete pročitati usporedne informacije o Oracleu, Microsoftu, IBM i drugim ponuđačima baza podataka, kao i mnoge druge interesantne novosti i informacije.


Kupovina TOAD for Oracle Professional

Wednesday, 07.11.2007 – Dejan

Zaposlili smo u firmi još nekoliko Oracle programera, pa smo povodom toga odlučili da kupimo još 3 nove licence za “TOAD for Oracle Professional”.

Pošaljem ja E-Mail poruku na službenu adresu i pitam šta sve dobijamo uz tu licencu, da li imamo pravo na besplatni upgrade, support i sl.
Idući dan stiže meni odgovor od jednog njihovog prodavca, da dobijam support, besplatni upgrade i da će mi čak spustiti cijenu za 10%!!!

Ja se obradovao, kontam to je 300 EUR uštede…

Ali prerano sam se obradovao. Naime, na njihovom sajtu (quest.com) stoji cijena od USD $ 1,465 za jednu licencu, što je pretvoreno u evre malo iznad 1 000 EUR. On meni poslao ponudu sa “sniženom” cijenom od “samo” 1330 EUR po licenci !? Kontam ja da se nije zeznuo, nazovem ga, ali se nije zeznuo. Izgleda da oni kurs USD->EUR još uvijek računaju po nekom starom kursu iz prošle godine ili ko zna kad, pa sam mu ja lijepo objasnio da će me jeftinije izaći, ako kupim direktno online.

Pokušao on meni nešto da petlja, kao to su cijene samo za Ameriku, pa onda da cijene nisu ažurirane, ali se nisam dao smesti. I kad je vidio čovjek da me ne može preveslati tako lako, pristao je da mi pošalje licence po online cijeni uz još neke bonus stvari. Super.

Sa par razmjenjenih E-Mail poruka i par telefonskih poziva,  uštedio sam nekoliko stotina EUR.

Mada, mogao sam možda odmah kupiti online, da se ne bakćem direktno sa prodavačima. 😀