查找bad sql的方法
查找bad sql的方法查找运行系统里bad sql是一个古老的话题, 我们要根据自己的实际情况来分析。
绝不能教条的运用下面介绍的这些方法。
使用这些SQL语句时,会对系统表产生分组操作,当然也增大了系统的负载。
建议大家在系统启动了一段时间后,在半夜负载较轻的时间定时(例如:一个月)来查一查。一定要具体问题具体分析。
下面是我收藏的一些查找bad sql的方法:
column sql_text format a80;
-- 值得怀疑的SQL 来自http://www.ixora.com.au/
select
substr(to_char(s.pct, @#99.00@#), 2) || @#%@# load,
s.executions executes,
p.sql_text
from
(
select
address,
disk_reads,
executions,
pct,
rank() over (order by disk_reads desc) ranking
from
(
select
address,
disk_reads,
executions,
100 * ratio_to_report(disk_reads) over () pct
from
sys.v_$sql
where
command_type != 47
)
where
disk_reads > 50 * executions
) s,
sys.v_$sqltext p
where
s.ranking <= 5 and
p.address = s.address
order by
1, s.address, p.piece
/
-- 逻辑读多的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;
--查看当前用户&username执行的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;
- · 给SQL Server传送数组参数的变通办法
- · SQL Server数据库实用小技巧集合
- · 改善SQL Server内存管理
- · 牢记!SQL Server数据库开发的二十一条军规
- · SQL Server2000数据库系统表的应用
- · SQL Server数据库实用小技巧集合
- · SQL Server中删除重复数据的几个方法
- · SQLServer数据库安全规划全攻略
- · SQL Server 2005的30项顶尖特性
- · SqlServer下数据库链接的使用方法
- · 如何解决SQL Server 2000中的连接问题
- · SQL Server 6六种数据移动方法
- · 十大绝招保护SQL Server数据库安全
- · SQL Server连接中三个常见的错误分析
- · SQL Server 2005终于出RTM了
- · 使用SQL存储过程要特别注意的问题-注意顺序读取
- · sql*plus使用的一些技巧
- · SQL Server数据库安全规划全攻略
- · 在SQLSERVER里写了一个Split函数
- · 无法将 SQL Server 2000 MSDE Service Pack 应用到由 .NET Framework SDK 1.0 安装的 MSDE 实例
- · Sqlserver常用的时间函数---GETDATE、GETUTCDATE、DATENAME
- · Power Designer的反向工程
- · T-SQL学习笔记(1)
- · 存储过程编写经验和优化措施
- · My First PL/SQL Procedure
- · 使用正规表达式编写更好的 SQL
- · Ultraedit的SQL Server语法着色模板
- · SQL 2000中的触发器使用
- · T-SQL,动态聚合查询
- · 更改数据库对象的所有者
- · CBO与RBO下的IN/EXISTS
- · 使用SQL语句赋予SQL Server数据库登录用户权限
- · 数据库系统防黑客入侵技术综述
- · 自动安装SQL Server数据库
- · 列出SQL SERVER 所有表,字段名,主键,类型,长度,小数位数等信息
- · SRVCTL 命令详细说明文档(原译)
- · GROW THAT DBA CAREER
- · Character set字符集
- · 小议MSSQL Server 2000的安全及管理
- · 当SQL Server数据库崩溃时如何恢复
- · 使用rman复制数据库
- · 在业务系统中处理小数精度, 四舍五入,全舍弃,全进位的方法
- · 两台SqlServer数据同步解决方案
- · 使用跟踪事件10046
- · PL/SQL DEVELOPER 6 模板格式设计应用指南(原译)

