sql >> Databasteknik >  >> RDS >> Oracle

De bästa AWR-användbara frågorna för R12.2/R12.1-uppgradering

R12.1/R12.2 är ganska stora  och tidskrävande uppgraderingar. Vi måste hitta all långvarig sql för att lösa problem med  R12.2-uppgraderingsprestanda. Eftersom varje iteration tar mycket tid är det viktigt att vi försökte ta reda på prestationsproblemen i färre iterationer och fixa dem därefter

Här är de bästa AWR-användbara frågor för att lösa problem med uppgraderingsprestanda för R12.2

Om SQL fortfarande finns i minnet (markörcache) kan följande användas för att identifiera långvariga SQL-filer som kanske inte har skrivits till AWR ännu (vid sista ögonblicksbilden)

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) direct_writes, 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_application_wassUM ss.sharable_mem) sharable_mem, SUM(ss.total_sharable_mem) total_sharable_mem FRÅN v$sqlstats ss GROUP BY ss.sql_id ORDER BY 2 DESC) WHERE ROWNUM <=100;

Följande SQL-skript kommer att rapportera den längsta körande SQL-en mellan två AWR-ögonblicksbilder

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.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) exekveringar, i (dhs.clwait_delta/1000000),0) clwait_secs, ROUND(SUM(dhs.ccwait_delta/1000000),0) ccwait_secs, ROUND(SUM(dhs.apwait_delta/1000000),_secist_swaitsROM databas,_secist_swaitsROM,_secist_swaitsROM, Wdhl dhs.dbid =d.dbid OCH snap_id> &begin_snap och snap_id <=&end_snap GRUPPER EFTER dhs.sql_id BESTÄLLNING EFTER 2 DESC) WHERE ROWNUM <=100;

Där &begin_snap och &end_snap är start- och slutsnapshot-ID:n.
Utdata från denna sats kommer att se ut som följande:

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 ….

Obs:Den förflutna tiden är den maximala förflutna tiden för alla anställda på ett jobb.

Enterprise Manager kan också användas för att identifiera dyr SQL när den uppstår.

Hämta visningsmarkörrapport för långvarig SQL

För detta  STATISTICS_LEVEL=ALLA och _rowsource_execution_statistics =TRUE. Det bör köras utan någon fördröjning för att få all information eftersom denna information annars kommer att rensas ur SGA

SET pages 0 SET lines 300 SET LONG 10000SET LONGCHUNKSIZE 10000 SPOOL .txt SELECT * FROM TABLE(dbms_xplan.display_cursor('', NULL, 'ALL +ALLSTATS')); SPOLLA AV; 

Om SQL:n inte längre finns i minnet, utan finns i AWR, använd istället Visa AWR-rapporten:

SET pages 0 SET lines 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SPOOL .txt SELECT * FROM TABLE(dbms_xplan.display_awr('', NULL, NULL, 'ALL')); SPOLLA AV; 

Obs:Var medveten om att Visa AWR-rapporten (DBMS_XPLAN.DISPLAY_AWR) inte rapporterar om faktiska uppgifter:den har inte ett +ALLSTATS-alternativ och det finns ingen faktisk statistik för genomförandeplanssteg lagrade i AWR

Viktig anmärkning:visningsmarkören och AWR-rapporterna visar bara sql_text (första 1000 tecknen) och inte sql_fulltext. Så, om det behövs, kör följande SQL-skript för att få hela SQL-texten

SET-sidor 0 SET-rader 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SPOOL.txt VÄLJ sql_id, sql_text, sql_fulltext FRÅN v$SQL WHERE sql_id =>'; SPOLLA AV; 

Hämta SQL Monitor-rapport för SQL med hjälp av Parallel Query/DML

Den största fördelen med detta är att det ger en bra bild av hur parallell SQL/DML fungerar över planens stadier och parallella slavar

set trimspool på set trim på set pages 0 set long 10000000 set long chunksize 10000000 set linesize 200 set termout off spool sql_monitor_for_.htm variabel my_rept CLOB; BÖRJA :my_rept :=dbms_sqltune.report_sql_monitor(sql_id => '', report_level => 'ALLA', skriv => 'HTML'); SLUTET; / print :my_rept spool off; ställ in terminen på 

Där &begin_snap och &end_snap och är start- och slutbilds-ID:n.

Hur du tar reda på när den specifika sql-filen kördes

VÄLJ 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 FRÅN dba_stat_hist_databas, dhvn_shot d.dbid OCH dsn.snap_id =dhs.snap_id OCH dsn.dbid =dhs.dbid OCH dsn.instance_number =dhs.instance_number OCH dhs.sql_id ='' OCH dsn.snap_id> &begin_dsn. &end_snap GROUP BY dhs.sql_id, dsn.snap_id, dsn.begin_interval_time, dsn.end_interval_time BESTÄLL AV dsn.snap_id;

Där &begin_snap och &end_snap är start- och slutsnapshot-ID:n.
Utdata från denna sats kommer att se ut som följande:

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

Hur man hittar CBO-statistiken om Ebiz Environment

SELECT owner, table_name, num_rows, TO_CHAR(last_analyzed,'DD-MON-YYYY HH24:MI:SS') last_analyzed FROM all_tables WHERE ägare IN (SELECT upper(oracle_username) sname FROM fnd_oracle_userid BE AND 9_9f ='U' UNION ALLA VÄLJ DISTINCT övre(oracle_username) namn FRÅN fnd_oracle_userid a,fnd_product_installations b WHERE a.oracle_id =b.oracle_id ) BESTÄLLNING EFTER ägare, tabellnamn; 

Utdata från denna sats kommer att se ut som följande:

ÄGARE TABLE_NAME NUM_RADER SENAST_ANALYSED --- ---------- ---------- -------------------- --- 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 041-DEC-6:pre>

Hur får du AWR-rapporterna efter uppgraderingen

AWR-rapporter  kan erhållas för
• hela den period som uppgraderingen pågår.
• Under långa jobb (dvs. mellan ögonblicksbilderna tagna precis innan jobbet startar och precis efter det att det avslutas) .
• Varje enskild ögonblicksbild.

Hur man genererar AWR-rapporterna
(1) Gå till $ORACLE_HOME/rdbms/admin
(2) Kör awrrpt.sql generera AWR-rapporterna.
(3) Välj alltid HTML-rapporttyp.
(4) På en Oracle RAC-instans kommer awrrpti.sql vanligtvis att räcka, eftersom uppgraderingen endast kommer att köras på en Oracle RAC-nod.
AWR-rapporter kan automatiseras. Detta är användbart om du skapar ett stort antal AWR-rapporter, särskilt för på varandra följande ögonblicksbilder. Se avsnittet "Automatisera AWR-rapporter" i Mitt Oracles supportdokument "Prestandadiagnos med Automatic Workload Repository (Dokument 1674086.1)".
Observera att vissa fasta objekt och ordboksobjekt (särskilt WRH$_LATCH_CHILDREN, speciellt om statistik_nivå =ALL, eller det finns en lång lagringsperiod eller ett kort ögonblicksbildintervall) kommer att ha ökat avsevärt under uppgraderingen. Så, fast objekt och ordboksstatistik kan behöva samlas in innan AWR körs.

Relaterade artiklar

Automatic Workload Repository
Oracle ASH (Active Session History)
Oracle Performance Tuning
Hur man skapar en ADDM-uppgift och kontrollerar dess rapport
Hur man hittar sessionsdetaljer i Oracle-databasen


  1. Hur använder jag vårdata jpa för att fråga i jsonb-kolumnen?

  2. Fördelar och nackdelar med att använda lagrade procedurer

  3. Åtgärda Drop Column Bug i Oracle 18c och 19c

  4. Förstå Android.coms självstudie för att spara data i SQL-databaser