sql >> Database >  >> RDS >> Oracle

Top AWR nuttige vragen voor R12.2/R12.1 Upgrade

R12.1/R12.2 zijn behoorlijk grote en tijdrovende upgrades. We moeten alle langlopende SQL vinden om de prestatieproblemen met de R12.2-upgrade op te lossen. Omdat elke iteratie veel tijd kost, is het belangrijk dat we hebben geprobeerd de prestatieproblemen in minder iteraties te achterhalen en dienovereenkomstig op te lossen

Hier zijn de belangrijkste AWR-vragen om problemen met de R12.2-upgradeprestaties op te lossen

Als SQL zich nog in het geheugen bevindt (cursorcache), kan het volgende worden gebruikt om langlopende SQL's te identificeren die mogelijk nog niet naar de AWR zijn geschreven (eindelijk momentopname)

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(ss.disk_reads) disk_reads, 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) uitvoeringen, SUM(ss_time.application) ss.sharable_mem) sharable_mem, SUM(ss.total_sharable_mem) total_sharable_mem VAN v$sqlstats ss GROEP DOOR ss.sql_id ORDER DOOR 2 DESC) WAAR ROWNUM <=100;

Het volgende SQL-script rapporteert de langstlopende SQL tussen twee 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.disk_reads_delta) disk SUM(dhs.buffer_gets_delta) buffer_gets, SUM(dhs.px_servers_execs_delta) px_server_execs, SUM(dhs.rows_processed_delta) rijen_processed, SUM(dhs.executions_delta) uitvoeringen, ROUND(SUM_delsio/1000000iowait) (dhs.clwait_delta/1000000),0) clwait_secs, ROUND(SUM(dhs.ccwait_delta/1000000),0) ccwait_secs, ROUND(SUM(dhs.apwait_delta/1000000),0) apwait_secs FROM dba_hist_sqlstat dhs dhs.dbid =d.dbid EN snap_id> &begin_snap en snap_id <=&end_snap GROEP DOOR dhs.sql_id BESTEL DOOR 2 DESC) WAAR ROWNUM <=100;

Waar &begin_snap en &end_snap de begin- en eind-snapshot-ID's zijn.
De uitvoer van deze instructie ziet er ongeveer als volgt uit:

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

Opmerking:de verstreken tijd is de maximale verstreken tijd voor alle werknemers van een taak.

Enterprise Manager kan ook worden gebruikt om dure SQL te identificeren wanneer deze zich voordoet.

Verkrijg een display-cursorrapport voor langlopende SQL

Hiervoor  STATISTICS_LEVEL=ALL en _rowsource_execution_statistics =TRUE. Het moet zonder enige vertraging worden uitgevoerd om alle informatie te krijgen, omdat deze informatie anders uit SGA wordt gewist

SET pagina's 0 SET regels 300 SET LONG 10000SET LONGCHUNKSIZE 10000 SPOOL .txt SELECT * FROM TABLE(dbms_xplan.display_cursor('', NULL, 'ALL +ALLSTATS')); SPOEL UIT; 

Als de SQL zich niet meer in het geheugen bevindt, maar in de AWR, gebruik dan het AWR-rapport weergeven:

SET pagina's 0 SET regels 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SPOOL .txt SELECT * FROM TABLE(dbms_xplan.display_awr('', NULL, NULL, 'ALL')); SPOEL UIT; 

Opmerking:houd er rekening mee dat het AWR-rapport weergeven (DBMS_XPLAN.DISPLAY_AWR) geen werkelijke waarden rapporteert:het heeft geen +ALLSTATS-optie en er zijn geen werkelijke statistieken voor uitvoeringsplanstappen opgeslagen in AWR

Belangrijke opmerking:de weergavecursor en AWR-rapporten tonen alleen de sql_text (eerste 1000 tekens) en niet de sql_fulltext. Voer dus, indien nodig, het volgende SQL-script uit om de volledige SQL-tekst te verkrijgen

SET pagina's 0 SET regels 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SPOOL.txt SELECT sql_id, sql_text, sql_fulltext FROM v$SQL WHERE sql_id =''; SPOEL UIT; 

SQL-monitorrapport voor SQL verkrijgen met parallelle query/DML

Het belangrijkste voordeel hiervan is dat het een goed beeld geeft van hoe parallelle SQL/DML presteert in verschillende stadia van het plan en parallelle slaves

set trimspool op set trim op set pagina's 0 set long 10000000 set long chunksize 10000000 set linesize 200 set termout off spool sql_monitor_for_.htm variabele my_rept CLOB; BEGIN :my_rept :=dbms_sqltune.report_sql_monitor(sql_id => '', report_level => 'ALL', typ => 'HTML'); EINDE; / print :mijn_rept spoel uit; termout instellen op 

Waar &begin_snap en &end_snap en zijn de begin- en eindmomentopname-ID's.

Hoe kom je erachter wanneer de specifieke sql is uitgevoerd

SELECT 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 FROM dba_hist_sqlstat_hist_sqlstat_dhsd =d.dbid AND dsn.snap_id =dhs.snap_id AND dsn.dbid =dhs.dbid AND dsn.instance_number =dhs.instance_number AND dhs.sql_id ='' AND dsn.snap_id> &begin_snap en dsids &end_snap GROEP OP dhs.sql_id, dsn.snap_id, dsn.begin_interval_time, dsn.end_interval_time BESTELLEN OP dsn.snap_id;

Waar &begin_snap en &end_snap de begin- en eind-snapshot-ID's zijn.
De uitvoer van deze instructie ziet er ongeveer als volgt uit:

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.620 23123 2k3uw8n473r30. 

Hoe de CBO-statistieken op Ebiz Environment te vinden

SELECT owner, table_name, num_rows, TO_CHAR(last_analyzed,'DD-MON-YYYY HH24:MI:SS') last_analyzed FROM all_tables WHERE owner IN (SELECT upper(oracle_username) sname FROM fnd_oracle_userid WHERE oracle_id 999 TUSSEN alleen-lezen_900 ='U' UNION ALL SELECT DISTINCT upper(oracle_username) sname VAN fnd_oracle_userid a,fnd_product_installations b WAAR a.oracle_id =b.oracle_id ) ORDER OP eigenaar, table_name; 

De uitvoer van deze verklaring ziet er ongeveer als volgt uit:

OWNER TABLE_NAME NUM_ROWS LAST_ANALYZED --- --------- ---------- --------------------- --- 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-2016 08:46:36

Hoe de AWR-rapporten te krijgen na de upgrade

AWR-rapporten  kunnen worden verkregen voor
• De hele periode dat de upgrade wordt uitgevoerd.
• Voor de duur van langlopende taken (d.w.z. tussen de momentopnamen die zijn gemaakt vlak voordat de taak begint en net nadat deze is voltooid) .
• Elke afzonderlijke momentopname.

Hoe de AWR-rapporten te genereren
(1) Ga naar $ORACLE_HOME/rdbms/admin
(2) Voer awrrpt.sql uit om de AWR-rapporten te genereren.
(3) Kies altijd het HTML-rapporttype.
(4) Op een Oracle RAC-instantie is awrrpti.sql meestal voldoende, omdat de upgrade slechts op één Oracle RAC-knooppunt wordt uitgevoerd.
AWR-rapporten kunnen worden geautomatiseerd. Dit is handig bij het produceren van een groot aantal AWR-rapporten, met name voor opeenvolgende snapshots. Zie de sectie "Automatisering van AWR-rapporten" in het My Oracle Support-document "Performance Diagnosis with Automatic Workload Repository (Document 1674086.1)".
Merk op dat sommige vaste objecten en woordenboekobjecten (met name WRH$_LATCH_CHILDREN, vooral als statistics_level =ALL, of er is een hoge bewaarperiode of een kort momentopname-interval) aanzienlijk zijn gegroeid tijdens de upgrade. Het kan dus nodig zijn statistieken over vaste objecten en woordenboeken te verzamelen voordat AWR's worden uitgevoerd.

Gerelateerde artikelen

Automatic Workload Repository
Oracle ASH (Active Session History)
Oracle Performance Tuning
Hoe een ADDM-taak te maken en het bijbehorende rapport te controleren
Sessiedetails vinden in de Oracle-database


  1. Retourneer SETOF-rijen van de PostgreSQL-functie

  2. De beste manier om te testen of een rij bestaat in een MySQL-tabel

  3. CLOB invoegen in Oracle-database

  4. Hoe geef ik letterlijk de datum op bij het schrijven van SQL-query's vanuit SQL Server die is gekoppeld aan Oracle?