点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
select datediff(ss, last_recv_time, sysdate) ss ,
dbms_lob.substr(sf_get_session_sql(sess_id)), --抓取sql的全部内容
curr_sch,
sess_id,
substr(clnt_ip, 8, instr(clnt_ip,':',8)-8)
from v$sessions
where state='ACTIVE'
order by 1 desc;
select * from v$sql_history order by time_used desc;
SELECT * FROM V$SYSTEM_LONG_EXEC_SQLS ORDER BY EXEC_TIME DESC;
select SQL_TXT,EXEC_TIME,MAX_MEM_USED/1024 from V$SQL_STAT_HISTORY order by 3 desc;
select SQL_TXT,EXEC_TIME,MAX_MEM_USED/1024 from V$SQL_STAT order by 3 desc;
select sql_text,
COUNT(0) 执行次数,
max(EXEC_TIME) 最大执行时间,
TRUNC(avg(exec_time),2) 平均执行时间
from v$long_exec_sqls a
group by sql_text
order by COUNT(0) desc,
max(EXEC_TIME);
2.1 慢sql应急处理方法
SP_CLEAR_PLAN_CACHE(plan_id);
plan_id:指定计划 ID,其值可以从动态视图 V$CACHEPLN 中的 CACHE_ITEM 列获
得。
select CACHE_ITEM, from SYS."V$CACHEPLN" where sqlstr like '%LEFT JOIN tss.QN_TELEPHONE_RECORD_TASK%';
select datediff(ss, last_recv_time, sysdate) ss ,
dbms_lob.substr(sf_get_session_sql(sess_id)), --抓取sql的全部内容
'sp_close_session('||sess_id||');'
from v$sessions
where state='ACTIVE' and datediff(ss, last_recv_time, sysdate) >100;
2.2 慢sql日常处理方法
select count(*) from SCHEMA.TABLENAME;--查询表的数据量
--统计信息查询
dbms_stats.table_stats_show('SCHEMA','TABLENAME');--查询表的数据量
dbms_stats.index_stats_show('SCHEMA','INDEXNAME');--查询索引的数据量
dbms_stats.column_stats_show('SCHEMA','TABLENAME','COLUMNNAME');--查询字段数据量
--更新表的统计信息
DBMS_STATS.GATHER_TABLE_STATS('SCHEMA','TABLENAME', NULL, 100, TRUE, 'FOR ALL COLUMNS SIZE AUTO');
--更新索引的统计信息
DBMS_STATS.GATHER_INDEX_STATS('SCHEMA',REC.INDEX_NAME,NULL,100);
--服务器使用脚本更新统计信息
/opt/dmdbms/jdk/bin/java -jar ./statcmd-1.0.4.jar 16 SCHEMA TABLENAME 0 SYSDBA/'密码'@IP:端口
--普通索引
CREATE INDEX "IDXNAME" ON "'SCHEMA'"."TABLENAME"("'COLUMNNAME'" ASC) ONLINE;
--组合索引
CREATE INDEX "IDXNAME" ON "'SCHEMA'"."TABLENAME"("'COLUMNNAME1'" ASC,"'COLUMNNAME2'" ASC) ONLINE;
/*+INDEX(TABLENAME, IDX_NAME)*/--强制使用索引; /*+ENABLE_HASH_JOIN(0)*/--禁用hash join关联; /*+OPTIMIZER_OR_NBEXP(2)*/--条件中含有or时可以使用; --/*+ENABLE_RQ_TO_NONREF_SPL(3)*/--执行计划中有SPL时使用。
SF_INJECT_HINT('SQL_TEXT ','HINT_TEXT', 'add_optimize_or01', '', TRUE, NULL);
SQL_TEXT为需要添加hint的sql文本,必须跟查出来的慢SQL结构保持一致,且尽量保证不与其他sql相同。 HINT_TEXT是具体绑定的hint内容,如ENABLE_HASH_JOIN(0)。 add_optimize_or01是绑定的名称,类似主键ID。
select * from SYSINJECTHINT;

本文作者:王润枫(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




