Activating/deactivating trace

2 decembrī, 2023

I’ve lost my previous English site but some of the notes although more than 15 years old are still relevant. Soooooooo they will be here.

 

ALTER SESSION SET max_dump_file_size = unlimited;

ALTER SESSION SET tracefile_identifier = ‘blabla’;

ALTER SESSION SET timed_statistics = true;

 

ALTER SESSION SET EVENTS ‘10046 trace name context forever, level 12’;

ALTER SESSION SET EVENTS ‘10046 trace name context off’;

 

exec dbms_system.ksdddt – prints out wall clock value

 

Parsing in cursor part

 

len SQL text length

dep recursive depth

uid user id calling the statement

oct oracle command type no OCI

lid user id owning the statement e.g. package

tim in 9i and above in microseconds, in < 9i in centiseconds

hv statemend id

ad library cache address assigned in V$SQL

 

Database calls

PARSE, EXEC, FETCH (ERROR, UNMAP, ERROR UNMAP) parts:

 

c CPU time consumed by process, >= 9i micro, < 9i cs

e amount of wall time that elapsed during the calll

p physical reds

cr consistent reads (may cause another reads from disk)

cu current reads (read of the current content of a block)

mis library cache miss (each causes hard parse)

r number of rows returned

dep recursive depth of cursor

og optimizer goal (1–all_rows, 2–first_rows, 3-rule, 4-choose)

tim see above

 

WAIT part

 

nam name

ela >= 9i in micro, < 9i in cs

p1, p2, p3 SELECT name, parameter1, parameter2, parameter3

FROM v$event_name

ORDER BY name;

 

WAITS are before database calls (PARSE, EXEC, FETCH)

 

BINDS part

 

dty data type (OCI) Here you can find actual values for it

avl length in bytes of bind variable

value value

mxl Maximum possible length for this datatype

mal, scl, pre, oacflg, oacflg2, size, offset, bfp, bln, flg
For explanation of these abbreviations see Metalink Note 39817.1

 

events 10032, 10033 for sorting, 10104 for hash joins

ROW source operations STAT (only when cursor is closed):

 

id unique id within STAT line set

cnt number of rows returned

pid parent id

pos whatever

obj object id of the row source op. If the op executes upon a db object

op the name of RS operation

cr consistent mode reads

r number of Oracle blocks read with OSread calls

w number of Oracle blocks write with OSread calls

tim elapsed duration in micro

parent stats include children statistics

 

XCTEND for commits and rollbacks

 

rlbk 1 – if rollback, 0 – otherwise

rd_only 1 if transaction changed no data in db

 

 

Levels 3210

0 – APPNAME, parsing in curs, PARSE, EXEC, FETCH, STAT, XCTEND

1 – nothing more

2 – binds (4)

3 – waits (8, 12)

 

Activating trace for another session

 

sys.dbms_system.set_bool_param_in_session(

:sid, :serial, ‘timed_statistics’, true);

sys.dbms_system.set_int_param_in_session(

:sid, :serial, ‘max_dump_file_size’, 2147483647);

sys.dbms_system.set_ev(:sid, :serial, 10046, 12, ‘’);

sys.dbms_system.set_ev(:sid, :serial, 10046, 0, ‘’);

 

Measures

 

~10 K LIOs/sec for each 100MHz for processor

~100 PIOs/sec

High LIO count ~> 10 LIO per non aggregated row per table in FROM clause

 


Saglabātās procedūras

15 februāris, 2011

SQLs, protams, ir laba, spēcīga un spējīga datu apstrādes valoda, tomēr reižu reizēm ar to nepietiek. Tiesa gan pirms ķerties pie kaut kā vairāk noteikti ir jāpārliecinās, ka ar SQL vien nepietiek, atceroties, piemēram, tādas lietas kā grupēšanas, apakšvaicājumus, savienojumusanalītiskās funkcijas, model klauzas u.c. iespējas. Sīkāk par to, kādā kārtībā vajadzētu mēģināt risināt problēmas, rakstīju pagājušoreiz.

Tomēr, ja biznesa loģika un realizējamie algoritmi ir pārāk sarežģīti, tad nākas ķerties pie kaut kā sarežģītāka un ar lielākām iespējām un tās ir iebūvētās (reizēm laikam saka arī iegultās vai barbarisms storētās, no angļu stored) procedūras un funkcijas. Lielāka daļa DBVS (tālāk būs viens un tas pats piemērs Oracle, SQL Server un MySQL), kas cenšas attīstīt un piedāvāt lielāku funkcionalitāti, ir izveidojušas vai paņēmušas jau esošu programmēšanas valodu, kurā tad šīs procedūras un funkcijas var veidot. Būtiski ir tas, ka šīs procedurālās vienības tiek glabātas datubāzē. Tā ir pirmā un pati būtiskākā atšķirība, kas tās atšķir no jebkuras citas procedūras vai funkcijas, kas izveidotas un parasti atrodas uz klienta (klienta-servera sistēmā) vai lietojumprogrammu servera (application server) trīs līmeņu sistēmā. Tas faktiski arī nosaka šo procedurālo vienību labās un sliktās īpašības salīdzinājumā ar parastām procedūrām un funkcijām.

Procedūru un funkciju lietošanas mehānisms ir šāds:

  1. Vispirms procedūra vai funkcija tiek izveidota, saglabāta un nokompilēta datubāzē. To dara līdzīgi kā ar jebkuru citu datubāzes objektu, izmantojot CREATE PROCEDURE vai CREATE FUNCTION SQL DDL teikumu. Šai brīdī procedūra vai funkcija tiek tikai izveidota, tā vēl netiek pildīta. Šai brīdī parasti DBVS veic arī zināmas pārbaudes, vai procedūra/funkcija ir korekta sintaktiski, vai ir pieejami tajā minētie objekti u.c.
  2. Pēc tam, kad procedūra vai funkcija ir veiksmīgi izveidota un bez kļūdām nokompilēta, to var izpildīt (execute). Katrā DBVS to dara mazliet atsķirīgi, bet šis ir tas brīdis, kad visa procedūrā vai funkcijā iekodētā loģika tiešām tiek izpildīta un iegūts (cerams vēlamais 😉 ) rezultāts.

Tālāk neliels iebūvētās procedūras piemērs visās trīs tradicionāli manis aprunātajās DBVS. Lasīt pārējo šī ieraksta daļu »


Brainbench testi

11 februāris, 2011

Nesen kārtējo reizi uzpeldēja saruna par testiem un sertifikātiem, konkrēti par Brainbench testiem. Visu testu skaits viņiem ir diezgan iespaidīgs, šobrīd ap 700. Tad nu lūk ieskatījos viņu mājaslapā un izrādās, ka bezmaksas testu sarakstā ir veseli divi, kas attiecas uz datubāzēm:

Tātad, ja kādam ir brīvs laiks un vēlme vai nu noskaidrot savu zināšanu līmeni, vai iepazīties, kas tad ar šo tēmu tiek saprasts un ko tur būtu vēlams zināt, ir visas iespējas pamēģināt testu. Jāatzīst, ka es neizturēju un arī mazliet paniekojos. Neiespringstot RDBMS testā (jo tur nav īsti kur iespringt, vai nu zinām jautājumu, vai nē) un krietni vairāk iespringstot SQL pamatlietu testā (jo tur jautājumi ir diezgan pretīgi un traki jārēķina where klauzas, piemēram) dabūju diezgan pieklājīgus rezultātus abos. Ja godīgi, nezinu vai jebkādam kādreiz šie testi ir palīdzējuši iegūt darbu vai lielāku algu, man personīgi nē, varbūt Jums ir cita pieredze? Vienīgo jēgu es tur varu saskatīt tādu, ka šādi testi pašam sev ļauj noskaidrot vājās vietas un dod priekšstatu par to, kas šai tēmā varētu tikt prasīts.

Tagad mazliet par vēsturi. Tais senajās dienās, kad Brainbench (sākumā vēl Tekmetrics) dzima, cik atceros, visi testi bija bezmaksas, acīmredzot, lai savāktu auditoriju un iebarotu potenciālos klientus. Kas vēl neticamāk, toreiz šie par velti arī sūtīja sertifikātus uz mājām, man vēl daži pat ir saglabājušies, viens piemēram izskatās šādi:

Tekmetrics (tagad Brainbench) sertifikāts

Tekmetrics (tagad Brainbench) sertifikāts

Tagad glabājas mājās kā vēstures liecība 🙂

Šodien gan diemžēl nekas tāds vairs par velti nenotiek, ja neskaita dažus testus, tad par visu pārējo ir jāmaksā, pat elektroniski atsūtītu sertifikātu. Vēl tomēr neticamā kārtā par velti var lejuplādēt logo, ko, piemēram, var lepni uzspraust savā weblapā 😀


Darbu secība

19 janvāris, 2011

Šis ir simtais ieraksts šai emuārā. Ievērojot šo apaļumu, gribējās rakstu mazliet īpašu un tad man ienāca prātā tradicionālā darbu secība, ko es itin bieži, piemēram, sevis lasītajos kursos mēdzu popularizēt. Atzīstos, ka neesmu šīs secības izgudrotājs, oriģināls ir pieejams šai grāmatā, es to tikai mazliet vispārināju un adaptēju 🙂 Tātad, izstrādājot programmatūru datubāzēm var izmantot šādu pieeju:

  • Labāk nedarīt neko;
  • Ja tomēr jādara, tad izmantojiet SQL;
  • Ja nav iespējams paveikt ar tīru SQL, tad izmantojiet iebūvēto programmēšanas valodu (PL/SQL –  Oraclē, Transact SQL – SQL Serverī utt.)
  • Ja to nav iespējams paveikt ar iebūvēto programmēšanas valodu, tad lietojiet kādu citu programmēšanas valodu – Java, C utt.
  • Ja to nav iespējams paveikt ar Java vai C (vai kādu citu izvēlētu programmēšanas valodu), tad stingri pārdomājiet, vai neķerties pie kāda cita darba.

Iespējams, ka daļai lasītāju šī pieeja šķiet mazliet provokatīva. Varbūt pat viņiem ir mazliet taisnība 😉 Tomēr tikai mazliet. Tagad daži komentāri par katru no punktiem. Lasīt pārējo šī ieraksta daļu »


Pirmo N ierakstu atlase

13 oktobrī, 2009

Atlasīt pirmos N (2, 3, 5, 10, 20, 100 utt.) ierakstus ir diezgan izplatīta prasība. Atlasīt N lielākos, N mazākos, N jaunākos utt. Angliski to parasti sauc kā Top N analysis vai Top N Query. Savukārt (parasti webiskās aplikācijās) mēdz būt vēl viena diezgan tipiska prasība – lapošana (pagination) – ierakstu atlase pa porcijām. Šīs ir tās lietas, kur datu bāzu vadības sistēmu atšķirības spīd visā savā spožumā. Tikai relatīvi pēdējā laikā izmantojot analītiskās funkcijas vismaz dažās DBVS var mēģināt izlīdzēties ar vienu un to pašu SQL teikumu pirmo N ierakstu atlasē un lapošanā. Kā jau vienmēr esmu mēģinājis uzsvērt, tas gan nebūtu jāuzskata par milzīgu trūkumu, jo arī, iekāpjot cita ražotāja automašīnā, Jūs negaidat, ka ātruma pārslēgs slēgsies precīzi tāpat ka iepriekšējā. Truli laužot to pierastajā pozīcijā, Jūs varat iegūt tikai salauztu mašīnu un ar datubāzēm, protams, ir līdzīgi. Tiktāl ievads, bet tagad pēc kārtas par Oracle, MySQL, SQL Server un analītisko funkciju universālo risinājumu.

Lasīt pārējo šī ieraksta daļu »