Sto cercando una query, che restituirà un elenco di istruzioni SQL a carico elevato. Non voglio utilizzare alcun strumento Oracle come ADDM o AWR. Ho bisogno di una dichiarazione di query, che restituirà istruzioni SQL a carico elevato.Come identificare SQL a carico elevato in Oracle, utilizzando le visualizzazioni oracle?
risposta
Si potrebbe interrogare le tabelle AWR direttamente, che può essere il modo più semplice.
Oppure, una tecnica semplice che usavo su Oracle 8i senza statistiche abilitate, era quella di selezionare l'SQL con il buffer più alto che arriva al rapporto di esecuzione da v $ sql. Si può giocare con questa query per la ricerca solo per le interrogazioni alto numero di esecuzione, o quelli che fanno alta O fisico ecc
Le tabelle AWR e cenere darà una migliore informazione, ma questo potrebbe essere un semplice primo passo:
select a.sql_id, a.ratio, a.executions
from
(
select sql_id, buffer_gets/executions ratio, executions
from v$sql
where executions > 10
order by 2 desc
) a
where rownum <= 10
per trovare rapidamente se si hanno a lungo in esecuzione processi che le vostre risorse guardare V $ sesson_long_ops:
SELECT * FROM v$session_longops
vedi: http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2092.htm
Io vi consiglio di dare un'occhiata a questo troppo: http://docs.oracle.com/cd/B28359_01/server.111/b28274/instance_tune.htm
Si può quindi prendere il SID per trovare l'SQL che è in esecuzione:
SELECT sql_text FROM v$session s
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address
WHERE sid=&sid
Se si esegue unix Si potrebbe anche dare un'occhiata al comando top
(top10
o su diversi tipi di unix) si potrebbe quindi prendere gli ID di processo delle query che consumano più cpu, quindi utilizzare quanto segue per ottenere lo sql incriminato.
SELECT
s.username,
sa.sql_text
FROM v$process p
INNER JOIN v$session s ON p.addr=s.paddr
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address
WHERE s.username IS NOT NULL AND p.spid=&SPID
- 1. Come posso identificare le righe coinvolte in un deadlock Oracle?
- 2. Oracle SQL vs Oracle PL/SQL
- 3. Oracle SQL utilizzando come un jolly
- 4. connettersi in Oracle SQL
- 5. Come aggiungere una finestra mobile a rank() utilizzando Oracle SQL
- 6. INFERIORE O UGUALE A in Oracle SQL
- 7. Come utilizzare le variabili in Oracle SQL Developer?
- 8. Registrazione query SQL Oracle
- 9. Per ciclo in Oracle SQL
- 10. Oracle: Come posso convertire da esadecimale a decimale in Oracle SQL?
- 11. Visualizza l'espansione in Oracle
- 12. migrazione da Oracle a SQL Server
- 13. Supporto Bool Oracle SQL
- 14. MAX (DATA) - SQL ORACLE
- 15. Oracle SQL select distinct
- 16. O stenografia in Oracle SQL?
- 17. Come ottenere tutte le query SQL eseguite in ORACLE?
- 18. Come usare Rollback/Commit in Oracle SQL
- 19. Oracle PL/SQL UTL_FILE.PUT buffering
- 20. Oracle equivalente a SQL Server incluse le colonne nell'indice
- 21. Aggiungi giorni Oracle SQL
- 22. Oracle SQL Developer e PostgreSQL
- 23. Migrazione EF a Oracle
- 24. Alternativa SQL standard a Oracle DECODE
- 25. C# oracle sql preparato statement
- 26. Nome colonna elenco per visualizzazioni utente in oracle
- 27. Come posso monitorare l'attività SQL su Oracle?
- 28. Oracle SQL Developer Come ripristinare le tabelle degli altri utenti?
- 29. Variabili di tabella in Oracle PL/SQL?
- 30. Oracle 10g Ordinamento SQL VARCHAR2
Thx per riproduzione. Potresti mostrarmi quale query devo usare per ottenere i dati da AWR? Più costose istruzioni SQL. Come in questa immagine: http://docs.oracle.com/cd/B19306_01/server.102/b28051/tdppt_sqlid.htm#BABECDJG? BTW. Che ne dici di v $ sqlarea view? – Marshall
Molte di quelle statistiche in tempo reale provengono dalle tabelle di ASH. Se si dovesse avviare il gestore aziendale, è possibile tracciare la propria sessione e vedere quali SQL è in esecuzione per generare tali grafici. Dai un'occhiata a v $ active_session_history e guarda cosa riesci a capire. –