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

来源:互联网 发布:recyclerview 空数据 编辑:程序博客网 时间:2024/05/22 15:36

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

数据库锁表处理

查询锁表情况:
SELECT object_name,machine,s.sid,s.serial#    FROM gv$locked_object l,dba_objects o,gv$session sWHERE 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:none1:null 空2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4:Share 共享锁(S):阻止其他DML操作,share5: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 * from (select segment_name,bytes from dba_segments where owner = USER order by bytes desc ) where rownum <= 30

或者:

         select a.* from(                             select owner,segment_name,SEGMENT_TYPE, round(bytes/1024/1024/1024,2) all_size                              from dba_segments                           where SEGMENT_TYPE='TABLE'                              order by  all_size desc                            ) a where rownum <15;  

占用空间情况 按大小排序

查看表空间使用:
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 版本不知道