Ufuatiliaji wa hoja ya Oracle. Kufuatilia kipindi cha mtu mwingine katika ORACLE. Oracle_trace ni nini

Kuna misimbo mingi ya uchunguzi iliyojengwa ndani. Sehemu yake, kwa mfano, sql_kufuatilia, imeelezewa vizuri katika nyaraka, na sehemu, kwa mfano, uwakilishi x$ kufuatilia, haijaandikwa hata kidogo. Mara kwa mara napenda kutumia muda kuchanganua tena msimbo kama huo ili kuona jinsi uwezo wake ulivyo wa hali ya juu, kama wamepokea kutambuliwa rasmi, na kama wamerekodiwa. Hivi majuzi, nilipokuwa nikifanya kazi na seva ya Oracle 9i, nilishangaa kugundua ongezeko kubwa la uwezo oracle_trace, ambayo imetokea katika matoleo kadhaa yaliyopita. Makala hii ni utangulizi mfupi V oracle_trace na maelezo ya uwezo wake.

Vipi... ?

Jinsi ya kupata kitu ambacho ni chanzo cha matukio yote buffer inasubiri kwa bidii, ambayo inaweza kuonekana katika mtazamo v$waitstat?

Sote tumesoma miongozo ya kurekebisha utendaji: "Ukiona... unaweza kuhitaji kuongeza idadi ya orodha viti vya bure (orodha huru) kwa jedwali lenye matatizo." Lakini haisemi jinsi ya kupata jedwali hili lenye matatizo.

Chaguo la 1: Endesha mtiririko unaoendelea wa hoja dhidi ya mwonekano v$session_ngoja na angalia maadili ya safu p1, p2, p3 tukio hili linapotokea. Kitakwimu, mapema au baadaye utakuwa na wazo linalofaa la ni kitu gani au vitu gani vinasababisha shida. Chaguo hili ni chungu kabisa, na matokeo yake kwa sehemu inategemea bahati.

Chaguo 2: Washa tukio 10046 katika kiwango cha 8 na upate mtiririko wa maelezo ya kusubiri katika faili za kufuatilia. Inaweka dhiki nyingi kwenye mfumo na pia inahitaji bahati fulani.

Chaguo la 3: Kuna tukio (10240) ambalo linapaswa kutoa orodha ya anwani za kizuizi katika faili ya ufuatiliaji ambayo tunangojea (sawa!), lakini bado sijaweza kufanya tukio hili lifanye kazi. Ikiwa unajua jinsi ya kufanya hivi tafadhali nijulishe kama uamuzi huu ni hakika mojawapo.

Kwa hivyo, ungependa kupata orodha ya vitalu haswa ambavyo unapaswa kungojea, pamoja na vitambulisho vya vipindi vya kungojea, sababu na muda wa kungojea, vyote na gharama ndogo rasilimali? Hii ndio, kati ya mambo mengine, inakuwezesha kupata oracle_trace.

Oracle_trace ni nini?

oracle_trace ni sehemu ya seva inayokusanya taarifa kuhusu matukio kwa kutumia rasilimali ndogo.

Matukio haya ni pamoja na kusubiri, miunganisho, kutenganisha, kuchanganua na kutekeleza hoja, kuleta safu mlalo na zingine.

Unaweza kukusanya taarifa kwa ajili ya tukio zima au kwa ajili tu watumiaji fulani, matukio au taratibu; Zaidi ya hayo, ufuatiliaji unaweza kuwashwa na kuzimwa wakati wowote.

Lakini moja ya vipengele vya kuvutia zaidi oracle_trace ni kwamba inawezekana kupanga uhifadhi wa habari iliyokusanywa na kuitupa kwenye diski katika vizuizi vikubwa, badala ya kuitoa mstari kwa mstari. Kwa kuongeza, unaweza kuhitaji faili iliyo na habari iliyokusanywa iwe saizi iliyowekwa Na kutumika tena .

Kwa kawaida, baada ya kuzalisha faili na habari, ni muhimu kuchambua. Hii inaweza kufanywa kwa njia mbili - endesha programu ambayo huunda safu ya ripoti za maandishi kulingana na data ya faili, au endesha programu inayosoma data ya faili na kuitupa kwenye seti ya meza za Oracle, ambayo unaweza kuunda yako mwenyewe. ripoti.

Kwa kutumia oracle_trace zana

Hivyo jinsi gani oracle_trace inasaidia kujibu swali la asili?

Rahisi: moja ya madarasa ya matukio ambayo yanaweza kupatikana ni kusubiri. Unahitaji kuangalia ikiwa seva inaendesha katika hali inayokuruhusu kuwezesha ufuatiliaji, na kisha uiombe ifanye hivyo (ama kwa kutumia PL/SQL au kutoka. mstari wa amri) kuanza kufuatilia kusubiri. Wakati huo huo, tunapunguza seti ya matukio ya kusubiri tu kwa tukio hilo 92 (Hii buffer inasubiri kwa bidii katika Oracle 9i, lakini angalia maadili ya safu ikiwa tu tukio# Na jina kutoka kwa mtazamo v$event_name kwenye mfumo wako). Kisha unapaswa kukaa na kusubiri kwa muda wa saa moja wakati tatizo linaonekana kwa kasi zaidi. Tunapopata vya kutosha faili kubwa kufuatilia, acha kufuatilia, weka data kutoka kwa faili ya kufuatilia kwenye hifadhidata na utekeleze taarifa ya SQL inayoomba, sema, yafuatayo:

Kwa vitu gani matukio yalitokea buffer inasubiri kwa bidii, ulilazimika kungoja kwa muda gani, ngoja ni mara ngapi, na ni nani aliyeteseka zaidi?

Ikiwa unaweza kuishi na maelezo ya ziada, unaweza hata kukusanya taarifa zinazosubiri za SQL wakati wa kufuatilia, kukuwezesha kuona ni taarifa zipi za SQL zimeathiriwa zaidi na kusubiri.

Kuweka yote pamoja

Kwanza, unahitaji kuweka idadi ya vigezo vya uanzishaji ili uweze kuwezesha ufuatiliaji kwenye seva, lakini usiwashe mara moja. Orodha ya vigezo hivi imeonyeshwa kwenye Mtini. 1.

Kielelezo cha 1: Vigezo vya uanzishaji vinavyohusishwa na oracle_trace

Kigezo oracle_trace_collection_name inahitaji kuwekwa kwa uwazi thamani tupu "" , kwa sababu maana yake ya kawaida ni "ongezi", na ikiwa jina lililowekwa limeainishwa na ufuatiliaji umewezeshwa, Seva ya Oracle Hutekeleza ufuatiliaji wa kiwango cha mfano kutoka wakati wa kuanza (wow!).

Kigezo oracle_trace_collection_njia inabainisha saraka ambayo faili zitapatikana. Katika katalogi oracle_trace_facility_njia orodha ya matukio ambayo yanaweza kufuatiliwa yamewekwa ( mafaili ya ufafanuzi wa kituo- Faili za ufafanuzi wa zana zinazotolewa na Oracle Corporation). Kigezo oracle_trace_facility_name inabainisha orodha ya matukio ambayo yanatuvutia. Hatimaye, unaweza kupunguza ukubwa (katika byte) ya faili ya kufuatilia kwa kuweka parameter oracle_trace_collection_size.

Baada ya seva kuanza, unaweza kuanza kukusanya taarifa za ufuatiliaji.

Katika nakala hii nitatumia zana za mstari wa amri tu, ingawa kuna kiolesura mbadala cha PL/SQL (kifurushi dbms_oracle_trace_wakala- takriban. mtafsiri), na hata GUI, ukinunua moduli inayolingana ya Biashara ya Oracle Meneja. Tutatumia amri ifuatayo:

Otrccol anza 1 otrace.cfg

Timu otrccol- interface kuu kwa oracle_trace. Kuna amri zingine, lakini sifa zao nyingi zimeongezwa otrccol. Ni wazi parameter kuanza inahitaji kuanza kufuatilia (na parameta acha- kumzuia). Maana" 1 " ni kitambulisho cha kazi kilichochaguliwa kwa nasibu, na otrace.cfg- Faili ya usanidi. Mfano wa faili ya usanidi unaonyeshwa kwenye Mtini. 2.

Kielelezo 2: Mfano wa faili ya usanidi oracle_trace

Faili hii inahitaji seva kuunda faili ya seti ya data iliyopewa jina jpl.dat, na faili ya ufafanuzi wa mkusanyiko iliyopewa jina jpl.cdf na kuweka kitambulisho jpl. Ufafanuzi wa zana zinazoweza kufuatiliwa uko kwenye faili subiri.fdf(Faili hii imetolewa na Oracle na ina matukio ya kusubiri pekee.) Saizi ya faili ya ufuatiliaji itapunguzwa hadi MB 10, lakini itatumika tena ili iwe na data ya hivi punde ya MB 10 kila wakati. Kabla ya kutupa data kwenye faili hii, seva ya Oracle itaikusanya katika bafa ya MB 1.

Uwezekano wa kuweka regid- moja ya wengi vipengele vya nguvu oracle_trace. Thamani "ya kawaida" ya mfuatano huu ina "0 0" badala ya yangu "7 92" , na kudai hivyo oracle_trace ilifuatilia mfano mzima wa Oracle, ambao umetolewa na kitambulisho d901 mwishoni mwa mstari. Niliuliza tu kufuatilia Nambari ya tiba 7(subiri matukio) kipengele 92(matarajio buffer inasubiri kwa bidii).

Ikiwa ni lazima, unaweza kutaja mistari mingi kwenye faili regid. Kwa seti ya kwanza ya majaribio nilitumia mistari miwili regid katika faili ya usanidi inayobainisha kuwaeleza "7 129" Na "7 130" - masomo ya mlolongo na yaliyotawanyika, kwa mtiririko huo, kwa kuwa aina hizi za kusubiri ni rahisi kuzalisha.

Nitatoa maoni kwenye sehemu inayobainisha vipengele vya umbizo zaidi.

Baada ya mfumo kufanya kazi kwa muda, endesha:

Otrccol stop 1 otrace.cfg otrccol umbizo otrace.cfg

Amri ya kwanza inasimamisha ufuatiliaji, ya pili inasoma faili na inatupa data kwenye idadi ya meza za Oracle.

Hata hivyo, kabla ya kufomati seti, lazima uunde schema ambayo ina majedwali yanayotumika katika uumbizaji. Kwa jina la mtumiaji na nenosiri, tunatumia maadili yaliyowasilishwa mapema kwenye Mtini. 2. Kamba umbizo_kamili=1 katika faili ya usanidi husababisha faili nzima kutupwa kwenye meza; ufungaji umbizo_kamili=0 itaweka upya data mpya pekee. Kumbuka pia jina la huduma ( huduma) - inabainisha hifadhidata ambayo akaunti inayolingana iko. Ili kutumia amri umbizo, unahitaji kuanzisha mchakato wa kusikiliza wa TNS (msikilizaji wa TNS), hata kama data itatupwa kwenye hifadhidata ya ndani.

Katika Mtini. Kielelezo cha 3 kinaonyesha hati ndogo inayounda akaunti na kuipa haki muhimu.

Kielelezo cha 3: Kuunda mtumiaji ambaye schema yake itakuwa na majedwali ya ufuatiliaji

Wakati wa kutaja chaguo umbizo programu moja kwa moja (na angalau, katika mpya Matoleo ya Oracle) itaunda meza zinazohitajika ndani mpango maalum. Baadhi ya majedwali haya yatakuwa na majina yenye maana, kwa mfano:

EPC_COLLECTION

Majina ya wengine hayatakuwa na maana yoyote:

V_192216243_F_5_E_9_9_0

Tatizo la majina yasiyo ya kawaida linaweza kutatuliwa kwa kuendesha hati otrcsyn.sql katika katalogi $ORACLE_HOME/otrace/demo.

Hati hii inaunda visawe vya jedwali, ikizipa majina yenye maana, kama hii:

SUBIRI MUUNGANO

(Majina hutofautiana kulingana na matoleo tofauti Oracle.)

Nilipata shida ndogo na kizazi kiotomatiki meza. Ukitaja mojawapo ya orodha zilizochaguliwa sana za fedha (kwa mfano, subiri.fdf), ni majedwali tu yanayohitajika kuwasilisha matokeo ya umbizo husika yanaundwa. Ikiwa utaamua kutumia zaidi orodha kamili fedha zinazoweza kufuatiliwa (kwa mfano, oracle.fdf) katika umbizo litafanyika kushindwa kwa sababu baadhi ya meza zipo, lakini nyingine hazipo. Kwa hivyo inaweza kuwa na maana kutumia sekunde chache kufuatilia oracle.fdf, fomati data, na kisha upunguze data kutoka kwa jedwali zote. Ni mbaya lakini njia ya ufanisi mipangilio ya mpango unaolingana.

Baadhi ya matokeo

Kwa hivyo tulifanya nini:

  • Imeunda faili ya usanidi
  • Imeanza ukusanyaji wa data
  • Ilifanya vitendo fulani katika hifadhidata
  • Ukusanyaji wa data umesimamishwa
  • Imeumbiza seti ya data

Basi nini sasa?

Wacha tufikirie tulitumia faili ya usanidi iliyoonyeshwa kwenye Mtini. 2. Kuunganisha kwa niaba akaunti otrace, tutapata safu katika meza uhusiano, tenganisha Na subiri. Safu katika meza subiri nitakuambia kila kitu kuhusu matukio buffer inasubiri kwa bidii kilichotokea wakati wa ufuatiliaji.

Kwa mfano, tunaweza kutekeleza taarifa ya SQL iliyoonyeshwa kwenye Mtini. 4:

chagua p1 file_id, p2 block_id, p3 reason_code, count(*) ct, sum(time_waited)/sekunde 100 kutoka kwa kikundi cha kusubiri kwa p1, p2, p3 ili kwa sum(time_waited) desc ;

Kielelezo cha 4: Swali la mfano ili kutambua muda mrefu zaidi wa kusubiri kwa vitalu vilivyochukuliwa

Ikiwa usahihi zaidi unahitajika, unaweza kutoa ngoja zote na mihuri ya muda, na safu (badala ya matumaini) iliyopewa jina. muhuri_wa muda.

Ikiwa unahitaji kujua ni watumiaji gani walilazimika kusubiri kwa muda mrefu zaidi, badilisha hoja na ufupishe kwa safu wima. kipindi_kiashiria(SID) na kipindi_kitabu (mfululizo#) Ili kupata kwa maadili ( kipindi_kiashiria, kipindi_kitabu) jina la mtumiaji, jina la mashine, wakati wa usajili, nk. unaweza kutumia jedwali (kisawe) uhusiano.

Bila shaka, hakuna chochote (zaidi ya adhabu ya utendaji) kinachokuzuia kujiunga na jedwali hili ili kutazamwa dba_vipimo kubadilisha faili na kuzuia vitambulisho kuwa aina na majina ya kitu.

Na ikiwa unahitaji kutambua taarifa maalum za SQL ambazo ulilazimika kungojea, unaweza kila wakati, ingawa kwa gharama ya rasilimali kubwa zaidi, kubadili kutumia faili. sql_waits.fdf, ambayo husababisha majedwali kadhaa zaidi kujazwa na maelezo ya kufuatilia, ambayo yanaweza kuunganishwa na safuwima kipindi_kiashiria, kipindi_kitabu, muhuri wa nyakati Na muhuri_wa muda.

Hatimaye, ikiwa unafikiri kwamba gharama ya kupakia data katika majedwali na kutoa ripoti itaathiri vibaya mfumo, unaweza kuhamisha faili kila wakati. cdf Na dat kwa mashine nyingine na kuzichakata kwenye hifadhidata nyingine. Niliweza hata, na marekebisho madogo, kutoa hifadhidata kwenye toleo la 9i na kisha kuiendesha kwa mfano wa 8i, ili kudhibitisha uwezekano. Hii, bila shaka, itafanya kuwa vigumu kutambua vitu kwa namba za kuzuia.

Wakati ujao

Uwezekano hauna mwisho - kwa mfano, moja ya faili za ufafanuzi wa chombo huitwa oraclec.fdf na hukuruhusu kufuatilia vitendo katika kache ya bafa. Kwa kufuatilia vitendo hivi, inawezekana kuamua, chini ya microsecond, ambayo vitalu viliwekwa kwenye cache, kwa utaratibu gani, na ni vitalu gani vilivyopaswa kuondolewa kutoka kwenye cache kabla ya kupakiwa. (Ninashuku kuwa gharama ya ziada haitaruhusu njia hii kutumika kila wakati.)

Kipengele kingine cha ufuatiliaji ambacho kitakuwa na manufaa kwa wengi kinawakilishwa na faili unganisha.fdf. Inaingilia miunganisho na kukatwa kwa vipindi, kama vile jinsi amri inavyofanya kazi kikao cha ukaguzi. Hata hivyo, faili ya kufuatilia hukusanya takwimu za ziada nusu-dazeni (kama vile rekodi za kufanya upya) ambazo huongezwa kwenye jedwali. aud$ usipige; na wakati wa mchakato wa mkusanyiko, hakuna uandishi kwa hifadhidata unaofanywa.

Unaweza pia kufikia mtumiaji binafsi: inaweza kulengwa oracle_trace kufuatilia matendo ya mtumiaji mmoja. Unaweza hata kuandika taarifa ya SQL ambayo inasoma jedwali zinazosababishwa na kutoa faili inayofanana na ile unayounda. sql_kufuatilia. Katika kesi hii, itawezekana pia kufuatilia wakati wa usajili, mpito kutoka kwa seva moja iliyoshirikiwa hadi nyingine na, hatimaye, kuondoka.

Hitimisho

Huu ni utangulizi mfupi tu wa oracle_trace, ambayo iligusa misingi ya matumizi yake. Bado tunahitaji kufanya kazi ya kutathmini utulivu wa kazi na madhara kutumia oracle_trace, bila kutaja athari kwenye utendaji.

Hata hivyo, hata utafiti mdogo unaonyesha kuwa chombo hiki kinahitaji rasilimali chache zaidi kuliko zana zingine za uchunguzi zilizojengewa ndani, na kutoa unyumbufu zaidi na usahihi katika kuripoti.

Hatimaye, oracle_trace hukuruhusu kupata majibu sahihi kwa idadi ya maswali changamano ambayo yamesumbua DBA kwa miaka mingi.

Binafsi, singeshangaa sana ikiwa oracle_trace katika miaka michache ijayo, hatimaye itachukua nafasi ya zana nyingine zote za uchunguzi.

Tatizo

Kuna tofauti nyingi, kawaida tu kwa majina, kati ya utekelezaji oracle_trace katika matoleo ya Oracle 8i na Oracle 9i. Makala haya yameandikwa kwa kuzingatia Oracle 9i pekee.

12 majibu

Unaweza kutumia Oracle Enterprise Manager kufuatilia vipindi vinavyoendelea, utekelezaji wa hoja, mpango wake wa utekelezaji, kufuli, baadhi ya takwimu na hata upau wa maendeleo kwa kazi ndefu.

Nenda kwa Mfano → Vikao na uangalie kichupo cha SQL cha kila kikao.

Na bila shaka unaweza pia kutumia chombo Eleza MPANGO FOR, TRACE na mbinu nyingine nyingi za uwekaji ala. Kidhibiti cha Biashara kina ripoti kadhaa kwa hoja za gharama kubwa zaidi za SQL. Unaweza pia kutafuta maombi ya hivi karibuni, iliyohifadhiwa kwenye kache.

Nilipata suluhisho rahisi

Hatua ya 1. unganisha kwa DB kwa kutumia mtumiaji msimamizi kwa kutumia PLSQL au sqldeveloper au kiolesura kingine chochote cha hoja

Hatua ya 2. endesha hati hapa chini; katika safu wima ya S.SQL_TEXT utaona hoja zilizotekelezwa

CHAGUA S.LAST_ACTIVE_TIME, S.MODULE, S.SQL_FULLTEXT, S.SQL_PROFILE, S.EXECUTIONS, S.LAST_LOAD_TIME, S.PARSING_USER_ID, S.SERVICE KUTOKA SYS.V_$SQL S, SYS.ALL_USERS U WHERE S.USSING_USER_ID .USER_ID NA JUU(U.USERNAME) KATIKA ("jina la mtumiaji wa chumba cha habari hapa") AGIZA HADI_TAREHE(S.LAST_LOAD_TIME, "YYYY-MM-DD/HH24:MI:SS") desc;

Shida pekee ni kwamba siwezi kupata njia ya kuonyesha maadili vigezo vya pembejeo(kwa simu za kazi) lakini angalau tunaweza kuona kinachoendelea katika Oracle na mpangilio wake bila kutumia zana yoyote maalum.

Badilisha mfumo uliowekwa timed_statistics=true

Seti ya kipindi cha kubadilisha timed_statistics=true --ikiwa unataka kufuatilia kipindi chako mwenyewe

Inapaswa kuwa kubwa ya kutosha:

Chagua thamani kutoka kwa v$parameta p ambapo jina="max_dump_file_size"

Jua ni mbegu ngapi na nambari ya serial vipindi unavyovutiwa navyo:

Chagua sid, serial# kutoka v$session ambapo ...vigezo_zako_vya_tafuta...

Unaweza kuanza kufuatilia na tukio 10046, parameta ya nne inaweka kiwango cha ufuatiliaji (12 ndio cha juu zaidi):

Anza sys.dbms_system.set_ev(sid, serial#, 10046, 12, ""); mwisho;

Lemaza ufuatiliaji kwa kuweka kiwango cha sifuri:

Anza sys.dbms_system.set_ev(sid, serial#, 10046, 0, ""); mwisho;

/* viwango vinavyowezekana: 0 - walemavu 1 - kiwango cha chini. Sawa na kuweka sql_trace = kweli 4 - funga maadili ya kutofautisha yanaongezwa kwenye faili ya ufuatiliaji 8 - kusubiri huongezwa 12 - maadili ya kutofautisha na matukio ya kusubiri yanaongezwa */

Sawa ikiwa unataka kufuata kikao chako kwa kiwango cha juu:

Badilisha matukio ya kuweka kikao "10046 fuatilia muktadha wa jina milele, kiwango cha 12";

Kuzima:

Matukio ya kuweka kipindi cha kubadilisha "10046 muktadha wa kufuatilia jina umezimwa";

Faili iliyo na habari mbichi ya kufuatilia:

Chagua thamani kutoka kwa v$parameter p ambapo jina = "user_dump_dest"

Jina la faili (*. Trc) litakuwa na spid:

Chagua p.spid kutoka v$session s, v$process p ambapo s.paddr=p.addr na ...your_search_params...

Pia unaweza kuweka jina mwenyewe:

Badilisha seti ya kipindi tracefile_identifier="UniqueString";

Hatimaye, tumia TKPROF kufanya faili ya kufuatilia ieleweke zaidi:

C:\ORACLE\admin\databaseSID\udump> C:\ORACLE\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf TKPROF: Toa 9.2.0.1.0 - Toleo la Wed Sep 22 18:05:00 2004 Hakimiliki (c) 1982, 2002, Oracle Corporation. Haki zote zimehifadhiwa. C:\ORACLE\admin\databaseSID\udump>

Ili kuona hali ya matumizi ya faili ya kufuatilia:

Weka serveroutput kwa ukubwa 30000; tangaza ALevel binary_integer; anza SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel); ikiwa ALevel = 0 basi DBMS_OUTPUT.Put_Line("sql_trace imezimwa"); else DBMS_OUTPUT.Put_Line("sql_trace is on"); mwisho ikiwa; mwisho; /

Michache zaidi - katika SQL*Plus - SET AUTOTRACE ON - itatoa mpango wa maelezo na takwimu kwa kila taarifa inayotekelezwa.

TOAD pia inaruhusu uwekaji wasifu wa upande wa mteja.

Upande wa chini kwa haya yote mawili ni kwamba wanakuambia tu mpango wa utekelezaji wa taarifa hiyo, lakini sio jinsi kiboreshaji kilivyofika kwenye mpango huo - utahitaji ufuatiliaji wa upande wa seva wa kiwango cha chini kwa hilo.

Jambo lingine muhimu kuelewa ni vijipicha vya Statspack. njia nzuri angalia utendaji wa hifadhidata kwa ujumla. Eleza mpango, n.k., Kuwa na uelewa mzuri wa taarifa binafsi za SQL ambazo ni vikwazo. Statspack hufanya kazi nzuri ya kutambua ukweli kwamba shida yako ni usemi rahisi na mpango mzuri utekelezaji unasemekana kuwa mara milioni 1 kwa dakika.

Catch ni kunasa shughuli zote za SQL kati ya pointi mbili kwa wakati. Vivyo hivyo na SQL Server.

Kuna hali ambapo ni muhimu kukamata SQL hiyo mtumiaji maalum inaendesha kwenye hifadhidata. Kwa kawaida ungewezesha tu ufuatiliaji wa kikao kwa mtumiaji huyo, lakini kuna matatizo mawili yanayoweza kutokea na mbinu hii.

  • Kwanza, programu nyingi za wavuti zinasaidia kuunganisha viunganisho vya kudumu kwa hifadhidata ambayo inashirikiwa na watumiaji kadhaa.
  • Pili, programu zingine huunganisha, endesha SQL fulani na ukata muunganisho haraka sana, na kuifanya kuwa ngumu kuwezesha ufuatiliaji wa kikao kabisa (bila shaka unaweza kutumia kichochezi cha kuingia ili kuwezesha ufuatiliaji wa kikao katika kesi hii).

Suluhisho la haraka na chafu la tatizo ni kukamata kila kitu Taarifa za SQL, ambayo hutekelezwa kati ya pointi mbili kwa wakati.

Utaratibu unaofuata utaunda meza mbili, kila moja ikiwa na picha hifadhidata katika hatua maalum. Majedwali kisha yataulizwa kuunda orodha ya SQL zote zinazoendeshwa kwa kipindi hicho.

Ikiwezekana, unapaswa kufanya hivi katika mfumo tulivu wa ukuzaji - vinginevyo una hatari ya kurudishiwa data nyingi.

    Piga picha ya kwanza Endesha sql ifuatayo ili kuunda picha ya kwanza:

    Unda jedwali sql_exec_before kama utekelezaji uliochaguliwa, hash_value kutoka v$sqlarea /

    Pata mtumiaji kutekeleza kazi yake katika programu.

    Piga picha ya pili.

    Unda jedwali sql_exec_after kama utekelezaji uliochaguliwa, hash_value kutoka v$sqlarea /

    Angalia Matokeo Sasa kwa kuwa umekamata SQL, ni wakati wa kuuliza matokeo.

Habari.
Mara nyingi watumiaji au wajaribu wetu huwasiliana nami kwa shida ifuatayo:

"Programu ilianza kunifanyia kazi. POLEPOLE!"

Wakati huo huo, hakuna wakati wa kusoma shida kwa undani, na hata seva zinazofanya kazi kawaida hufanya kazi na sql_trace = parameta ya uwongo ...
Katika kesi hii, nilipata suluhisho lifuatalo la "kuelezea" kwangu.

1. Tunamwomba mtumiaji "kuingia" kwenye programu

2. Tafuta upande na mfululizo wa kipindi cha mtumiaji (chagua sid, serial# kutoka v$session ambapo<условия поиска>)

3. Tekeleza kizuizi hiki cha PL/SQL
tangaza
-- 0/1/null<-->uongo/kweli/null
-- Vigezo vya Boolean vinatafsiriwa kutoka/ hadi nambari kamili:
sql_trace boolean:= sys.diutil.int_to_bool(1);
kuanza
-- Piga utaratibu
dbms_system.set_sql_trace_in_session
(sid => 56,
serial# => 6656,
sql_trace => sql_trace);
mwisho;
Baada ya utekelezaji wake, ufuatiliaji wa kikao maalum huanza.

4. Tunaomba mtumiaji afanye operesheni ndefu...

6. Inalemaza ufuatiliaji kwa kuendesha hati hii tena, ikibainisha sql_trace = 0 parameta.

7. Pata faili ya .trc kwenye saraka ya seva ya UDUMP
Jina la faili lina kitambulisho cha mchakato mfumo wa uendeshaji. Unaweza kuipata kama hii
SQL> chagua p.spid kutoka v$session s, v$process p
2 ambapo s.paddr=p.addr
3 na ...vigezo_vya_uteuzi_wangu...
4 /

8. Tunachakata faili hii na matumizi ya TKPROF (TKPROF<имя trc-файла> <имя выходного файла>)

9. Katika faili inayotokana, tunachambua matokeo ya mwisho, kutathmini vigezo vya CPU na ELAPSED.
Kwa mfano, leo nimepokea picha hii.
Na matokeo yanaonyesha kuwa kuna shida na imejilimbikizia wakati wa kusubiri wa kupokea data (sekunde 20.85)
Tunahitaji kutafuta maswali yenye matatizo.

10. Katika Dirisha kwa kutumia kupata amri"jumla"<имя выходного файла>>1.txt
Tunatafuta mistari yote inayoanza na "jumla" na kuihifadhi kwenye faili 1.txt

11. Tunaangalia faili hii haraka na kupata maadili ambayo hayatuhusu kulingana na thamani yao.
Katika kesi yangu leo, kulikuwa na mistari 2 kama hiyo ya maombi mawili, ambayo ilichukua karibu wakati wote wa kungojea.
jumla 9 0.00 0.00 0 21 0 9
jumla 3 0.03 0.02 0 3 0 0
jumla 3 0.01 0.00 0 14 0 5
jumla 3 0.64 10.89 11848 17504 0 4
jumla 3 0.07 0.06 0 214 0 29
jumla 15 0.00 0.00 0 15 0 5
jumla 3 0.01 0.00 0 3 0 0
jumla 3 0.00 0.00 0 4 0 1
jumla 3 0.00 0.00 0 8 0 6
jumla 6 0.04 0.02 0 8 0 2
jumla 3 0.00 0.00 0 4 0 1
jumla 3 0.00 0.00 0 3 1 1
jumla 3 0.00 0.00 0 2 0 1
jumla 3 0.01 0.00 0 8 2 1
jumla 2 0.00 0.00 0 4 1 1
jumla 3 0.00 0.00 0 2 0 1
jumla 3 0.21 9.85 7760 12354 0 1
jumla 6 0.00 0.00 0 0 0 0
jumla 6 0.00 0.00 0 0 0 0
Halafu, kwa kutumia maadili haya kutoka kwa mistari hii kwenye faili ya ufuatiliaji iliyochakatwa, tunapata maombi yenye shida na kuyashughulikia.
Leo ilitosha kwangu kujenga faharisi mbili ...
YOTE...

Katika uzoefu wangu, karibu asilimia 90 ya maswala ya utendaji wa seva hutatuliwa kwa kutumia ujanja huu rahisi.

Unaweza kuuliza, kwa nini ufanye hatua ya 10? Baada ya yote, unaweza kutafuta maswali yenye matatizo katika faili ya TRC iliyochakatwa. BILA SHAKA UNAWEZA. Ikiwa kuna mia kadhaa ya maombi kama haya katika alama moja, basi ni rahisi kutazama au kuchakata kwa haraka jumla tu, na kisha kuendelea na maelezo...