在数据库优化中sql优化是很重要的一部分,那么如何有效的获取慢sql
一、通过历史执行sql记录
当 INI 参数 ENABLE_MONITOR=1、MONITOR_TIME=1 打开时,显示系统最近 1000 条执行时间超过预定值的 SQL 语句。默认预定值为 1000 毫秒。可通过 SP_SET_LONG_TIME 系统函数修改,通过 SF_GET_LONG_TIME 系统函数查看当前值。
--两个参数均为动态参数,可直接调用系统函数进行修改
SP_SET_PARA_VALUE(1,'ENABLE_MONITOR',1);
SP_SET_PARA_VALUE(1,'MONITOR_TIME',1);
注意:通过 SP_SET_PARA_VALUE 方式修改的参数值仅对当前会话以及新建会话生效,对其它已建立会话不生效。
确定高负载的SQL
在设置性能监视级别为大于0后,可以通过查询动态视图V$LONG_EXEC_SQL或 V$SYSTEM_LONG_EXEC_SQLS来确定高负载的SQL语句。前者显示最近1000条执行时间 较长的SQL语句,,后者显示服务器启动以来执行时间最长语句。例如:
select * from V$LONG_EXEC_SQLS;
或者
select * from V$SYSTEM_LONG_EXEC_SQLS order by exec_time desc;
select * from v$sql_history order by time_used desc
二、通过log_commit日志
1、设置开启日志
--设置SQL过滤规则,只记录必要的SQL,生产环境不要设成1
-- 2 只记录DML语句 3 只记录DDL语句 22 记录绑定参数的语句
--