oracle SQL语句
2015-07-01 22:06
411 查看
oracle SQL语句执行的监控脚本![@more@]
--查找bad sql的方法:
select * from (select buffer_gets, sql_text
from v$sqlarea
where buffer_gets >500000
order by buffer_gets desc) where rownum<=30;
--執行次數SQL
select sql_text,executions from
(select sql_text,executions from v$sqlarea order by executions desc)
where rownum<81;
--讀磁盤多的SQL
select sql_text,disk_reads from
(select sql_text,disk_reads from v$sqlarea order by disk_reads desc)
where rownum<21;
--排序多的SQL
select sql_text,sorts from
(select sql_text,sorts from v$sqlarea order by sorts desc)
where rownum<21;
--分析次數太多,執行次數太少,要用綁定綁定變量寫sql
set pagesize 600;
set linesize 120;
select substr(sql_text,1,80) "sql", count(*), sum(executions) "totexecs"
from v$sqlarea
where executions < 5
group by substr(sql_text,1,80)
having count(*) > 30
order by 2;
--遊標的觀察
set pages 300;
select sum(a.value), b.name
from v$sesstat a, v$statname b
where a.statistic# = b.statistic#
and b.name = 'opened cursors current'
group by b.name;
select count(0) from v$open_cursor;
select user_name,sql_text,count(0) from v$open_cursor
group by user_name,sql_text having count(0)>30;
--查看當前用戶執行的SQL
select sql_text from v$sqltext_with_newlines where (hash_value,address) in
(select sql_hash_value,sql_address from v$session where username='&username')
order by address,piece;
--查找bad sql的方法:
select * from (select buffer_gets, sql_text
from v$sqlarea
where buffer_gets >500000
order by buffer_gets desc) where rownum<=30;
--執行次數SQL
select sql_text,executions from
(select sql_text,executions from v$sqlarea order by executions desc)
where rownum<81;
--讀磁盤多的SQL
select sql_text,disk_reads from
(select sql_text,disk_reads from v$sqlarea order by disk_reads desc)
where rownum<21;
--排序多的SQL
select sql_text,sorts from
(select sql_text,sorts from v$sqlarea order by sorts desc)
where rownum<21;
--分析次數太多,執行次數太少,要用綁定綁定變量寫sql
set pagesize 600;
set linesize 120;
select substr(sql_text,1,80) "sql", count(*), sum(executions) "totexecs"
from v$sqlarea
where executions < 5
group by substr(sql_text,1,80)
having count(*) > 30
order by 2;
--遊標的觀察
set pages 300;
select sum(a.value), b.name
from v$sesstat a, v$statname b
where a.statistic# = b.statistic#
and b.name = 'opened cursors current'
group by b.name;
select count(0) from v$open_cursor;
select user_name,sql_text,count(0) from v$open_cursor
group by user_name,sql_text having count(0)>30;
--查看當前用戶執行的SQL
select sql_text from v$sqltext_with_newlines where (hash_value,address) in
(select sql_hash_value,sql_address from v$session where username='&username')
order by address,piece;
相关文章推荐
- OCR File and Voting Disk Administration by Example - (Oracle 10g)
- Oracle 如何删除1000w条数据?
- oracle运用(三) oracle数据库解锁
- Oracle下基础表(创建表/添加列/更改字段类型/删除字段/修改字段名/ 修改表名/删除表)
- oracle运用(二) oracle数据库完整建表语句
- plsql连接到oracle11g
- Oracle11g安装出现em.ear
- iis System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。”解决方法
- oracle sql 写9乘9
- 五、oracle 表的管理
- 四、oracle 用户管理二
- 三、oracle 用户管理一
- 二、oracle sql*plus常用命令
- Oracle存储过程学习笔记
- Oracle移除表空间的数据文件 ora-00604 ora-01426
- Oracle分组ROLLUP、GROUP BY、GROUPING、GROUPING SETS区别和作用
- 甲骨文战略主导下 MySQL 数据库将走向何方
- oracle alter table
- 修改Oracle XE Listener 占用的1521、8080端口
- Oracle提高sql执行效率的建议