在做数据库sql优化时,首先要对现有的数据库sql进行优化,主要包括以下几种:
1、数据库正在执行的SQL是?
2、已经执行过得SQL是?
3、最耗时的的前几条SQL是?
4、最耗IO的SQL是?
5、某条SQL执行的计划是?某条SQL上的优化策略是否起作用?
以下,将对上面的几种情况分别陈述。
一、查询正在执行的sql。
select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT
from v$session a, v$sqlarea b
where a.sql_address = b.address AND B.PARSING_SCHEMA_NAME='GTSPM' #PARSING_SCHEMA_NAME 某个用户名
二、查询已经执行过得sql
select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT
from v$sqlarea b WHERE B.PARSING_SCHEMA_NAME='GTSPM' order by first_load_time desc
三、查询性能最差的前N条SQL
SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,
COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea WHERE PARSING_SCHEMA_NAME='GTSPM'
order BY disk_reads DESC )where ROWNUM<10 ;
四、最耗IO的SQL
SELECT se.sid,se.serial#,pr.SPID,se.username,se.status,
se.terminal,se.program,se.MODULE,se.sql_address,st.event,st.
p1text,si.physical_reads,
si.block_changes FROM v$session se,v$session_wait st,
v$sess_io si,v$process pr WHERE st.sid=se.sid AND st.
sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st.
wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC
五、查询sql的执行计划。
查看索引是否生效、是否进行全表扫描、索引使用是否合理。