快速检查处理数据库大量会话堵塞卡死情况

Oracle数据库

–查看连接等待数:

  SELECT COUNT (*), event, wait_class
    FROM gv$session_wait
GROUP BY event, wait_class
ORDER BY 1 DESC;

–查看具体机器等待连接数

select t.MACHINE,count(1) from gv$session t 
where t.EVENT='latch: cache buffers chains' group by t.MACHINE;

–查询oracle的连接数

select count(*) from v$session;

–查询oracle的并发连接数

select count(*) from v$session where status='ACTIVE';

–查看不同用户的连接数

select username,count(username) from v$session where username is not null group by username;

–当前的连接数

select count(*) from v$process;

–可用连接数

select value from v$parameter where name = 'processes' ; 

–查看当前活动会话正执行的sql:

  SELECT b.sid,
         b.machine,
         b.username,
         ROUND ( ( (a.cpu_time / a.executions) / 100000), 10) cpu_etime,
         a.executions,
         a.sql_id,
         a.sql_fulltext fullsql,
         a.sql_text,
         A.PARSE_CALLS,
         a.cpu_time,
         b.PROGRAM,
            -- a.BUFFER_GETS,
            'alter system kill session '
         || ''''
         || b.sid
         || ','
         || b.serial#
         || ''''
         || ';',
         b.CLIENT_INFO
    FROM v$sql a, v$session b
   WHERE     executions > 0
         AND b.status = 'ACTIVE'
         AND a.hash_value = b.sql_hash_value
         AND a.SQL_ID = b.SQL_ID
-- and b.USERNAME = 'HX_USER'
-- and   b.sql_id='27gff0m4jutv3'
--and ((cpu_time / executions) / 100000 >= 10)
ORDER BY (cpu_time / executions) DESC,
         a.BUFFER_GETS DESC,
         a.EXECUTIONS DESC,
         a.sql_id;

–根据会话条件关联查杀会话:

SELECT 'kill -9 ' || pp.spid
  FROM v$session ss, v$process pp
 WHERE     status = 'INACTIVE'
       AND SS.PADDR = pp.addr
       AND ss.program LIKE '%JDBC%'
       AND ss.username = 'DB_WSBS';

–查看表空间是否满:

select t.TABLESPACE_NAME,
       TO_CHAR(ROUND(t.TABLESPACE_SIZE * 8 / 1024 / 1024, 2), '99990.00') SIZES,
       TO_CHAR(ROUND(t.USED_SPACE * 8 / 1024 / 1024, 2), '99990.00') USED,
       TO_CHAR(ROUND((t.TABLESPACE_SIZE - t.USED_SPACE) * 8 / 1024 / 1024,2),'99990.00') FREE,
       TO_CHAR(ROUND(T.USED_PERCENT, 2), '99990.00') || '%' PERCENTS
  from dba_tablespace_usage_metrics t
 WHERE t.TABLESPACE_NAME NOT IN
       ('SYSAUX', 'UNDOTBS1', 'UNDOTBS2', 'SYSTEM', 'CSSBBFB')
 order by 2 desc;

–查看是否有锁:

select decode(t.REQUEST, 0, 'Holder:', 'Waiter:') || ' inst_id:' ||
       t.INST_ID || ', sid: ' || t.sid sess,v.username,t.CTIME,v.STATUS,
       t.ID1,v.SQL_ID,       t.id2,       t.LMODE,       t.REQUEST,
       t.TYPE,v.STATUS,v.EVENT,v.type,p.INST_ID,p.SPID,'ps -ef|grep '||p.SPID,'kill -9 '||p.SPID,v.PROGRAM
  from gv$lock t,gv$session v, gv$process p
 where (t.id1, t.id2, t.TYPE) in
       (select id1, id2, type from gv$lock where request > 0) and v.TYPE<>'BACKGROUND'
       and v.INST_ID=t.INST_ID and t.SID=v.SID and p.addr = v.paddr and p.INST_ID=v.INST_ID 
 order by id1, request;
好的,我可以和你模拟一下DWS数据库会话阻塞情况。 首先,我们需要理解什么是DWS数据库会话阻塞。当多个用户同时访问数据库时,如果其中一个用户的会话在执行某个长时间运行的操作时没有释放锁资源,那么其他用户的会话可能阻塞,无法执行他们的操作,这就是DWS数据库会话阻塞。 下面是一个简单的例子,我们可以通过创建两个会话模拟这种情况: Session 1: ``` BEGIN; SELECT * FROM table1 WHERE column1 = 'value1'; ``` Session 2: ``` BEGIN; UPDATE table1 SET column1 = 'new_value' WHERE column1 = 'value1'; ``` 在这个例子中,Session 1 和 Session 2 同时访问了 table1 表,Session 1 执行了一个 SELECT 操作并持有了锁资源,而 Session 2 执行了一个 UPDATE 操作,但需要等待 Session 1 释放锁资源才能继续运行。 现在我们可以模拟这个例子,打开两个终端窗口,分别使用 psql 连接到同一个 DWS 数据库: Terminal 1: ``` $ psql -h your_host_name -p your_port -U your_user_name -d your_database_name ``` Terminal 2: ``` $ psql -h your_host_name -p your_port -U your_user_name -d your_database_name ``` 在 Terminal 1 中,执行以下 SQL 语句: ``` BEGIN; SELECT * FROM table1 WHERE column1 = 'value1'; ``` 现在 Session 1 持有了锁资源并未释放。 在 Terminal 2 中,执行以下 SQL 语句: ``` BEGIN; UPDATE table1 SET column1 = 'new_value' WHERE column1 = 'value1'; ``` 此时,Session 2 需要等待 Session 1 释放锁资源才能继续运行。 这就是一个简单的模拟 DWS 数据库会话阻塞的例子。当然,在实际情况中,会话阻塞可能涉及更复杂的操作和多个会话之间的交互,需要更复杂的调试和解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值