Mar 222015
 

Ahoj, dneska velice krátký post na pár PDF a přednášky, které mi v posledním dejmetomu měsíci zaujaly a myslím, že stojí za to si je přečíst. Jinak ale určitě budu pokračovat v načatém tracování CBO a jeho eventy 10053, případně 10054. A rozhodně s tím hnedtak nepřestanu ;) – v rámci možností omezeného času - příští víkend se jede na koncert Wintersun  do Vídně (áách).  Navíc vzhledem ke kráse naší vyučující pondělní švédštiny se musím pečlivě připravovat a psát domácí úkoly a v průběhu semestru ladit technologie jak jí ve švédštině pozvat na večeři..

Slajdy o tracování eventů. Koukal jsem, že ke všem věcem které jdou tracovat (ora-10000 až ora-10999 + nějaké další) se dotyčný dostal také přes brutal force na SQLERRM. Narozdíl od mého psa -  ne však náhodou ;) . S tím, že se mu zalíbily tyto eventy:

• 10046 (Millsap )Enable SQL statement timing
• 10053 CBO Enable optimizer trace
• 10079 Trace data sent/received via SQL*Net
• 10235 Check memory manager internal structures
• 10032 Dump sort statistics
• 10231 Skip corrupted blocks on full table scan
• 10015 Dump undo segment headers
• 10013 Monitor transaction recovery

Mě se jich líbí teda víc, například pro CBO jsou tam dva – s tim, že jeden je pro paralelní – 100054. A postrádám tam tracování deadlocku, což je užitečné (ačkoliv v případě ora-0060 oracle vybleje .trc soubor tak či tak). A hashjoinování, což je taky krásný trace report.

Dokument, který vysvětluje jak je to s Oracle a histogramama při joinování. Respektive jak je to s odhadem selectivty joinů. Nutno upozornit, že dotyčný dokument je docela starý a tudíš to na nověších verzích Oracle bude vypadat nejspíše úplně jinak. Co je ale super, věnuje se zkoseným datům. A na začátku je hned velice zajímavý vzorec na odhad cardinality, pokud nejsou histrogramy a množiny si matchnou na hranicích – “princip inkluze“:

join cardinality:=cardinality(A) * cardinality(B) * (1/max(ndv(a),ndv(b)))

A můj další tip je na přednášku/slajdy o latech, mutex apod.

A když už jsme u těch latch/mutexů tak tento dokument je trošku více specifičtější – také mutexy, ale tentokrát jejich chování na child/parent kurzorech. Hodně se věnuje zámkům na parent cursoru pokud je tam nutné hodit ještě nějaký child cursor pod parenta. Moc pěkné.

A pokud už snad máte dost všech těch vzorců a možností a view a mutexů a KGX, odhadů cardinality na HbH pro eq-join, tak něco hodně upovídaného na odlehčenou - edice.

Tak to by bylo všechno, a jinak pro kolegu, pravidlo palce: AUTO_SAMPLE_SIZE je cca o 2% méně přesné než estimate_percent = 100, ale za to 10x rychlejší. Note: neplatí pro extrémně zkosená data a platí pro 11g+.

Hébičkám a Winterusun zdar!

 Posted by at 17:37
Nov 292013
 

Tak si projíždím APEX a narazil jsem tam na funkcionalitu, která by se mi vcelku líbila v PL/SQL. Konkrétně vytvoření API package nad tabulkou (procedury na update, insert). Není problém si na to napsat script či ho někde sehnat, nicméně když už jsem to tam viděl.. tak mi napadlo, že by bylo fajn to umět provolat. Když jsem se podíval do packages pod uživatelem APEX, tak patrně zodpovědný za tuto funkcionalitu je package wwv_flow_generate_api. Který však obsahuje pouze jednu funkci (create_api), která rozhodně negeneruje kód, to byla ale jen specifikace balíku wwv_flow_generate_api. Když ovšem utilitou na unwrap kódu vezmu body, potkávám funkci, která se mi líbí:

FUNCTION GENERATE_CODE(P_APP_NAME VARCHAR2, P_TABLE_LIST TABLE_LIST_TYPE, P_OWNER VARCHAR2, P_TYPE VARCHAR2) RETURN SYS.DBMS_SQL.VARCHAR2A IS..

Čímž to svým způsobem přestává být zajímavé.  Ale zagooglil jsem jak vlastně takový unwrap tool funguje a narazil jsem na úžasnou přednášku, která se tím zabývá a to tak, že vcelku podrobně. Navíc odhaluje jak vlastně taková kompilace funguje, včetně toho kam se to ukládá do systémových tabulek Oracle atd.

Autor: Pete Finnigan
Zdroj: http://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Finnigan.pdf
Download: BH-US-06-Finnigan

Výše uvedené PDF má na mé stupnici pejska 10 z 10 možných hébiček ;)

 Posted by at 06:22
Sep 102013
 

Tak mi zase od SkillBuilders prišla pozvánka na další webináře a mimo těch placených (1500$-3500$) je tam i jeden neplacený – Oracle 12c Security Transparent Sensitive Data Protection. Hodinový webinář a dvě základní témata jsou:

  • VPD – virtual private database, nějaký krátký článek na blogu tu mám zde. Mimochodem VPD je součástí OCP certifikace.
  • Data Redaction – o tom tu nemám zatím nic :(

Kde:  SkillBuilders, id=93

Kdy: 18.9.2012 od 19:00 do 20:00

 

 Posted by at 16:46
Jul 232013
 

Není to tak dlouho, co jsem tu měl tip na webinář o novinkách v 12c na stránce Skillbuilders.com. Probíralo se pochopitelně jen pár novinek dvanáctky – nejzajímavější byl asi hned v úvodu nový parametr THREAD_EXECUTION , který umožní spouštění background procesů jako thready místo toho, aby byly spuštěny jako proces na úrovni OS. Na Unix/Linux, na Windows to tak fungovalo již dříve a zde se žádná změna nekoná. Další zajímavou ukázkou byl přesun datových souborů z Oracle v ONLINE módu.

Kolega, který mi na seminář upozornil mi doporučil se na Skillbuilders.com registrovat, protože se tam čas objeví nějaký free webinář. A měl pravdu, dnes mi přišly dva linky na free semináře, tedy:

25.července od 19:00 do 20:00 - APEX Listener:  Options and Deployment

a

30.července od 19:00 do 20:00 Oracle Advanced SQL Seminar Series: Regular Expressions

U obou je nutné se registrovat/přihlásit. Pro mě bude určitě zajímavější APEX -  regulerní výrazy jsou vcelku používaná featura, takže je člověk tak nějak zná a podle agendy se nebude mluvit o MATCH_RECOGNIZE , což jsem objevil jako jedinou větší featuru týkajících se regulerních výrazů v nové verzi DB ;)

 Posted by at 21:49
Jul 012013
 

Před pár dny jsem doporučoval registrovat se na free seminář Oracle o Cloudu, který má proběhnout od 9ti ve středu 3. července v Praze na Chodově. Dnes link na ZÍTŘEJŠÍ (tzn. 2. července od 19:00 do 20:00)  free online seminář na téma novinek dvanáctky. Registrovat je možné se zde:

https://www2.gotomeeting.com/register/941661322

Link mi poslal jeden z mých známých a doporučil k němu i registrovat se na http://skillbuilders.com/.  Pro registrované jsou tam často online free semináře na téma APEX či PL/SQL, které vede i S. Feuerstein.

 Posted by at 08:37
Jun 122013
 

Jeden horký tip na seminář přímo od Oracle v Praze na Chodově. Dne 3.7.2013 bude Oracle pořádat seminář na téma Cloud Computing, který je zdarma. Počet míst je omezen, takže je nutné se registrovat, zde:

http://www.oracle.com/us/dm/196708-emeafm13047780mpp019-oem-1957275.html

A chovat se slušně a odregistrovat se v případě, že nebude moci. Ať jsou tam místa pro ostatní. Je to velice podobné snídaním, které kdys (nebo snad ještě?) Oracle pořádal jako zdarma přednášky/semináře, typicky na téma databáze nebo nové produkty.

středa, 3. červenec 2013, 08:30 – 11:10,V Parku 2294/4, Praha 4
Info ze stránek Oracle:

  • Podíváme se, jak vám může Cloud computing pomoci realizovat požadované cíle
    v obchodní i IT strategii.
  • Jakým způsobem začít budovat strategii v oblasti Cloud computing služeb.
  • Způsob implementace Cloud computingu s využitím architektonických a
    technologických vzorů.
  • Co všechno vám v této oblasti může nabídnout společnost Oracle.
  • Jak vám Oracle může pomoci s každým aspektem plánování, nasazení, monitorování a správy Cloud prostředí.

Uvidíme se tam a nezapomeňte se oholit a pořádně obléci – Oracle měl v recepci vždycky luxusní samičky ;)

 Posted by at 19:50
May 252013
 

Dnes tip na jedno úžasné view o kterém zrovna dlouho nevím – V$SEGMENT_STATISTICS. Obecně v Oracle platí, že v tabulkách a pohledech lze nalézt téměř vše s menšíma výjimkami - například binding proměnnou v projection selectu jinak než trace eventem nedohledáme (na rozdíl od binding proměnných v predikátech), což nám třeba kdysi vadilo na Siebelu, kdy tagoval sql, které pral do databáze select xx ,’zde’ from yyy;  Ale zpět k pohledu V$SEGMENT_STATISTICS, jak název napovídá je tam statistika segmentů.

Dokuementace: http://docs.oracle.com/cd/E11882_01/server.112/e10820/dynviews_3003.htm

Takže nějaká ukázka:

create table segment_test as

select rpad('A'||ROWNUM||'A',500,ROWNUM) as col from dual connect by level<1000;

A rovnou pohled V$SEGMENT_STATISTICS:

Segment statistic

V$SEGMENT_STATISTICS

A nyní spočet statistik, jak naše tabulka vypadá (ok, jsem hulvát, ale dbms_stats.gather_table.. je strašně dlouhé ;)

analyze table SEGMENT_TEST compute statistics;

A při pohledu do all_tables je vidět, že tabulka má 72 datových bloků, což dává smysl.  To jsou statistiky, které vznikly při CTASu. Takže proč to nezkusit znovu:

sqlplus / as sysdba

shutdown immediate;

startup;

Nyní V$SEGMENT_STATISTICS pro novou tabulku nevrací nic (ani prázdné řádky s nulou). Takže znovu s tím nejjednodušším:

select * from segment_test where rowid='AAATAAAABAAAVFSAAF';

A nyní pohled v V$SEGMENT_STATISTICS:

V$SEGMENT_STATISTICS - po selectu přes ROWID

V$SEGMENT_STATISTICS - po selectu přes ROWID

Jeden přístup do segmentu, jedno čtení po selectu s jedním rowid v podmínce. Tedy funguje !

P.S. Při pohledu na mé rowid je asi jasné, že jsem doma trošku prase, ale psst ;)

 Posted by at 10:04