R12.1/R12.2 er ret store og tidskrævende opgraderinger. Vi skal finde al den langvarige sql for at løse problemerne med R12.2-opgraderingens ydeevne. Da hver iteration tager meget tid, er det vigtigt, at vi forsøgte at finde ud af præstationsproblemerne i færre iterationer og rette dem i overensstemmelse hermed
Her er Top AWR nyttige forespørgsler til at løse problemer med R12.2-opgraderingsydelse
Hvis SQL stadig er i hukommelsen (cursor-cache), kan følgende bruges til at identificere langvarige SQL'er, som muligvis ikke er blevet skrevet til AWR'en endnu (ved sidste øjebliksbillede)
SELECT * FROM (SELECT ss.sql_id, ROUND(SUM(ss.elapsed_time/1000000),0) elapsed_time_secs, ROUND(SUM(ss.cpu_time/1000000),0) cpu_time_secs._SUM_reads,s disk SUM(ss.direct_writes) direkte_skriver, SUM(ss.buffer_gets) buffer_gets, SUM(ss.px_servers_executions) px_server_execs, SUM(ss.rows_processed) rows_processed, SUM(ss.executions) executions, SUM_waits_time, SUM_waits_ ss.sharable_mem) sharable_mem, SUM(ss.total_sharable_mem) total_sharable_mem FRA v$sqlstats ss GRUPPER EFTER ss.sql_id ORDER BY 2 DESC) WHERE ROWNUM <=100;
Følgende SQL-script vil rapportere den længst kørende SQL mellem to AWR-snapshots
SELECT * FROM (SELECT dhs.sql_id, ROUND(SUM(dhs.elapsed_time_delta/1000000),0) elapsed_time_secs, ROUND(SUM(dhs.cpu_time_delta/1000000),0) cpu_time_secs. SUM(dhs.buffer_gets_delta) buffer_gets, SUM(dhs.px_servers_execs_delta) px_server_execs, SUM(dhs.rows_processed_delta) rows_processed, SUM(dhs.executions_delta)-eksekveringer, ROUND(SUM_0.01.010.00.00.00.00.0) (dhs.clwait_delta/1000000),0) clwait_secs, ROUND(SUM(dhs.ccwait_delta/1000000),0) ccwait_secs, ROUND(SUM(dhs.apwait_delta/1000000),_secist_swaitsROM, Wdhl dhs.dbid =d.dbid OG snap_id> &begin_snap og snap_id <=&end_snap GRUPPER EFTER dhs.sql_id BESTIL EFTER 2 DESC) WHERE ROWNUM <=100;
Hvor &begin_snap og &end_snap er start- og slutsnapshot-id'erne.
Outputtet af denne sætning vil ligne følgende:
SQL_ID ELAPSED_TIME_SECS CPU_TIME_SECS DISK_READS BUFFER_GETS…. -------------- ------------------ --------------- ----- ----- ----------- …. 5vaxut40xbrmr 367440 42999 34838244 3795838289 …. 943ra4b7zg28x 264369 170788 441127 562033013 …. fkkrk9frwqfdr 70370 6448 3599284 469639133 …. 4847s6dt6sds9 68298 38896 7125573 1327384554 …. 2k3uw8n473r30 63600 27402 20043712 587615960 ….
Bemærk:Den forløbne tid er den maksimale forløbne tid for alle arbejdere på et job.
Enterprise Manager kan også bruges til at identificere dyr SQL, efterhånden som den opstår.
Hent visningsmarkørrapport for langvarig SQL
For dette STATISTICS_LEVEL=ALL og _rowsource_execution_statistics =TRUE. Det bør køres uden forsinkelse for at få alle oplysningerne, da disse oplysninger ellers vil blive tømt ud af SGA
SET sider 0 SET linjer 300 SET LONG 10000SET LONGCHUNKSIZE 10000 SPOOL.txt SELECT * FRA TABLE(dbms_xplan.display_cursor(' ', NULL, 'ALL +ALLSTATS')); SPOLE AF;
Hvis SQL'en ikke længere er i hukommelsen, men er i AWR, skal du bruge Display AWR-rapporten i stedet:
SET sider 0 SET linjer 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SPOOL .txt SELECT * FROM TABLE(dbms_xplan.display_awr('', NULL, NULL, 'ALL')); SPOLE AF;
Bemærk:Vær opmærksom på, at Vis AWR-rapporten (DBMS_XPLAN.DISPLAY_AWR) ikke rapporterer om faktiske oplysninger:den har ikke en +ALLSTATS-indstilling, og der er ingen faktiske statistikker for trin i eksekveringsplanen gemt i AWR
Vigtig bemærkning:displaymarkøren og AWR-rapporterne viser kun sql_text (første 1000 tegn) og ikke sql_fulltext. Så kør om nødvendigt følgende SQL-script for at få den fulde SQL-tekst
SET sider 0 SET linjer 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SPOOL.txt VÆLG sql_id, sql_text, sql_fulltext FRA v$SQL WHERE sql_id =' '; SPOLE AF;
Hent SQL Monitor-rapport for SQL ved hjælp af Parallel Query/DML
Den største fordel ved dette er, at det giver et godt overblik over, hvordan parallel SQL/DML fungerer på tværs af planens faser og parallelle slaver
set trimspool på sæt trim på sæt sider 0 sæt lang 10000000 sæt lang chunksize 10000000 sæt liniestørrelse 200 sæt termout off spool sql_monitor_for_.htm variabel my_rept CLOB; BEGIN :my_rept :=dbms_sqltune.report_sql_monitor(sql_id => ' ', report_level => 'ALLE', skriv => 'HTML'); ENDE; / print :my_rept spoler af; sæt termin på
Hvor &begin_snap og &end_snap og er start- og slutsnapshot-id'erne.
Sådan finder du ud af, hvornår den pågældende sql kørte
VÆLG dhs.sql_id, dsn.snap_id, dsn.begin_interval_time, dsn.end_interval_time, ROUND(SUM(dhs.elapsed_time_delta/1000000),0) elapsed_time_secs elapsed_time_secs FROM dba_stat_hist_database dhdnshot_dhdn d.dbid OG dsn.snap_id =dhs.snap_id OG dsn.dbid =dhs.dbid OG dsn.instance_number =dhs.instance_number OG dhs.sql_id ='' OG dsn.snap_id> &begin_dsnap og dsn_ns. &end_snap GRUPPE AF dhs.sql_id, dsn.snap_id, dsn.begin_interval_time, dsn.end_interval_time BESTILLE AF dsn.snap_id;
Hvor &begin_snap og &end_snap er start- og slutsnapshot-id'erne.
Outputtet af denne sætning vil ligne følgende:
SQL_ID SNAP_ID BEGIN_INTERVAL_TIME END_INTERVAL_TIME ELAPSED_TIME_SECS 2k3uw8n473r30 8278 04-JAN-13 23.00.25.5560 05-JAN-13 00.00.21.1620 23123 2k3uw8n473r30 8279 05-JAN-13 00.00.21.1620 05-JAN-13 01.00.38.2680 37145
Sådan finder du CBO-statistikken om Ebiz-miljøet
VÆLG ejer, tabelnavn, antal_rækker, TO_CHAR(sidst_analyseret,'DD-MÅN-ÅÅÅÅ HH24:MI:SS') sidst_analyseret FRA alle_tabeller WHERE ejer IN (SELECT upper(oracle_brugernavn) sname FROM fnd_oracle_userid TWEEN læst 9_000 eller 9_900. ='U' UNION ALLE VÆLG DISTINCT øvre(oracle_brugernavn) navn FROM fnd_oracle_userid a,fnd_product_installations b WHERE a.oracle_id =b.oracle_id ) BESTILLE EFTER ejer, tabelnavn;
Outputtet af denne erklæring vil ligne følgende:
EJER TABLE_NAME NUM_ROWS SIDST_ANALYSERET --- ---------- ---------- -------------------- --- ABM ABM_ACC_MAP_SUM_REP 0 06-DEC-2016 08:46:33 ABM ABM_ACT_ACC_RU_DAT 0 06-DEC-2016 08:46:35 ABM ABM_ACT_STA_RU_DAT 0 06-DEC-6:pre>Sådan får du AWR-rapporterne efter opgraderingen
AWR-rapporter kan fås for
• hele den periode, hvor opgraderingen kører.
• For varigheden af langvarige job (dvs. mellem de øjebliksbilleder, der er taget lige før jobbet starter, og lige efter det er afsluttet) .
• Hvert enkelt øjebliksbillede.Sådan genereres AWR-rapporterne
(1) Gå til $ORACLE_HOME/rdbms/admin
(2) Kør awrrpt.sql generer AWR-rapporterne.
(3) Vælg altid HTML-rapporttype.
(4) På en Oracle RAC-instans vil awrrpti.sql normalt være tilstrækkelig, da opgraderingen kun vil blive kørt på én Oracle RAC-node.
AWR-rapporter kan automatiseres. Dette er nyttigt, hvis du producerer et stort antal AWR-rapporter, især for successive snapshots. Se afsnittet "Automatisering af AWR-rapporter" i My Oracle Support-dokumentet "Performance Diagnosis with Automatic Workload Repository (Document 1674086.1)".
Bemærk, at nogle faste objekter og ordbogsobjekter (især WRH$_LATCH_CHILDREN, især hvis statistik_niveau =ALL, eller der er en høj opbevaringsperiode eller et kort øjebliksbillede) vil være vokset betydeligt under opgraderingen. Så statistikker over faste objekter og ordbog skal muligvis indsamles, før du kører AWR'er.Relaterede artikler
Automatic Workload Repository
Oracle ASH (Active Session History)
Oracle Performance Tuning
Sådan opretter du ADDM-opgave og kontrollerer dens rapport
Sådan finder du sessionsdetaljer i Oracle-databasen