sql 每天 oracle,oracle每天一句sql

1、查看SQL语句的解析情况:

SELECT *

FROM V$SYSSTAT

WHERE NAME IN

('parse time cpu', 'parse time elapsed', 'parse count (hard)');

这里"parse time cpu”是系统服务时间,"parse time elapsed"是响应时间,用户等待时间waite time = parse time elapsed - parse time cpu。

2、查看是什么SQL语句解析效率比较低:

SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA WHERE ROWNUM<10 ORDER BY PARSE_CALLS;

可以优化这些语句,或者增加Oracle参数SESSION_CACHED_CURSORS的值。

查看使用频率最高的10条sql

select sql_text, executions,sysdate

from (select sql_text,

executions,

rank() over(order by executions desc) exec_rank

from v$sql)

where exec_rank <= 10;

3、根据v$process中的pid值到v$session中找到对应的sid:

SELECT SID, SERIAL#, USERNAME, MACHINE

FROM v$session b

WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = '&pid');

根据sid获取sql

select sql_text from v$sqltext a where a.hash_value=(select sql_hash_value from v$session b where b.SID='&sid')

ORDER BY piece ASC;

4、寻找CPU使用过量的session ,找出高CPU利用率的SQL:

SELECT sql_text

FROM v$sqltext a

WHERE (a.hash_value, a.address) IN

(SELECT decode(sql_hash_value, 0, prev_hash_value, sql_hash_value),

decode(sql_hash_value, 0, prev_sql_addr, sql_address)

FROM v$session b

WHERE b.paddr =

(SELECT addr FROM v$process c WHERE c.spid = '&pid'))

ORDER BY piece ASC;

5、查看每个Session的CPU利用情况:

select ss.sid, se.command, ss.value CPU, se.username, se.program

from v$sesstat ss, v$session se

where ss.statistic# in

(select statistic#

from v$statname

where name = 'CPU used by this session')

and se.sid = ss.sid

and ss.sid > 6

order by ss.sid;

6、比较上述Session(第5个),看那个session的CPU使用时间最多,然后查看该Session的具体情况:

select s.sid, s.event, s.wait_time, w.seq#, q.sql_text

from v$session_wait w, v$session s, v$process p, v$sqlarea q

where s.paddr = p.addr

and s.sid = &p

and s.sql_address = q.address;

得到上述信息后,查看相应操作是否有hash joins 和 full table scans。如果有hash joins 和 full table scans那么必须创建相应的Index或者检查Index是否有效。7、用来查询数据文件、临时文件与表空间对应及数据文件序号:

select ts.tablespace_name, df.file_name, df.file_id, tf.file_name

from dba_tablespaces ts, dba_data_files df, dba_temp_files tf

where ts.tablespace_name = df.tablespace_name(+)

and ts.tablespace_name = tf.tablespace_name(+);

8、根据spid查出正在运行的sql

select b.sid,

b.serial#,

b.status,

b.osuser || ':' || b.terminal || ':' || b.program || '@' ||

b.machine as hostuserapp,

a.piece,

a.sql_text

from v$sqltext_with_newlines a, v$session b

where a.address(+) =

decode(b.sql_hash_value, 0, b.prev_sql_addr, b.sql_address)

and a.hash_value(+) =

decode(b.sql_hash_value, 0, b.prev_hash_value, b.sql_hash_value)

and b.type <> upper('background')

and b.sid in (select b.SID

from v$process a, v$session b

where a.addr = b.PADDR

and a.spid = &spid)

order by b.sid, a.piece;

9、定位消耗资源多的sql

select sql_text from v$sql where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 3000);

10、查询系统资源 (sessions和process连接数情况)

SELECT resource_name,

current_utilization,

max_utilization,

LIMIT,

ROUND(max_utilization / LIMIT * 100) || '%' rate

FROM (SELECT resource_name,

current_utilization,

max_utilization,

TO_NUMBER(initial_allocation) LIMIT

FROM v$resource_limit

WHERE resource_name IN ('processes', 'sessions')

AND max_utilization > 0);

alter system set processes=500 scope=spfile;

alter system set sessions=500 scope=spfile;

然后重启数据库

11、查询当前数据库使用全表扫描的SQL

select a.sid,

a.serial#,

a.username,

a.status,

a.program,

a.machine,

c.sql_text

from v$session a, v$session_wait b, v$sql c

where a.sid = b.sid

and a.sql_hash_value = c.hash_value

and a.sql_address = c.address

and b.event like 'db file scattered read%';

12、查询表空间使用、分配等情况

select (select decode(extent_management,'LOCAL','*',' ') ||

decode(segment_space_management,'AUTO','a ','m ')

from dba_tablespaces where tablespace_name = b.tablespace_name) || nvl(b.tablespace_name,

nvl(a.tablespace_name,'UNKOWN')) name,

MB_Allocated MB_Allocated,

MB_Allocated-nvl(Free_MB,0) used,

nvl(Free_MB,0) free,

((MB_Allocated-nvl(Free_MB,0))/

nvl(Max_MB,MB_Allocated))*100 pct_used,

nvl(Max_MB,MB_Allocated) Max_Size,

decode( Max_MB, 0, 0, (MB_Allocated/Max_MB)*100) pct_max_used

from ( select sum(bytes)/1048576 Free_MB,

max(bytes)/1048576 largest,

tablespace_name

from sys.dba_free_space

group by tablespace_name ) a,

( select sum(bytes)/1048576 MB_Allocated,

sum(maxbytes)/1048576 Max_MB,

tablespace_name

from sys.dba_data_files

group by tablespace_name

union all

select sum(bytes)/1048576 MB_Allocated,

sum(maxbytes)/1048576 Max_MB,

tablespace_name

from sys.dba_temp_files

group by tablespace_name )b

where a.tablespace_name (+) = b.tablespace_name

order by 1

/

13、查询创建表空间的原始语句

SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name) FROM DBA_TABLESPACES TS;

14、查询oracle一张表的数据块上有多少条记录

select dbms_rowid.rowid_block_number(rowid),count(dbms_rowid.rowid_block_number(rowid)) from t group by dbms_rowid.rowid_block_number(rowid);

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID))

------------------------------------ -------------------------------------------

28584 68 -指第28584号块上有68条记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值