oracle表空间使用率
ORACLE 临时表空间使用率过高的原因及解决方案(转)
【转】ORACLE 临时表空间使用率过高的原因及解决方案在数据库的日常学习中,发现公司生产数据库的默认临时表空间temp使用情况达到了30G,使用率达到了100%;待调整为32G后,使用率还是为100%,导致磁盘空间使用紧张。
根据临时表空间的主要是对临时数据进行排序和缓存临时数据等特性,待重启数据库后,temp 会自动释放。
于是想通过重启数据库的方式来缓解这种情况,但是重启数据库之后,发现临时表空间temp的使用率还是100%,一点没变。
虽然运行中应用暂时没有报什么错误,但是这在一定程度上存在一定的隐患,有待解决该问题。
由于临时表空间主要使用在以下几种情况:1、order by or group by (disc sort占主要部分);2、索引的创建和重创建;3、distinct操作;4、union & intersect & minus sort-merge joins;5、Analyze 操作;6、有些异常也会引起TEMP的暴涨。
Oracle临时表空间暴涨的现象经过分析可能是以下几个方面的原因造成的:1. 没有为临时表空间设置上限,而是允许无限增长。
但是如果设置了一个上限,最后可能还是会面临因为空间不够而出错的问题,临时表空间设置太小会影响性能,临时表空间过大同样会影响性能,至于需要设置为多大需要仔细的测试。
2.查询的时候连表查询中使用的表过多造成的。
我们知道在连表查询的时候,根据查询的字段和表的个数会生成一个迪斯卡尔积,这个迪斯卡尔积的大小就是一次查询需要的临时空间的大小,如果查询的字段过多和数据过大,那么就会消耗非常大的临时表空间。
3.对查询的某些字段没有建立索引。
Oracle中,如果表没有索引,那么会将所有的数据都复制到临时表空间,而如果有索引的话,一般只是将索引的数据复制到临时表空间中。
针对以上的分析,对查询的语句和索引进行了优化,情况得到缓解,但是需要进一步测试。
总结:1.SQL语句是会影响到磁盘的消耗的,不当的语句会造成磁盘暴涨。
oracle数据库监控指标
oracle数据库监控指标Oracle数据库监控是确保数据库正常运行和性能优化的重要任务之一。
下面是一些常见的Oracle数据库监控指标:1. CPU利用率,监控数据库服务器的CPU利用率,以确保系统资源足够支持数据库的正常运行。
高CPU利用率可能表示系统负载过重或者存在性能问题。
2. 内存利用率,监控数据库服务器的内存利用率,包括SGA (System Global Area)和PGA(Program Global Area)的利用情况。
内存不足可能导致数据库性能下降或者出现内存溢出错误。
3. 磁盘空间利用率,监控数据库服务器上的磁盘空间利用率,包括数据文件、日志文件和临时文件等。
磁盘空间不足可能导致数据库无法正常写入数据或者执行其他操作。
4. 数据库连接数,监控数据库的并发连接数,以确保数据库能够处理足够的请求。
高连接数可能导致性能下降或者资源竞争。
5. 数据库会话,监控活动会话和等待事件的情况,以及锁定和死锁等问题。
会话的长时间等待可能表示性能问题或者资源争用。
6. 数据库响应时间,监控数据库的响应时间,包括查询响应时间、事务处理时间等。
高响应时间可能表示数据库性能问题或者缓慢的查询语句。
7. 数据库日志,监控数据库的日志文件,包括错误日志、警告日志和审计日志等。
日志中的错误和警告信息可以帮助识别和解决潜在的问题。
8. 数据库备份和恢复,监控数据库的备份和恢复情况,包括备份的完成时间、备份文件的完整性等。
及时的备份和恢复可以保护数据库的数据安全。
9. 数据库性能指标,监控数据库的性能指标,如平均响应时间、平均等待时间、IO吞吐量等。
这些指标可以帮助评估数据库的性能,并进行性能调优。
10. 数据库版本和补丁,监控数据库的版本和已安装的补丁情况,以确保数据库的安全性和稳定性。
及时应用数据库的补丁可以修复已知的安全漏洞和错误。
以上是一些常见的Oracle数据库监控指标,通过监控这些指标可以及时发现和解决数据库的性能问题,确保数据库的正常运行和高效性能。
zabbix oracle表空间自动发现规则
Zabbix是一种流行的企业级监控系统,它可以帮助用户实时监视各种IT设备和应用程序的性能,以及系统内部的各种指标。
在使用Zabbix 进行监控的过程中,自动发现规则是一个非常重要的功能,它可以帮助用户自动识别和监控新添加的设备和应用程序,大大减轻了管理员手动添加监控项的工作量。
本文将介绍Zabbix中如何使用自动发现规则来监控Oracle数据库表空间的使用情况。
1. 什么是Oracle表空间Oracle数据库中的表空间是用来存储数据库对象的逻辑容器,它可以包含一个或多个物理数据文件。
表空间是数据库管理员用来管理存储空间的重要工具,它可以帮助管理员对数据库中的数据进行有效的组织和分配存储空间。
2. 为什么需要监控Oracle表空间合理的表空间使用是数据库运行稳定的重要保证,过小的表空间可能导致数据库性能下降,甚至宕机,而过大的表空间则会浪费宝贵的存储资源。
对Oracle数据库的表空间进行实时监控是非常必要的,它可以帮助管理员及时发现并解决存储空间不足的问题,保障数据库的稳定运行。
3. 使用Zabbix自动发现规则监控Oracle表空间在Zabbix中,可以使用自动发现规则来自动识别并监控Oracle数据库中的表空间。
要实现这一功能,需要进行以下步骤:a) 创建自动发现规则进入Zabbix的管理界面,在“配置”-“自动发现”中创建一个新的自动发现规则,设置好规则的名称、条件以及相关参数。
b) 配置发现动作在创建好自动发现规则后,需要创建一个发现动作,用来在发现到新的表空间时自动添加监控项。
c) 设置监控项原型通过自动发现规则,可以在Zabbix中自动创建并管理数据库中所有的表空间监控项原型,这些监控项原型可以根据数据库的实际情况自动添加和删除。
4. 监控Oracle表空间的指标在使用Zabbix监控Oracle表空间的过程中,可以关注一些重要的性能指标,例如表空间使用率、表空间的大小、表空间中数据文件的数量等。
Oracle查询表空间使用情况
Oracle查询表空间使⽤情况 --查询表空间使⽤情况 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; --查询表空间的free space select tablespace_name, count(*) as extends, round(sum(bytes) / 1024 / 1024, 2) as MB, sum(blocks) as blocks from dba_free_space group by tablespace_name; --查询表空间的总容量 select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name; --查询表空间使⽤率 select total.tablespace_name, round(total.MB, 2) as Total_MB, round(total.MB - free.MB, 2) as Used_MB, round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_free_space group by tablespace_name) free, (select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name) total where free.tablespace_name = total.tablespace_name;1.查找当前表级锁的SQL如下:select sess.sid,sess.serial#,lo.oracle_username,lo.os_user_name,ao.object_name,lo.locked_modefrom v$locked_object lo,dba_objects ao,v$session sesswhere ao.object_id = lo.object_id and lo.session_id = sess.sid;2.杀掉锁表进程:alter system kill session '436,35123';3.RAC环境中锁查找:SELECT inst_id,DECODE(request,0,'Holder: ','Waiter: ')||sid sess,id1, id2, lmode, request, type,block,ctimeFROM GV$LOCKWHERE (id1, id2, type) IN(SELECT id1, id2, type FROM GV$LOCK WHERE request>0)ORDER BY id1, request;4.监控当前数据库谁在运⾏什么SQL语句select osuser, username, sql_textfrom v$session a, v$sqltext bwhere a.sql_address =b.address order by address, piece;5.找使⽤CPU多的⽤户sessionselect a.sid,spid,status,substr(a.program,1,40) prog, a.terminal,osuser,value/60/100 value from v$session a,v$process b,v$sesstat cwhere c.statistic#=12 andc.sid=a.sid anda.paddr=b.addrorder by value desc;6.查看死锁信息SELECT (SELECT usernameFROM v$sessionWHERE SID = a.SID) blocker, a.SID, 'is blocking',(SELECT usernameFROM v$sessionWHERE SID = b.SID) blockee, b.SIDFROM v$lock a, v$lock bWHERE a.BLOCK = 1 AND b.request > 0 AND a.id1 = b.id1 AND a.id2 = b.id2;7.具有最⾼等待的对象SELECT o.OWNER,o.object_name, o.object_type, a.event,SUM (a.wait_time + a.time_waited) total_wait_timeFROM v$active_session_history a, dba_objects oWHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATEAND a.current_obj# = o.object_idGROUP BY o.OWNER,o.object_name, o.object_type, a.eventORDER BY total_wait_time DESC;SELECT a.session_id, s.osuser, s.machine, s.program, o.owner, o.object_name,o.object_type, a.event,SUM (a.wait_time + a.time_waited) total_wait_timeFROM v$active_session_history a, dba_objects o, v$session sWHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATEAND a.current_obj# = o.object_idAND a.session_id = s.SIDGROUP BY o.owner,o.object_name,o.object_type,a.event,a.session_id,s.program,s.machine,s.osuserORDER BY total_wait_time DESC;8.查询当前连接会话数select s.value,s.sid,ernamefromv$sesstat S,v$statname N,v$session Awheren.statistic#=s.statistic# andname='session pga memory'and s.sid=a.sidorder by s.value;9.等待最多的⽤户SELECT s.SID, ername, SUM (a.wait_time + a.time_waited) total_wait_time FROM v$active_session_history a, v$session sWHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE GROUP BY s.SID, ernameORDER BY total_wait_time DESC;10.等待最多的SQLSELECT a.program, a.session_id, er_id, ername, s.sql_text,SUM (a.wait_time + a.time_waited) total_wait_timeFROM v$active_session_history a, v$sqlarea s, dba_users dWHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATEAND a.sql_id = s.sql_idAND er_id = er_idGROUP BY a.program, a.session_id, er_id, s.sql_text, ername;11.查看消耗资源最多的SQLSELECT hash_value, executions, buffer_gets, disk_reads, parse_callsFROM V$SQLAREAWHERE buffer_gets > 10000000 OR disk_reads > 1000000ORDER BY buffer_gets + 100 * disk_reads DESC;12.查看某条SQL语句的资源消耗SELECT hash_value, buffer_gets, disk_reads, executions, parse_callsFROM V$SQLAREAWHERE hash_Value = 228801498 AND address = hextoraw('CBD8E4B0'); 13.查询会话执⾏的实际SQLSELECT a.SID, ername, s.sql_textFROM v$session a, v$sqltext sWHERE a.sql_address = s.addressAND a.sql_hash_value = s.hash_valueAND a.status = 'ACTIVE'ORDER BY ername, a.SID, s.piece;14.显⽰正在等待锁的所有会话SELECT * FROM DBA_WAITERS;。
oracle监控指标
oracle监控指标
Oracle数据库的监控指标包括:
1. CPU利用率:监控数据库服务器的CPU使用情况,包括执行SQL语句、查询和更新数据等操作的CPU使用情况。
2. 内存利用率:监控数据库服务器的内存使用情况,包括SGA(System Global Area)、PGA(Program Global Area)等共享和私有内存的使用情况。
3. I/O利用率:监控数据库服务器的磁盘I/O操作,包括读写数据文件、日志文件和临时文件的操作情况。
4. 网络流量:监控数据库服务器的网络传输情况,包括接收和发送数据的网络流量。
5. 锁和等待事件:监控数据库中的锁和等待事件,包括查询正在等待资源的会话和锁定资源的会话。
6. 数据库连接数:监控数据库的连接数,包括当前连接数、活动会话数、最大会话数等。
7. SQL执行性能:监控数据库中的SQL语句的执行性能,包括执行时间、CPU
消耗、磁盘和内存等待时间等。
8. 数据库事务:监控数据库的事务提交和回滚的情况,包括事务的提交数、回滚数等。
9. 数据库对象状态:监控数据库中的表、索引、分区等对象的使用情况,包括空间使用情况、上次分析时间、统计信息等。
10. 日志和备份:监控数据库的日志和备份情况,包括日志文件的写入速度、备份的状态和完成时间等。
以上是一些常见的Oracle数据库监控指标,可以通过使用Oracle的监控工具和性能管理工具来收集和分析这些指标,以便及时发现和解决数据库性能和健康问题。
Oracle中查询表的大小、表的占用情况和表空间的大小
Oracle中查询表的⼤⼩、表的占⽤情况和表空间的⼤⼩有两种含义的表⼤⼩。
⼀种是分配给⼀个表的物理空间数量,⽽不管空间是否被使⽤。
可以这样查询获得字节数:select segment_name, bytesfrom user_segmentswhere segment_type = 'TABLE';或者Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name另⼀种表实际使⽤的空间。
这样查询:analyze table emp compute statistics;select num_rows * avg_row_lenfrom user_tableswhere table_name = 'EMP';查看每个表空间的⼤⼩Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name1.查看剩余表空间⼤⼩SELECT tablespace_name 表空间,sum(blocks*8192/1000000) 剩余空间M FROM dba_free_space GROUP BY tablespace_name;2.检查系统中所有表空间总体空间select ,sum(a.bytes/1000000)总空间 from v$datafile a,v$tablespace b where a.ts#=b.ts# group by ; 1、查看Oracle数据库中表空间信息的⼯具⽅法: 使⽤oracle enterprise manager console⼯具,这是oracle的客户端⼯具,当安装oracle服务器或客户端时会⾃动安装此⼯具,在windows操作系统上完成oracle安装后,通过下⾯的⽅法登录该⼯具:开始菜单——程序——Oracle-OraHome92——Enterprise Manager Console(单击)——oracle enterprise manager console登录——选择‘独⽴启动’单选框——‘确定’ —— ‘oracle enterprise manager console,独⽴’ ——选择要登录的‘实例名’ ——弹出‘数据库连接信息’ ——输⼊’⽤户名/⼝令’ (⼀般使⽤sys⽤户),’连接⾝份’选择选择SYSDBA——‘确定’,这时已经成功登录该⼯具,选择‘存储’ ——表空间,会看到如下的界⾯,该界⾯显⽰了表空间名称,表空间类型,区管理类型,以”兆”为单位的表空间⼤⼩,已使⽤的表空间⼤⼩及表空间利⽤率。
ORACLE建表空间、用户、更改物理路径、查询使用率大全
-------创建表空间\如果担心一个表空间不够可增加多个物理文件自动增加create tablespace xxx DATAFILE 'E:\app\xxx\oradata\orcl\xxx.DBF' SIZE 50M AUTOEXTEND ON; ALTER tablespace xxx add DATAFILE 'E:\app\xxx\oradata\orcl\xxx_01.DBF' SIZE 50M AUTOEXTEND ON;ALTER tablespace xxx add DATAFILE 'E:\app\xxx\oradata\orcl\xxx_02.DBF' SIZE 50M AUTOEXTEND ON;ALTER tablespace xxx add DATAFILE 'E:\app\xxx\oradata\orcl\xxx_03.DBF' SIZE 50M AUTOEXTEND ON;ALTER tablespace xxx add DATAFILE 'E:\app\xxx\oradata\orcl\xxx_04.DBF' SIZE 50M AUTOEXTEND ON;---创建临时表空间\空间自动增加create temporary tablespace xxx_TEMP tempfile 'E:\app\xxx\oradata\orcl\xxx_TEMP.dbf'size 50m autoextend on next 50m maxsize 30720m extent management local;---创建用户CREATE USER xxx IDENTIFIED BY 1 DEFAULT TABLESPACE xxx TEMPORARY TABLESPACE QXGK_TEMP;---用户授权grant connect,resource,dba to xxx;---删除表空间drop tablespace xxx including contents and datafiles cascade constraints ;drop tablespace xxx_TEMP including contents and datafiles cascade constraints ;----如果删除失败需要查询哪个用户在使用select * from dba_users t where t.default_tablespace=xxx;--进行删除用户信息之后删除表空间就不会报错了drop user xxx cascade;---------查看表空间使用情况select a.tablespace_name as "表空间名",a.bytes / 1024 / 1024 as "表空间大小(M)",(a.bytes - b.bytes) / 1024 / 1024 as "已使用空间(M)",b.bytes / 1024 / 1024 "空闲空间(M)",round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"from (select tablespace_name, sum(bytes) bytesfrom dba_data_filesgroup by tablespace_name) a,(select tablespace_name, sum(bytes) bytes, max(bytes) largestfrom dba_free_spacegroup by tablespace_name) bwhere a.tablespace_name = b.tablespace_nameorder by ((a.bytes - b.bytes) / a.bytes) desc;----------1、查看表空间的名字及文件所在位置select tablespace_name,file_id,file_name,round(bytes / (1024 * 1024), 0) total_spacefrom dba_data_filesorder by tablespace_name----------2、扩展所需表空间大小alter database datafile 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\xxx.DBF' resize 1024m;----对于Oracle数据库的表空间,除了用手动增加大小外,还可以增加数据文件等方式扩展表空间大小。
如何查看ORACLE空间占用问题
1、查看ORACLE表空间及表数据大小Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents group By Segment_Name order by Sum(bytes)/1024/1024 desc;2、从返回的结果看,有一个segment名为"SYS_LOB0000053810C00004$$"的对象占用了大量的空间;即LOB(BLOB和CLOB)对象占用的大小对象3、根据segment_name,就可以从dba_lobs 表里查到是哪个表,哪个字段;select * from dba_lobs where segment_name like 'your_segment_name';里面显示的TABLE_NAME和COLUMN_NAME为表名和字段名。
set pagesize 200column "数据文件名称" format a25column "表空间名称" format a18column "容量(M)" format a12column "使用率%" format a12column "最大容量(M)" format a15column "可扩充容量(M)" format a15column "空闲(M)" format a12column "自动扩展" format a10select a.FILE_NAME "数据文件名称",a.TABLESPACE_NAME"表空间名称",to_char(100-round((nvl(b.free_bytes,0)/a.BYTES)*100,2)) "使用率%", to_char(round(a.BYTES/1024/1024,2)) "容量(M)",to_char(round(nvl(b.free_bytes,0)/1024/1024,2)) "空闲(M)",to_char(round(decode(a.autoextensible,'YES',a.maxbytes/1024/1024,'NO' ,a.bytes/1024/1024),2)) "最大容量(M)",a.autoextensible "自动扩展",to_char(round(decode(a.autoextensible,'YES',a.maxbytes/1024/1024,'NO' ,a.bytes/1024/1024)-a.BYTES/1024/1024,2)) "可扩充容量(M)"from dba_data_files a,(select FILE_ID,sum(bytes) free_bytes from dba_free_space groupby FILE_ID) bwhere a.FILE_ID=b.FILE_IDorderby to_number("可扩充容量(M)") asc;。
Oracle查看表空间使用情况
1.查看表空间已经使用的百分比
select a.tablespace_name,
a.bytes / 1024 / 1024 "Sum MB",
(a.bytes - b.bytes) / 1024 / 1024 "used MB",
据文件,每个数据文件是否自动扩展,可以自动扩展的最大值。
select file_name,tablespace_name,bytes/1024/1024 "bytes MB",maxbytes/1024/1024 "maxbytes MB" from dba_data_files
b.bytes / 1024 / 1024 "free MB",
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "percent_used"
from (select tablespace_name, sum(bytes) bytes
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
order by ((a.bytes - b.bytes) / a.bytes) desc
“Sum MB”表示表空间所有的数据文件总共在操作系统占用磁盘空间的大小
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(bytes) bytes, max(bytes) largest
查看Oracle表空间使用情况
(select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a,
(select tablespace_name,sum(bytes) bytes,max(bytes) largest from dba_free_space group by tablespace_name) b
用操作系统UNIX、Linux中的df -g命令(查看下可以使用的磁盘空间大小)
获取创建表空间的语句:
select dbms_metadata.get_ddl('TABLESPACE','MLOG_NORM_SPACE') from dual;
4.确认磁盘空间足够,增加一个数据文件
alter tablespace MLOG_NORM_SPACE
add datafile '/oracle/oms/oradata/mlog/Mlog_Norm_data001.dbf'
size 10M autoextend on maxsize 20G
SU.BLOCKS * TO_NUMBER(RTRIM(P.VALUE)) AS SPACE,
TABLESPACE,
SEGTYPE,
SQL_TEXT
FROM V$SORT_USAGE SU, V$PARAMETER P, V$SESSION SE, V$SQL S
“userd MB”表示表空间已经使用了多少
“free MB”表示表空间剩余多少
“percent_user”表示已经使用的百分比
2.比如从1中查看到MLOG_NORM_SPACE表空间已使用百分比达到90%以上,可以查看该表空间总共有几个数
Oracle查询表空间使用率很慢
Oracle查询表空间使⽤率很慢Oracle查询表空间使⽤率很慢问题描述执⾏查询表空间的语句,需要接近2min的时间才能执⾏完成。
以前也在其他客户的⽣产库遇到过⼀样的情况,当时是由于回收站的内容过多引起的。
不过这次的情况却不是这样,因为回收站的内容并不多。
调试分析⽼⽅法,设置statistics_level=all获取详细的执⾏情况,如下:20:32:05 SYS@anonymous>SELECT a.tablespace_name,20:32:052ROUND (a.bytes_alloc /1024/1024, 2) megs_alloc,20:32:053ROUND (NVL (b.bytes_free, 0) /1024/1024, 2) megs_free,20:32:054ROUND ((a.bytes_alloc - NVL (b.bytes_free, 0)) /1024/1024, 2 ) megs_used,20:32:055ROUND ((NVL (b.bytes_free, 0) / a.bytes_alloc) *100, 2) pct_free,20:32:056100-ROUND ((NVL (b.bytes_free, 0) / a.bytes_alloc) *100, 2) pct_used,20:32:057ROUND (maxbytes /1048576, 2) MAX20:32:058FROM20:32:059 (SELECT f.tablespace_name,20:32:0510SUM (f.BYTES) bytes_alloc,20:32:0511SUM (DECODE (f.autoextensible, 'YES', f.maxbytes, 'NO', f.BYTES ) ) maxbytes20:32:0512FROM dba_data_files f20:32:0513GROUP BY tablespace_name20:32:0514 ) a,20:32:0515 (SELECT f.tablespace_name,20:32:0516SUM (f.BYTES) bytes_free20:32:0517FROM dba_free_space f20:32:0518GROUP BY tablespace_name20:32:0519 ) b20:32:0520WHERE a.tablespace_name = b.tablespace_name(+)20:32:0521UNION ALL20:32:0522SELECT h.tablespace_name,20:32:0523ROUND (SUM (h.bytes_free + h.bytes_used) /1048576, 2) megs_alloc,20:32:0524ROUND ( SUM ((h.bytes_free + h.bytes_used) - NVL (p.bytes_used, 0)) /1048576, 2 ) megs_free,20:32:0525ROUND (SUM (NVL (p.bytes_used, 0)) /1048576, 2) megs_used,20:32:0526ROUND ( ( SUM ( (h.bytes_free + h.bytes_used) - NVL (p.bytes_used, 0) ) /SUM (h.bytes_used + h.bytes_free) ) *100, 2 ) pct_free,20:32:0527100-ROUND ( ( SUM ( (h.bytes_free + h.bytes_used) - NVL (p.bytes_used, 0) ) /SUM (h.bytes_used + h.bytes_free) ) *100, 2 ) pct_used,20:32:0528ROUND (SUM (f.maxbytes) /1048576, 2) MAX20:32:0529FROM SYS.v_$temp_space_header h,20:32:0530 SYS.v_$temp_extent_pool p,20:32:0531 dba_temp_files f20:32:0532WHERE p.file_id(+) = h.file_id20:32:0633AND p.tablespace_name(+) = h.tablespace_name20:32:0634AND f.file_id= h.file_id20:32:0635AND f.tablespace_name = h.tablespace_name20:32:0636GROUP BY h.tablespace_name20:32:0637ORDER BY1 ;TABLESPACE_NAME MEGS_ALLOC MEGS_FREE MEGS_USED PCT_FREE PCT_USED MAX------------------------------ ---------- ---------- ---------- ---------- ---------- ----------xxxxxxxxxxxxxxxx 409640197798.12 1.884096xxxxxxxxxxxxxxxx 81922283590927.8772.138192xxxxxxxxxxxxxxxx 2048111393554.3545.652048xxxxxxxxxxxxxxxx 2457616092848465.4834.5224576xxxxxxxxxxxxxxxx 40964095199.98 .024096xxxxxxxxxxxxxxxx 81928187599.94 .068192xxxxxxxxxxxxxxxx 4000337362784.3315.674000xxxxxxxxxxxxxxxx 54630434656119974363.4436.56546304xxxxxxxxxxxxxxxx 40962969112772.4927.514096xxxxxxxxxxxxxxxx 409640861099.76 .244096xxxxxxxxxxxxxxxx 81923047514537.1962.818192xxxxxxxxxxxxxxxx 2766087707819953027.8772.13276608xxxxxxxxxxxxxxxx 163848605777952.5247.4816384xxxxxxxxxxxxxxxx 40962944115271.8828.124096xxxxxxxxxxxxxxxx 1638435751280921.8278.1816384xxxxxxxxxxxxxxxx 40961074302226.2273.784096xxxxxxxxxxxxxxxx 409640712599.39 .614096xxxxxxxxxxxxxxxx 4096391518195.58 4.424096xxxxxxxxxxxxxxxx 163841598440097.56 2.4416384xxxxxxxxxxxxxxxx 327608390.8824369.1325.6174.3932767.98xxxxxxxxxxxxxxxx 536034.135325.88 .6499.3632767.98xxxxxxxxxxxxxxxx 40962946115071.9228.084096xxxxxxxxxxxxxxxx 409640524498.93 1.074096xxxxxxxxxxxxxxxx 2009613860623668.9731.0320096xxxxxxxxxxxxxxxx 1638413068331679.7620.2416384xxxxxxxxxxxxxxxx 2081924093316725919.6680.34208192xxxxxxxxxxxxxxxx 2009616143395380.3319.6720096xxxxxxxxxxxxxxxx 2048189815092.687.322048xxxxxxxxxxxxxxxx 2009616138395880.319.720096xxxxxxxxxxxxxxxx 68096133005479619.5380.4768096xxxxxxxxxxxxxxxx 819281791399.84 .168192xxxxxxxxxxxxxxxx 327673197179697.57 2.4332767.98xxxxxxxxxxxxxxxx 102402371.757868.2523.1676.8410240xxxxxxxxxxxxxxxx 103909292.251097.7589.4310.5732767.98xxxxxxxxxxxxxxxx 4356.25209.384146.88 4.8195.1932767.9835 rows selected.Elapsed: 00:01:54.6220:34:00 SYS@anonymous>select*from table(dbms_xplan.display_cursor(null,null,'allstats last'));PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID 8ks58zbpgra00, child number1-------------------------------------SELECT a.tablespace_name, ROUND (a.bytes_alloc /1024/1024, 2) megs_alloc, ROUND (NVL (b.bytes_free, 0) /1024/1024, 2)megs_free, ROUND ((a.bytes_alloc - NVL (b.bytes_free, 0)) /1024/1024, 2 ) megs_used, ROUND ((NVL (b.bytes_free, 0) /a.bytes_alloc) *100, 2) pct_free, 100-ROUND ((NVL (b.bytes_free, 0) / a.bytes_alloc) *100, 2) pct_used,ROUND (maxbytes /1048576, 2) MAX FROM (SELECTf.tablespace_name, SUM (f.BYTES) bytes_alloc, SUM (DECODE(f.autoextensible, 'YES', f.maxbytes, 'NO', f.BYTES ) ) maxbytes FROMdba_data_files f GROUP BY tablespace_name ) a, (SELECTf.tablespace_name, SUM (f.BYTES) bytes_free FROM dba_free_space fGROUP BY tablespace_name ) b WHERE a.tablespace_name =b.tablespace_name(+) UNION ALL SELECT h.tablespace_name, ROUND (SUM(h.bytes_free + h.bytes_used) /1048576, 2) megs_alloc,ROUND ( SUM ((h.bytes_free + h.bytes_used) - NVL (p.bPlan hash value: 2506036241------------------------------------------------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | OMem | 1Mem | Used-Mem | ------------------------------------------------------------------------------------------------------------------------------------------------------------|0|SELECT STATEMENT ||1||35|00:01:54.53|53354|4865|||||1| SORT ORDER BY||1|3|35|00:01:54.53|53354|4865|4096|4096|4096 (0)||2|UNION-ALL||1||35|00:01:54.53|53354|4865|||||*3| HASH JOIN OUTER||1|2|34|00:01:54.18|53310|4865| 1229K| 1229K| 1243K (0)||4|VIEW||1|2|34|00:00:00.66|444|0|||||5| HASH GROUP BY||1|2|34|00:00:00.66|444|0| 941K| 941K| 1349K (0)||6|VIEW| DBA_DATA_FILES |1|2|108|00:00:00.65|444|0|||||7|UNION-ALL||1||108|00:00:00.65|444|0|||||8| NESTED LOOPS ||1|1|0|00:00:00.57|112|0|||||9| NESTED LOOPS ||1|1|0|00:00:00.57|112|0|||||10| NESTED LOOPS ||1|1|0|00:00:00.57|112|0|||||*11| FIXED TABLE FULL| X$KCCFN |1|1|108|00:00:00.57|0|0|||||*12|TABLE ACCESS BY INDEX ROWID|FILE$ |108|1|0|00:00:00.01|112|0|||||*13|INDEX UNIQUE SCAN | I_FILE1 |108|1|108|00:00:00.01|4|0|||||*14| FIXED TABLE FIXED INDEX| X$KCCFE (ind:1) |0|1|0|00:00:00.01|0|0|||||15|TABLE ACCESS CLUSTER | TS$ |0|1|0|00:00:00.01|0|0|||||*16|INDEX UNIQUE SCAN | I_TS# |0|1|0|00:00:00.01|0|0|||||17| NESTED LOOPS ||1|1|108|00:00:00.08|332|0|||||18| NESTED LOOPS ||1|1|108|00:00:00.08|220|0|||||19| NESTED LOOPS ||1|1|108|00:00:00.01|220|0|||||20| NESTED LOOPS ||1|1|108|00:00:00.01|108|0|||||*21| FIXED TABLE FULL| X$KCCFN |1|1|108|00:00:00.01|0|0|||||*22| FIXED TABLE FIXED INDEX| X$KTFBHC (ind:1) |108|1|108|00:00:00.01|108|0|||||*23|TABLE ACCESS BY INDEX ROWID|FILE$ |108|1|108|00:00:00.01|112|0|||||*24|INDEX UNIQUE SCAN | I_FILE1 |108|1|108|00:00:00.01|4|0|||||*25| FIXED TABLE FIXED INDEX| X$KCCFE (ind:1) |108|1|108|00:00:00.08|0|0|||||26|TABLE ACCESS CLUSTER | TS$ |108|1|108|00:00:00.01|112|0|||||*27|INDEX UNIQUE SCAN | I_TS# |108|1|108|00:00:00.01|4|0|||||28|VIEW||1|31|34|00:01:53.52|52866|4865|||||29| HASH GROUP BY||1|31|34|00:01:53.52|52866|4865| 9291K| 2834K| 1346K (0)||30|VIEW| DBA_FREE_SPACE |1|140| 100K|00:01:53.50|52866|4865|||||31|UNION-ALL||1|| 100K|00:01:53.48|52866|4865|||||32| NESTED LOOPS ||1|1|0|00:00:00.01|38|0|||||33| NESTED LOOPS ||1|1|0|00:00:00.01|38|0|||||34|TABLE ACCESS FULL| FET$ |1|1|0|00:00:00.01|38|0|||||*35|TABLE ACCESS CLUSTER | TS$ |0|1|0|00:00:00.01|0|0|||||*36|INDEX UNIQUE SCAN | I_TS# |0|1|0|00:00:00.01|0|0|||||*37|INDEX UNIQUE SCAN | I_FILE2 |0|1|0|00:00:00.01|0|0|||||38| NESTED LOOPS ||1|88|84440|00:00:00.15|394|0|||||39| NESTED LOOPS ||1|88|84440|00:00:00.06|390|0|||||*40|TABLE ACCESS FULL| TS$ |1|31|34|00:00:00.01|38|0|||||*41| FIXED TABLE FIXED INDEX| X$KTFBFE (ind:1) |34|3|84440|00:00:00.05|352|0|||||*42|INDEX UNIQUE SCAN | I_FILE2 |84440|1|84440|00:00:00.06|4|0|||||*43| HASH JOIN||1|50|16133|00:01:53.30|52396|4865| 2297K| 2297K| 2426K (0)||44| NESTED LOOPS ||1|50|16133|00:01:53.29|52358|4865|||||*45| HASH JOIN||1|808|16133|00:01:53.26|52354|4865| 1753K| 1753K| 1511K (0)||*46|TABLE ACCESS FULL| RECYCLEBIN$ |1|152|191|00:00:00.01|4|0|||||47| FIXED TABLE FULL| X$KTFBUE |1| 100K| 723K|00:01:52.95|52350|4865|||||*48|INDEX UNIQUE SCAN | I_FILE2 |16133|1|16133|00:00:00.01|4|0|||||*49|TABLE ACCESS FULL| TS$ |1|31|34|00:00:00.01|38|0|||||50| NESTED LOOPS ||1|1|0|00:00:00.01|38|0|||||51| NESTED LOOPS ||1|1|0|00:00:00.01|38|0|||||52| MERGE JOIN CARTESIAN ||1|425|0|00:00:00.01|38|0|||||*53|TABLE ACCESS FULL| TS$ |1|3|0|00:00:00.01|38|0|||||54| BUFFER SORT ||0|152|0|00:00:00.01|0|0|73728|73728|||*55|TABLE ACCESS FULL| RECYCLEBIN$ |0|152|0|00:00:00.01|0|0|||||56|TABLE ACCESS CLUSTER | UET$ |0|1|0|00:00:00.01|0|0|||||*57|INDEX UNIQUE SCAN | I_FILE#_BLOCK# |0|1|0|00:00:00.01|0|0|||||*58|INDEX UNIQUE SCAN | I_FILE2 |0|1|0|00:00:00.01|0|0|||||59| HASH GROUP BY||1|1|1|00:00:00.35|44|0| 856K| 856K| 463K (0)||60| NESTED LOOPS OUTER||1|1|1|00:00:00.35|44|0|||||*61| HASH JOIN||1|1|1|00:00:00.35|42|0| 1281K| 1281K| 402K (0)||62| NESTED LOOPS ||1|1|1|00:00:00.35|3|0|||||63| NESTED LOOPS ||1|1|1|00:00:00.35|1|0|||||64| NESTED LOOPS ||1|1|1|00:00:00.35|0|0|||||*65| FIXED TABLE FULL| X$KCCFN |1|1|1|00:00:00.34|0|0|||||*66| FIXED TABLE FIXED INDEX| X$KCCTF (ind:1) |1|1|1|00:00:00.01|0|0|||||*67| FIXED TABLE FIXED INDEX| X$KTFTHC (ind:1) |1|1|1|00:00:00.01|1|0|||||68|TABLE ACCESS CLUSTER | TS$ |1|1|1|00:00:00.01|2|0|||||*69|INDEX UNIQUE SCAN | I_TS# |1|1|1|00:00:00.01|1|0|||||70|VIEW| V_$TEMP_SPACE_HEADER |1|1|1|00:00:00.01|39|0|||||71| NESTED LOOPS ||1|1|1|00:00:00.01|39|0|||||*72|TABLE ACCESS FULL| TS$ |1|1|1|00:00:00.01|38|0|||||*73| FIXED TABLE FIXED INDEX| X$KTFTHC (ind:2) |1|1|1|00:00:00.01|1|0|||||*74|VIEW PUSHED PREDICATE | V_$TEMP_EXTENT_POOL |1|1|1|00:00:00.01|2|0|||| |75| NESTED LOOPS ||1|1|1|00:00:00.01|2|0|||||*76|TABLE ACCESS BY INDEX ROWID | TS$ |1|1|1|00:00:00.01|2|0|||||*77|INDEX UNIQUE SCAN | I_TS1 |1|1|1|00:00:00.01|1|0|||||*78| FIXED TABLE FIXED INDEX| X$KTSTFC (ind:1) |1|1|1|00:00:00.01|0|0||||------------------------------------------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------3- access("A"."TABLESPACE_NAME"="B"."TABLESPACE_NAME")11- filter(("FNNAM" IS NOT NULL AND "FNTYP"=4AND "INST_ID"=USERENV('INSTANCE') AND BITAND("FNFLG",4)<>4))12- filter("F"."SPARE1" IS NULL)13- access("FNFNO"="F"."FILE#")14- filter("FE"."FENUM"="F"."FILE#")16- access("F"."TS#"="TS"."TS#")21- filter(("FNNAM" IS NOT NULL AND "FNTYP"=4AND "INST_ID"=USERENV('INSTANCE') AND BITAND("FNFLG",4)<>4))22- filter("FNFNO"="HC"."KTFBHCAFNO")23- filter("F"."SPARE1" IS NOT NULL)24- access("FNFNO"="F"."FILE#")25- filter("FE"."FENUM"="F"."FILE#")27- access("HC"."KTFBHCTSN"="TS"."TS#")35- filter("TS"."BITMAPPED"=0)36- access("TS"."TS#"="F"."TS#")37- access("F"."TS#"="FI"."TS#" AND "F"."FILE#"="FI"."RELFILE#")40- filter(("TS"."BITMAPPED"<>0AND "TS"."CONTENTS$"=0AND INTERNAL_FUNCTION("TS"."ONLINE$")))41- filter("TS"."TS#"="F"."KTFBFETSN")42- access("F"."KTFBFETSN"="FI"."TS#" AND "F"."KTFBFEFNO"="FI"."RELFILE#")43- access("TS"."TS#"="RB"."TS#")45- access("U"."KTFBUESEGTSN"="RB"."TS#" AND "U"."KTFBUESEGFNO"="RB"."FILE#" AND "U"."KTFBUESEGBNO"="RB"."BLOCK#") 46- filter(("RB"."TS#" IS NOT NULL AND "RB"."FILE#" IS NOT NULL AND "RB"."BLOCK#" IS NOT NULL))48- access("RB"."TS#"="FI"."TS#" AND "U"."KTFBUEFNO"="FI"."RELFILE#")49- filter(("TS"."BITMAPPED"<>0AND "TS"."CONTENTS$"=0AND INTERNAL_FUNCTION("TS"."ONLINE$")))53- filter("TS"."BITMAPPED"=0)55- filter(("RB"."TS#" IS NOT NULL AND "RB"."FILE#" IS NOT NULL AND "RB"."BLOCK#" IS NOT NULL))57- access("U"."TS#"="RB"."TS#" AND "U"."SEGFILE#"="RB"."FILE#" AND "U"."SEGBLOCK#"="RB"."BLOCK#")filter("TS"."TS#"="U"."TS#")58- access("U"."TS#"="FI"."TS#" AND "U"."SEGFILE#"="FI"."RELFILE#")61- access("HC"."KTFTHCTFNO"="H"."FILE_ID" AND "TS"."NAME"="H"."TABLESPACE_NAME")65- filter(("V"."FNNAM" IS NOT NULL AND "V"."FNTYP"=7))66- filter(("TF"."TFDUP"<>0AND BITAND("TF"."TFSTA",32)<>32AND "V"."FNFNO"="TF"."TFNUM" AND "TF"."TFFNH"="V"."FNNUM"))67- filter("V"."FNFNO"="HC"."KTFTHCTFNO")69- access("HC"."KTFTHCTSN"="TS"."TS#")72- filter(("TS"."CONTENTS$"=1AND "TS"."BITMAPPED"<>0AND "TS"."ONLINE$"=1))73- filter(("HC"."KTFTHCCVAL"=0AND "HC"."INST_ID"=USERENV('INSTANCE') AND "TS"."TS#"="HC"."KTFTHCTSN"))74- filter("P"."FILE_ID"="H"."FILE_ID")76- filter(("TS"."CONTENTS$"=1AND "TS"."BITMAPPED"<>0AND "TS"."ONLINE$"=1))77- access("TS"."NAME"="H"."TABLESPACE_NAME")78- filter(("FC"."INST_ID"=USERENV('INSTANCE') AND "TS"."TS#"="FC"."KTSTFCTSN"))147 rows selected.Elapsed: 00:00:00.08可以发现,慢的步骤在于对表X$KTFBUE的全表扫描,这个问题也引起了另外⼀个问题,可以看我另外⼀篇博⽂->。
ORACLE临时表空间使用率过高的原因及解决方案转
ORACLE 临时表空间使用率过高的原因及解决方案在数据库的日常学习中,发现公司生产数据库的默认临时表空间temp使用情况达到了30G,使用率达到了100%;待调整为32G后,使用率还是为100%,导致磁盘空间使用紧张。
根据临时表空间的主要是对临时数据进行排序和缓存临时数据等特性,待重启数据库后,temp会自动释放。
于是想通过重启数据库的方式来缓解这种情况,但是重启数据库之后,发现临时表空间temp的使用率还是100%,一点没变。
虽然运行中应用暂时没有报什么错误,但是这在一定程度上存在一定的隐患,有待解决该问题。
由于临时表空间主要使用在以下几种情况:1、order by or group by (disc sort占主要部分);2、索引的创建和重创建;3、distinct操作;4、union & intersect & minus sort-merge joins;5、Analyze 操作;6、有些异常也会引起TEMP的暴涨。
Oracle临时表空间暴涨的现象经过分析可能是以下几个方面的原因造成的:1. 没有为临时表空间设置上限,而是允许无限增长。
但是如果设置了一个上限,最后可能还是会面临因为空间不够而出错的问题,临时表空间设置太小会影响性能,临时表空间过大同样会影响性能,至于需要设置为多大需要仔细的测试。
2.查询的时候连表查询中使用的表过多造成的。
我们知道在连表查询的时候,根据查询的字段和表的个数会生成一个迪斯卡尔积,这个迪斯卡尔积的大小就是一次查询需要的临时空间的大小,如果查询的字段过多和数据过大,那么就会消耗非常大的临时表空间。
3.对查询的某些字段没有建立索引。
Oracle中,如果表没有索引,那么会将所有的数据都复制到临时表空间,而如果有索引的话,一般只是将索引的数据复制到临时表空间中。
针对以上的分析,对查询的语句和索引进行了优化,情况得到缓解,但是需要进一步测试。
总结:1.SQL语句是会影响到磁盘的消耗的,不当的语句会造成磁盘暴涨。
oracledb_exporter 监控指标 -回复
oracledb_exporter 监控指标-回复"oracledb_exporter 监控指标"是一种用于监控Oracle数据库的工具。
它提供了一系列的监控指标,帮助数据库管理员实时了解数据库的运行情况,并可以通过这些指标进行数据库性能分析和故障排查。
本文将详细介绍oracledb_exporter监控指标的使用方法、相关重要指标以及如何利用这些指标进行数据库监控和性能优化。
第一步:oracledb_exporter简介和安装oracledb_exporter是一个开源的Prometheus exporter,用于从Oracle数据库中收集了丰富的性能和运行状况指标,并将其暴露给Prometheus监控系统。
通过Prometheus系统的仪表板和报警规则,我们可以方便地对Oracle数据库进行实时监控和报警。
首先,我们需要在监控服务器上安装Prometheus和oracledb_exporter。
可以通过下载Prometheus并解压它来进行安装。
然后,从oracledb_exporter的GitHub仓库下载可执行文件。
第二步:配置oracledb_exporter安装完成后,我们需要对oracledb_exporter进行配置,以便与Oracle 数据库建立连接并收集相关指标。
配置文件通常以.yml格式提供,并包含以下内容:- 数据库的连接信息,包括用户名、密码和连接字符串。
- 要收集的指标列表,如数据库会话数量、表空间使用率等。
根据配置文件的示例,我们填写数据库连接信息,并根据实际需求选择要监控的指标。
保存配置文件并启动oracledb_exporter。
第三步:使用oracledb_exporter监控指标一旦oracledb_exporter正常运行,我们可以通过浏览器访问所在服务器的IP地址和指定的端口,以获得一个Web界面。
这个Web界面提供了与Oracle数据库相关的各种指标的详细信息,例如数据库会话数、CPU使用率、表空间使用率等。
如何查看表空间使用情况
如何查看表空间使用情况2009-07-25 16:03select e.tablespace_name 表空间,round(e.总空间,0) "总空间(MB)",round(f.剩余空间,0) "剩余空间(MB)",round(f.剩余空间/e.总空间*100,0) 剩余空间百分比from(select tablespace_name,sum(bytes)/1024/1024 总空间from dba_data_files group by tablespace_name) e,(select tablespace_name,sum(bytes)/1024/1024 剩余空间from dba_free_space group by tablespace_name) fwhere e.tablespace_name=f.tablespace_nameorder by 剩余空间百分比1. 查看所有表空间大小Sql代码1.select tablespace_name,sum(bytes)/1024/1024 fromdba_data_files2.roup by tablespace_name;2. 未使用的表空间大小Sql代码1.select tablespace_name,sum(bytes)/1024/1024 fromdba_free_space2.group by tablespace_name;3. 所以使用空间可以这样计算Sql代码1.select a.tablespace_name,total,free,total-free used from2.( select tablespace_name,sum(bytes)/1024/1024 total fromdba_data_files3.group by tablespace_name) a,4.( select tablespace_name,sum(bytes)/1024/1024 free fromdba_free_space5.group by tablespace_name) b6.where a.tablespace_name=b.tablespace_name;4. 还有在命令行情况下如何将结果放到一个文件里。