Traženje elementa SQL_ID za upit servisa Oracle Analytics

Nakon podešavanja upita za Oracle Analytics i razmatranja podatkovnog modela, dizajna izvješća, dizajna dashboarda te mrežne konfiguracije, ponekad ćete trebati istražiti bazu podataka.

V$SQL tablica

Za istraživanja baze podataka, morat ćete znati SQL_ID SQL naredbe kako biste mogli pratiti specifične upite uz Active Session History (ASH), Automatic Workload Repository (AWR), i Oracle SQLTXPLAIN (SQLT).

Ova tema pokazuje kako pronaći SQL_ID pretraživanjem tablica za praćenje upotrebe u servisu Oracle Analytics i sistemske tablice Oracle baze podataka V$SQL (ili GV$SQL za RAC bazu podataka).

V$SQL tablica je sistemska tablica Oracle baze podataka koja prati statistiku pojedinačnih SQL upita. Postoji jedan redak u tablici za svaku pokrenutu SQL naredbu, pri čemu redak SQL_ID jedinstveno identificira svaki redak. Uz SQL_ID možete pratiti navedenu SQL naredbu kroz Oracle bazu podataka.

U V$SQL tablici (ili GV$SQL za RAC bazu podataka) pronaći ćete brojne korisne informacije o upitima.

Tablice za praćenje upotrebe

Tablice za praćenje upotrebe ne prate izravno SQL_ID, ali možete jednostavno pratiti SQL_ID do tablice V$SQL (ili GV$SQL za RAC bazu podataka).

Nakon što omogućite praćenje upotrebe u servisu Oracle Analytics, svi upiti pratit će se u dvije tablice:

  • S_NQ_ACCT: sadrži logičke upite
  • S_NQ_DB_ACCT: sadrži fizičke upite

Logički upiti bilježe se u tablici logičkih upita, a fizički upiti (ili upiti koji proizlaze iz logičkog upita) bilježe se u tablici s fizičkim upitima.

Logičke i fizičke tablice možete udružiti u stupcu s ID-om fizičkog upita. Stupac s ID-om logičkog upita u logičkoj tablici je ID, a u fizičkoj tablici je LOGICAL_QUERY_ID.

Ključ s pomoću kojega ćete pronaći SQL_ID je stupac PHYSICAL_HASH_ID u fizičkoj tablici. Vrijednost PHYSICAL_HASH_ID zapisana je i u V$SQL tablici (ili GV$SQL tablici) u stupcu ACTION.

Oracle BI Server izračunava šifru raspršivanja iz teksta logičkog SQL upita i tekst fizičkih SQL upita. Fizička SQL šifra raspršivanja bilo kojeg SQL upita koji se izvode s instance Oracle BI Server, zapisuje se u stupcu ACTION, pod V$SQL tablicom. Dodatne informacije potražite u poglavlju Pridruživanje zapisa S_NQ_ACCT zapisniku BI upita.

Više informacija o raznim stupcima za praćenje upotrebe potražite u odjeljcima Praćenje upotrebe i Objašnjenje tablica za praćenje upotrebe.

Postavljanje

Sad kada znate gdje pronaći PHYSICAL_HASH_ID, možete napisati SQL naredbu koja će korelirati s SQL upitom koji se izvodi u bazi podataka, sa specifičnom analizom koja se izvodi u servisu Oracle Analytics.

Ako se tablice za praćenje upotrebe nalaze u istoj instanci baze podataka kao i spremište podataka, možete napisati jedan upit kako biste pronašli SQL_ID.

Ako se tablice za praćenje upotrebe i vaše spremište podataka nalaze u različitim instancama Oracle baze podataka, morat ćete pokrenuti dva upita. Prvo pokrenite upit kojim ćete povući PHYSICAL_HASH_ID upita koji želite istražiti iz tablica za praćenje upotrebe. Zatim povucite SQL_ID koji se nalazi u V$SQL tablici s pomoću vrijednosti PHYSICAL_HASH_ID kako biste filtrirali stupac ACTION.

Primjer 1

U ovom primjeru, pretpostavimo kako su tablice za praćenje upotrebe i spremište podataka kolocirane. U upitu možete upotrebljavati bilo koje ili sve stupce iz tablica za praćenje upotrebe i V$SQL, ali u ovom primjeru birajte sljedeći podskup:

select

o.sql_id,

to_char(l.start_ts, 'YYYY-MM-DD HH24:MI:SS'),

l.id as l_id,

p.logical_query_id,

l.hash_id,

l.saw_src_path,

l.query_src_cd,

l.success_flg,

l.num_db_query,

l.query_text,

p.query_text,

o.sql_text,

p.physical_hash_id,

o.action

from

usage_tracking.s_nq_acct l,

usage_tracking.s_nq_db_acct p,

v$sql o

where

l.id = p.logical_query_id and o.action = p.physical_hash_id and l.start_dt > trunc(sysdate - 1) and l.end_dt < trunc(sysdate)

order by l.start_ts, l.id, l.hash_id, p.physical_hash_id, o.sql_id;

Primjer 2

U ovom primjeru, pretpostavimo kako su tablice za praćenje upotrebe i spremište podataka locirani u različitim Oracle bazama podataka.

Prvo napišite upit za tablice za praćenje upotrebe kako biste dobili PHYSICAL_HASH_ID:

select

to_char(l.start_ts, 'YYYY-MM-DD HH24:MI:SS'),

l.id as l_id,

p.logical_query_id,

l.hash_id,

l.saw_src_path,

l.query_src_cd,

l.success_flg,

l.num_db_query,

l.query_text,

p.query_text,

p.physical_hash_id

from

usage_tracking.s_nq_acct l,

usage_tracking.s_nq_db_acct p

where

l.id = p.logical_query_id and l.start_dt > trunc(sysdate - 1) and l.end_dt < trunc(sysdate)

order by l.start_ts, l.id,l.hash_id, p.physical_hash_id;

Zatim napišite upit za V$SQL tablicu kako biste dobili SQL_ID upotrebljavajući vrijednosti PHYSICAL_HASH_ID kao filtar:

select

o.action,

o.sql_id,

o.sql_text

from

v$sql o

where

o.action = ‘<physical_hash_id>’

order by o.sql_id;

Ako imate RAC bazu podataka, umjesto tablice V$SQL upotrijebite GV$SQL kako biste dobili SQL_ID.

select

o.action,

o.sql_id,

o.sql_text

from

gv$sql o

where

o.action = '<physical_hash_id>'

order by o.sql_id;

Ta metoda neće funkcionirati ako rješavate probleme s blokovima za inicijalizaciju jer tablica za praćenje upotrebe bloka za inicijalizaciju (S_NQ_INITBLOCK) ne sadrži ID fizičkog raspršivanja.

Primjer 3

U tom primjeru upotrebljavate predmetno područje A - Ogledne prodaje te odabirete svega nekoliko stupaca iz tablica za praćenje upotrebe.

U području A - Ogledne prodaje pokrenite sljedeći upit:

[2022-02-04T15:11:17.629+00:00] [OBIS] [TRACE:2] [USER-0] [] [ecid: e49b96a8-33c4-4ba7-a877-e564d207eca1-00242531,0:1:38:3] [sik: bootstrap] [tid: dd1bc700] [messageId: USER-0] [requestid: 33e30020] [sessionid: 33e30000] [username: oacadmin] ############################################## [[

-------------------- SQL Request, logical request hash:

cee7ec94

SET VARIABLE QUERY_SRC_CD='Report';SELECT

   0 s_0,

   "A - Sample Sales"."Offices"."D1  Office" s_1,

   "A - Sample Sales"."Base Facts"."10- Variable Costs" s_2,

   "A - Sample Sales"."Base Facts"."11- Fixed Costs" s_3

FROM "A - Sample Sales"

ORDER BY 2 ASC NULLS LAST

FETCH FIRST 125001 ROWS ONLY

]]

Nakon što odaberete start_ts, id, hash_id, query_src_cd i query_text iz logičke tablice za praćenje upotrebe, dobit ćete vrijednost za ID E841EBB79217270A660CDD3EFB5D986C.

Slijedi opis za GUID-5FA7BA53-6767-4839-9341-A6AC0AACDFEB-default.jpg
.jpg

Zatim odaberite logical_query_id, hash_id, physical_hash_id i query_text iz fizičke tablice za praćenje upotrebe u kojoj LOGICAL_QUERY_ID iznosi E841EBB79217270A660CDD3EFB5D986C.

Slijedi opis za GUID-6842B138-0FD5-4DA9-A092-B423EB7459C2-default.jpg
.jpg

Kad pogledate zapisnik Upravljanje sesijama, iz logičkog upita proizlazi SQL kôd koji se nalazi u stupcu QUERY_TEXT:

[2022-02-04T15:11:17.637+00:00] [OBIS] [TRACE:2] [USER-18] [] [ecid: e49b96a8-33c4-4ba7-a877-e564d207eca1-00242531,0:1:38:5] [sik: bootstrap] [tid: dd1bc700] [messageId: USER-18] [requestid: 33e30020] [sessionid: 33e30000] [username: oacadmin] -------------------- Sending query to database named 01 - Sample App Data (ORCL) (id: <<62275>>), client type Oracle Call Interface (OCI), connection pool named Sample Relational Connection, logical request hash cee7ec94, physical request hash bd6708b8: [[

WITH

SAWITH0 AS (select sum(T5398.Cost_Fixed) as c1,

     sum(T5398.Cost_Variable) as c2,

     T5257.Office_Dsc as c3,

     T5257.Office_Key as c4

from

     BISAMPLE.SAMP_OFFICES_D T5257 /* D30 Offices */ ,

     BISAMPLE.SAMP_REVENUE_F T5398 /* F10 Billed Rev */

where  ( T5257.Office_Key = T5398.Office_Key )

group by T5257.Office_Dsc, T5257.Office_Key),

SAWITH1 AS (select 0 as c1,

     D1.c3 as c2,

     D1.c2 as c3,

     D1.c1 as c4,

     D1.c4 as c5

from

     SAWITH0 D1)

select D1.c1 as c1, D1.c2 as c2, D1.c3 as c3, D1.c4 as c4 from ( select D1.c1 as c1,

     D1.c2 as c2,

     D1.c3 as c3,

     D1.c4 as c4

from

     SAWITH1 D1

order by c2 ) D1 where rownum <= 125001

]]

Naposljetku odaberite action, sql_id i sql_text iz tablice V$SQL u kojoj Action iznosi bd6708b8.

Slijedi opis za GUID-094521FA-317B-430D-9644-3C3E44D91900-default.jpg
.jpg

Upit iz stupca sql_text isti je SQL kôd koji možete pronaći u fizičkoj tablici za praćenje upotrebe. Ovdje možete vidjeti kako je sql_id predmetnog upita: 1gxhc0acmztwk.

Ako ponovno pokrenete isti upit, logičkoj tablici za praćenje upotrebe dodat će se drugi redak s novim ID-om, ali hash_id bit će isti.

Slijedi opis za GUID-82CD3499-E550-4DD4-8C96-E3DB3CE3232E-default.jpg
.jpg

Slično tome, drugi redak dodat će se fizičkoj tablici za praćenje upotrebe te će imati novi logical_query_id, ali hash_id i physical_hash_id ostat će isti.

Slijedi opis za GUID-BF05E975-45FB-4F40-9AE4-9E40A1124F35-default.jpg
.jpg

Primjer 4

physical_hash_id ponovno će te iskoristiti i ako pokrenete sličan logički upit za predmetno područje koje se temelji na istim logičkim i fizičkim modelima. Npr., ako pokrenete sličan upit za stavku C - Ogledni troškovi:

[2022-02-04T16:10:17.862+00:00] [OBIS] [TRACE:2] [USER-0] [] [ecid: e49b96a8-33c4-4ba7-a877-e564d207eca1-00242ce7,0:1:15:3] [sik: bootstrap] [tid: 58504700] [messageId: USER-0] [requestid: 13c9003c] [sessionid: 13c90000] [username: oacadmin] ############################################## [[

-------------------- SQL Request, logical request hash:

7b5ea9b1

SET VARIABLE QUERY_SRC_CD='Report';SELECT

   0 s_0,

   "C - Sample Costs"."Offices"."D1  Office" s_1,

   "C - Sample Costs"."Base Facts"."10- Variable Costs" s_2,

   "C - Sample Costs"."Base Facts"."11- Fixed Costs" s_3

FROM "C - Sample Costs"

ORDER BY 2 ASC NULLS LAST

FETCH FIRST 125001 ROWS ONLY

]]

Iz tog logičkog upita proizići će isti SQL kôd kao iz upita koji ste pokrenuli za A – Ogledna prodaja:

[2022-02-04T16:10:17.866+00:00] [OBIS] [TRACE:2] [USER-18] [] [ecid: e49b96a8-33c4-4ba7-a877-e564d207eca1-00242ce7,0:1:15:5] [sik: bootstrap] [tid: 58504700] [messageId: USER-18] [requestid: 13c9003c] [sessionid: 13c90000] [username: oacadmin] -------------------- Sending query to database named 01 - Sample App Data (ORCL) (id: <<52912>>), client type Oracle Call Interface (OCI), connection pool named Sample Relational Connection, logical request hash 7b5ea9b1, physical request hash bd6708b8: [[

WITH

SAWITH0 AS (select sum(T5398.Cost_Fixed) as c1,

     sum(T5398.Cost_Variable) as c2,

     T5257.Office_Dsc as c3,

     T5257.Office_Key as c4

from

     BISAMPLE.SAMP_OFFICES_D T5257 /* D30 Offices */ ,

     BISAMPLE.SAMP_REVENUE_F T5398 /* F10 Billed Rev */

where  ( T5257.Office_Key = T5398.Office_Key )

group by T5257.Office_Dsc, T5257.Office_Key),

SAWITH1 AS (select 0 as c1,

     D1.c3 as c2,

     D1.c2 as c3,

     D1.c1 as c4,

     D1.c4 as c5

from

     SAWITH0 D1)

select D1.c1 as c1, D1.c2 as c2, D1.c3 as c3, D1.c4 as c4 from ( select D1.c1 as c1,

     D1.c2 as c2,

     D1.c3 as c3,

     D1.c4 as c4

from

     SAWITH1 D1

order by c2 ) D1 where rownum <= 125001

]]

Prvo upotrijebite logičku tablicu za praćenje upotrebe kako biste pronašli ID. Moći ćete vidjeti kako se logički hash_id razlikuje od upita pokrenutog za A – Ogledna prodaja.

Slijedi opis za GUID-16D78632-88BA-446F-A6D7-496DA5662869-default.jpg
.jpg

U fizičkoj tablici za praćenje upotrebe vidjet ćete kako, premda je logički hash_id različit, physical_hash_id ostaje isti.

Slijedi opis za GUID-91049191-7E76-407D-B15B-A74160942148-default.jpg
.jpg

Primjer 5

U tom primjeru pokrećete iste upite, ali ovaj put uz odabir opcije Osvježi. Obratite pažnju za varijablu OBIS_REFRESH_CACHE=1 koja naznačava osvježavanje. Prema očekivanjima, drugi redak umeće se u logičku tablicu za praćenje upotrebe, a on ima različit logical hash_id.

Slijedi opis za GUID-BFA0DEA8-423A-414C-8BC9-E1B8EA382689-default.jpg
.jpg

Međutim, nakon pretraživanja fizičke tablice za praćenje upotrebe, moći ćete vidjeti kako svi upiti imaju isti physical_hash_id.

Slijedi opis za GUID-D6CC7144-9177-4CDA-B57A-1A4E4A6615A5-default.jpg
.jpg

Budući da sva ta četiri logička upita imaju isti physical_hash_id, moći ćete vidjeti samo jedan zapis u tablici V$SQL za taj upit.

Slijedi opis za GUID-13AE24EE-9C17-48D9-976F-49FF882A5E42-default.jpg
.jpg

Primjer 6

S pomoću iste metode možete rješavati upite za vizualizaciju podataka temeljem predmetnog područja (RPD) ili veze baze podataka. Za veze baze podataka, to uključuje upite i vizualizacije baze podataka za popunjavanje skupova podataka.

Možete odrediti vrstu upita, odnosno, vizualizaciju podataka, skup podataka, analizu, ODBC itd. iz vrijednosti stupca QUERY_SRC_CD. Npr., upiti za vizualizaciju podataka imaju vrijednost Visual Analyzer, upit koji služi za popunjavanje skupa podataka ima vrijednost data-prep, analize imaju vrijednost Report, a upiti za internet ODBC proceduralne pozive imaju vrijednost Soap.

Kako biste generirali SQL naredbu za vizualizaciju podataka, pristup podacima za povezani skup podataka morate promijeniti na Uživo.

U ovom primjeru stvarate upit za vizualizaciju podataka (slično prethodnim upitima) za skup podataka temeljem veze s Oracle bazom podataka:

[2022-02-03T19:42:06.564+00:00] [OBIS] [TRACE:2] [USER-0] [] [ecid: f95b5f1b-1e5c-4604-b82a-3eb3717f3aa6-002aa26e,0:1:1:3] [sik: bootstrap] [tid: 58b0a700] [messageId: USER-0] [requestid: ed830023] [sessionid: ed830000] [username: oacadmin] ############################################## [[

-------------------- SQL Request, logical request hash:

3158b05

SET VARIABLE QUERY_SRC_CD='Visual Analyzer',SAW_SRC_PATH='{"viewID":"view!1","currentCanvas":"canvas!1"}',ENABLE_DIMENSIONALITY = 1; SELECT

   0 s_0,

   XSA('oacadmin'.'BISAMPLE_OfficeRevenue')."SAMP_OFFICES_D"."OFFICE_DSC" s_1,

   XSA('oacadmin'.'BISAMPLE_OfficeRevenue')."SAMP_REVENUE_F"."COST_FIXED" s_2,

   XSA('oacadmin'.'BISAMPLE_OfficeRevenue')."SAMP_REVENUE_F"."COST_VARIABLE" s_3

FROM XSA('oacadmin'.'BISAMPLE_OfficeRevenue')

ORDER BY 2 ASC NULLS LAST

FETCH FIRST 125001 ROWS ONLY

/* AdditionalDetail='VisualAnalyzer' */

Iz toga proizlazi sljedeći SQL kôd:

[2022-02-03T19:42:06.960+00:00] [OBIS] [TRACE:2] [USER-18] [] [ecid: f95b5f1b-1e5c-4604-b82a-3eb3717f3aa6-002aa26e,0:1:1:5] [sik: bootstrap] [tid: 58b0a700] [messageId: USER-18] [requestid: ed830023] [sessionid: ed830000] [username: oacadmin] -------------------- Sending query to database named 'oacadmin'.'BISAMPLE' (id: <<147945>>), client type OCI 10g/11g, connection pool named 'oacadmin'.'BISAMPLE', logical request hash 3158b05, physical request hash c48e8741: [[

WITH

SAWITH0 AS (select T1000005.OFFICE_KEY as c1,

     T1000005.OFFICE_DSC as c2

from

     BISAMPLE.SAMP_OFFICES_D T1000005),

SAWITH1 AS (select T1000008.OFFICE_KEY as c1,

     T1000008.COST_FIXED as c2,

     T1000008.COST_VARIABLE as c3

from

     BISAMPLE.SAMP_REVENUE_F T1000008),

SAWITH2 AS (select D1.c2 as c1,

     D2.c2 as c2,

     D2.c3 as c3

from

     SAWITH0 D1 inner join SAWITH1 D2 On D1.c1 = D2.c1),

SAWITH3 AS (select D102.c1 as c1,

     sum(D102.c2) as c2,

     sum(D102.c3) as c3

from

     SAWITH2 D102

group by D102.c1)

select D1.c1 as c1, D1.c2 as c2, D1.c3 as c3, D1.c4 as c4 from ( select 0 as c1,

     D110.c1 as c2,

     D110.c2 as c3,

     D110.c3 as c4

from

     SAWITH3 D110

order by c2 ) D1 where rownum <= 125001

U logičkoj tablici za praćenje upotrebe možete pronaći hash_id koji služi za filtriranje fizičke tablice za praćenje upotrebe.

Slijedi opis za GUID-C053C7FB-251A-4021-A850-1F6006BEBFF1-default.jpg
.jpg

U fizičkoj tablici za praćenje upotrebe možete pronaći physical_hash_id.

Slijedi opis za GUID-EB289F16-56B0-4AFB-8C96-2D7B55680B7B-default.jpg
.jpg

Kad pretražujete V$SQL tablicu, ponovno ćete pronaći SQL_ID.

Slijedi opis za GUID-CD805B03-A8AD-40F0-AE84-BD28AC8B6EF8-default.jpg
.jpg

Osim toga, možete pronaći logički hash_id i physical_hash_id u zapisniku Upravljanje sesijama (provjerite istaknute odjeljke u prethodnim primjerima zapisnika). To znači kako ćete SQL_ID pronaći u samom zapisniku. Prednost upotrebe tablica za praćenje upotrebe u tome je što su unosi u zapisnik sesija za upravljanje privremeni, stoga, ako ne prikupljate ID-ove raspršivanja u isto vrijeme u koje izvodite upit, bit će izgubljeni.

Međutim, podaci će se u tablice za praćenje upotrebe zapisati tek po dovršetku upita. Stoga, ako rješavate probleme s dugim upitom koji još nije dovršen i želite utvrditi sql_id, logički hash_id i physical_hash_id možete dobiti iz zapisnika Upravljanje sesijama.

Ako rješavate probleme s SQL naredbom i trebate istražiti bazu podataka, informacije možete pridružiti u tablice za praćenje upotrebe i sistemsku tablicu V$SQL (ili GV$SQL) kako biste brzo pronašli SQL_ID za SQL naredbu koju istražujete.