常用的数据库优化信息查询

数据库 waitig 390℃ 百度已收录 0评论

常用的数据库优化信息查询

数据库锁表处理

查询锁表情况:
SELECT object_name,machine,s.sid,s.serial#
    FROM gv$locked_object l,dba_objects o,gv$session s
WHERE l.object_id=o.object_id AND l.session_id=s.sid;  
或者:
select object_id,session_id,locked_mode from v$locked_object;
参数:locked_mode :
ORACLE里锁有以下几种模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁,sub share 
3:Row-X 行独占(RX):用于行的修改,sub exclusive 
4:Share 共享锁(S):阻止其他DML操作,share
5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive 
6:exclusive 独占(X):独立访问使用,exclusive
杀死进程
alter system kill session 'sid,serial#'

查看归档日志

查看归档日志使用情况
 select * from v$flash_recovery_area_usage;
    --如果超过90%随时有宕机的危险
删除归档日志
delete expired archivelog all;(全部删除)

delete archivelog until time 'sysdate - 1';(保留当天删除,删除之前所有)
也可以:$ORACLE_BASE/flash_recovery_area/你的实例名/archivelog/这个路径下,找到归档日志文件,把没用的删了

这个删除归档日志,最好还是由DBA进行操作,非专业人员还是不要瞎搞事情。查查使用情况就好了


一些性能审计查询

查看数据库中表的空间占用情况:
之后补上
查看表空间使用:
select    
    b.tablespace_name "表空间",  
    b.bytes/1024/1024 "大小M",  
    (b.bytes-sum(nvl(a.bytes,0)))/1024/1024 "已使用M",  
    substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) "利用率"  
from dba_free_space a,dba_data_files b  
where a.file_id=b.file_id  
  and b.tablespace_name='SYSTEM'  
group by b.tablespace_name,b.file_name,b.bytes  
order by b.tablespace_name;  
或者:
SELECT a.tablespace_name "表空间名", 
    total "表空间大小", 
    free "表空间剩余大小", 
    (total - free) "表空间使用大小", 
    total / (1024 * 1024 * 1024) "表空间大小(G)", 
    free / (1024 * 1024 * 1024) "表空间剩余大小(G)", 
    (total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", 
    round((total - free) / total, 4) * 100 "使用率 %" 
FROM (SELECT tablespace_name, SUM(bytes) free 
    FROM dba_free_space 
    GROUP BY tablespace_name) a, 
    (SELECT tablespace_name, SUM(bytes) total 
        FROM dba_data_files 
        GROUP BY tablespace_name
    ) b 
WHERE a.tablespace_name = b.tablespace_name 
查看最占空间的10个东东:
SELECT *  
  FROM (SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MB  
          FROM DBA_SEGMENTS  
         WHERE TABLESPACE_NAME = 'SYSTEM'  
         GROUP BY SEGMENT_NAME  
         ORDER BY 2 DESC)  
 WHERE ROWNUM < 10;  
sys_lob 的AUD$ 占用大小 数据块数目 【这个不知道干啥的,没用过】
SELECT A.TABLE_NAME, 
   A.COLUMN_NAME, 
   B.SEGMENT_NAME, 
   B.SEGMENT_TYPE, 
   B.TABLESPACE_NAME, 
   B.BYTES / 1024 / 1024, 
   B.BLOCKS, 
   B.EXTENTS 
 FROM USER_LOBS A, USER_SEGMENTS B 
WHERE A.SEGMENT_NAME = B.SEGMENT_NAME 
ORDER BY B.BYTES DESC; 
查看Oracle的连接数

select count(*) from v$session;

查看Oracle的并发连接数

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

查询数据库允许的最大连接数:

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

查看不同用户的连接数
select username,count(username) from v$session where username is not null group by username;

20171104 整理 小杭
数据库:Oracle 版本不知道



本文由【waitig】发表在等英博客
本文固定链接:常用的数据库优化信息查询
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)