架构师

您现在的位置是:首页 > 技术博客 > 数据库

数据库

oracle锁表查询,资源占用,连接会话,低效SQL等性能检查

架构师小跟班 2019-08-26 数据库
查询oracle用户名,机器名,锁表对象select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user_name, s.machine, s.t

查询oracle用户名,机器名,锁表对象

select l.session_id sid,
      s.serial#,
      l.locked_mode,
      l.oracle_username,
      l.os_user_name,
      s.machine,
      s.terminal,
      o.object_name,
      s.logon_time
 from v$locked_object l, all_objects o, v$session s
where l.object_id = o.object_id
  and l.session_id = s.sid
       order by sid, s.serial#;

查询导致锁表的SQL语句

select l.session_id sid,
      s.serial#,
      l.locked_mode,
      l.oracle_username,
      s.user#,
      l.os_user_name,
      s.machine,
      s.terminal,
      a.sql_text,
      a.action
 from v$sqlarea a, v$session s, v$locked_object l
where l.session_id = s.sid
  and s.prev_sql_addr = a.address
order by sid, s.serial#;

select b.sql_text
 from v$session a, v$sql b
where a.sid = 6 --session_id
         and a.SQL_ADDRESS = b.ADDRESS(+);

锁表查询

select count(*) from v$locked_object;
select * from v$locked_object;

查询哪个表被锁

SELECT
b.OWNER,
b.object_name,
a.session_id,
a.locked_mode 
FROM
v$locked_object a,
dba_objects b 
WHERE
b.object_id = a.object_id;

查询哪个session引起的锁表

SELECT
b.username,
b.sid,
b.serial #, b.logon_time
FROM
v$locked_object a,
v$ SESSION b 
WHERE
a.session_id = b.sid 
ORDER BY
b.logon_time;

杀掉进程

--3028:SID,15898:
SERIAL#
alter system kill session '3028,15898';

显示正在等待锁的所有会话

select * from dba_waiters;

查询表空间使用情况(最常用)

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
1;

查看空间占用多的表或索引

SELECT
segment_name 对象,
segment_type 对象类型,
bytes / 1024 / 1024 MB,
tablespace_name 表空间名称 
FROM
user_segments 
ORDER BY
bytes DESC;

注意:查看ins用户下的表的空间要使用ins用户登录数据库





文章评论