整理了一些常用的监控语句,适合定时监控或者ansiable监控或者zabbix自定义监控,欢迎大家留言指正和补充
记录当前系统中活动线程的信息
SELECT * FROM V$THREADS;
记录当前正在等待的线程信息
SELECT * FROM V$LATCHES;
当前活动连接数量太大说明业务量太大或者重连机制存在缺陷。
--查询当前所有会话数
select count(*) from v$sessions;
--查看当前数据库中活动会话
select count(*) from v$sessions where state='ACTIVE';
--查看当前非活动会话
select count(*) from v$sessions where state='IDLE';
--结束会话
sp_close_session(sessid); --v$session中查出来的session id
执行时间较长的sql(根据现场情况定义慢sql)
找出已执行超过2秒的活动SQL,根据执行计划等详细内容进一优化
select * from (
SELECT sess_id,sql_text,datediff(ss,last_recv_time,sysdate) Y_EXETIME,
SF_GET_SESSION_SQL(SESS_ID) fullsql,clnt_ip
FROM V$SESSIONS WHERE STATE='ACTIVE')
where Y_EXETIME>=2;
select o.name,l.* from v$lock l,sysobjects o where l.table_id=o.id and blocked=1
with locks as(
select o.name,l.*,s.sess_id,s.sql_text,s.clnt_ip,s.last_send_time from v$lock l,sysobjects o,v$sessions s
where l.table_id=o.id and l.trx_id=s.trx_id ),
lock_tr as ( select trx_id wt_trxid,row_idx blk_trxid from locks where blocked=1),
res as( select sysdate stattime,t1.name,t1.sess_id wt_sessid,s.wt_trxid,
t2.sess_id blk_sessid,s.blk_trxid,t2.clnt_ip,SF_GET_SESSION_SQL(t1.sess_id) fulsql,
datediff(ss,t1.last_send_time,sysdate) ss,t1.sql_text wt_sql from lock_tr s,locks t1,locks t2
where t1.ltype='OBJECT' and t1.table_id<>0 and t2.ltype='OBJECT' and t2.table_id<>0
and s.wt_trxid=t1.trx_id and s.blk_trxid=t2.trx_id)
select distinct wt_sql,clnt_ip,ss,wt_trxid,blk_trxid from res;
--锁超时查询阻塞会话
select a.sess_id,a.sql_text ,a.state,a.trx_id from v$trxwait b ,v$sessions a where b.wait_for_id=a.trx_id;
--释放会话
select * from V$SESSIONS where trx_id=? ; --事物号
sp_close_session(sess_id); --会话号
select dh.trx_id,sh.sess_id,wm_concat(top_sql_text) from V$DEADLOCK_HISTORY dh,V$SQL_HISTORY sh
where dh.trx_id=sh.trx_id and dh.sess_id=sh.sess_id
group by dh.trx_id,sh.sess_id;
通过此句确定使用内存较大的SQL进行针对性的优化。该查询只能查询当前活动STMT上的语句消耗情况,历史情况查询V$SQL_STAT_HISTORY,该视图上保留1w行SQLSTAT历史信息
SELECT "SESSID", MAX_MEM_USED||'KB',SQL_TXT FROM V$SQL_STAT order by MAX_MEM_USED DESC;
select
name 内存池名称,
org_size /1024/1024 参数文件配置大小m,
reserved_size/1024/1024 实际使用大小m
from
v$mem_pool
order by reserved_size desc;
SELECT Upper(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
|| '%' "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,
Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 2 desc;
达梦社区技术https://eco.dameng.com
文章
阅读量
获赞