百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

oracle中system、sysaux或者临时表空间占用过大一般是什么原因?

mhr18 2024-09-13 20:43 27 浏览 0 评论

概述

oracle表空间这个概念大家应该都很熟悉了, 这是一个逻辑概念,可以理解为在数据库中开辟的空间用来存储数据库对象。


表空间相关

1、表空间和数据文件的关系:

表空间由一个或多个数据文件组成;数据文件的大小和位置可以自己定义;

2、表空间的分类:

永久表空间:数据库中要永久化存储的一些对象,如:表、视图、存储过程

临时表空间:数据库操作当中中间执行的过程,执行结束后,存放的内容会被自动释放

UNDO表空间:用于保存事务所修改数据的旧值,可以进行数据的回滚

篇幅有限,下面主要对系统表空间、辅助表空间和临时表空间做个介绍。


一、系统表空间

SYSTEM 表空间是 Oracle 数据库最重要的一个表空间,存放了一些 DDL 语言产生的 信息以及 PL/SQL 包、视图、函数、过程等,称之为数据字典,因此该表空间也具有其特殊性。

Oracle服务器使用SYSTEM表空间管理整个数据库。这个表空间包含系统的数据字典和关于数据库的管理信息,这些信息均包含在SYS方案中,只有SYS用户或者拥有所需权限的其它管理用户才可访问这些信息。SYSTEM表空间用于核心功能(例如数据字典表)。

1、建议不存放用户数据

//为数据库设定默认表空间

SQL>ALTER DATABASE DEFAULTTABLESPACE tablespace_name;

//查询默认表空间

SQL> select property_name,property_value from database_properties where property_name like 'DEFAULT%';

2、SYSTEM表空间特性

? 不能脱机 offline

? 不能置为只读 read only

? 不能重命名

? 不能删除

3、空间管理

这里一定要保证空间可用,一般存放单个数据文件,如果 SYSTEM 表空间数据文件很大,可以考虑使用 bigfile。


二、辅助表空间

SYSAUX 表空间在 Oracle Database 10g 中引入,作为 SYSTEM 表空间的辅助表空间.

以前一些使用独立表空间或系统表空间的数据库组件现在在 SYSAUX 表空间中创建. 通过分离这些组件和功能,SYSTEM 表空间的负荷得以减轻.反复创建一些相关对象及组件 引起 SYSTEM 表空间的碎片问题得以避免。

SYSTEM和SYSAUX表空间是在创建数据库时创建的必须存在的表空间。这些表空间必须联机。在OPEN状态下,SYSAUX表空间可以脱机以执行表空间恢复,而SYSTEM表空间则不能,这两种表空间都不能设置为只读状态。在MOUNT状态下,任何表空间都可以脱机。

SYSTEM表空间的大小一般变化不大,而SYSAUX表空间在默认条件下如果不做任何配置,那么随着时间的推移,会越来越大。所以,如果SYSAUX表空间过大,那么应该及时诊断清理该表空间。

对于SYSTEM表空间而言,如果占用过大,那么一般情况下是由于审计表(SYS.AUD$)过大引起的。需要将审计表移动到其它表空间中,然后再清理审计表(TRUNCATE TABLE SYS.AUD$)即可。需要注意的是,如果审计表过大,那么应该分部去清理审计表。

对于SYSAUX表空间而言,如果占用过大,那么一般情况下是由于AWR信息或对象统计信息没有及时清理引起的,具体原因可以通过如下的SQL语句查询:

SELECT OCCUPANT_NAME "Item", SPACE_USAGE_KBYTES / 1048576 "Space Used (GB)", SCHEMA_NAME "Schema", MOVE_PROCEDURE "Move Procedure"
 FROM V$SYSAUX_OCCUPANTS WHERE SPACE_USAGE_KBYTES > 1048576
 ORDER BY "Space Used (GB)" DESC;

如果OCCUPANT_NAME列为SM/AWR(Server Manageability - Automatic Workload Repository),那么表示AWR信息占用过大;如果该列为SM/OPTSTAT(Server Manageability - Optimizer Statistics History),那么表示优化器统计信息占用过大。

也可以直接查询DBA_SEGMENTS视图获取信息:

SELECT D.SEGMENT_NAME, D.SEGMENT_TYPE,SUM(BYTES)/1024/1024 SIZE_M
 FROM DBA_SEGMENTS D
 WHERE D.TABLESPACE_NAME = 'SYSAUX'
 GROUP BY D.SEGMENT_NAME, D.SEGMENT_TYPE
 ORDER BY SIZE_M DESC;

然后查询占用空间较大的表,即可得到占用空间较大的原因

结论: 这是一个管理及规划上的改进,进一步独立 SYSTEM 表空间,保证其存储及性能. 我们在做数据库规划时大可借鉴 Oracle 这个改进,分离重要数据及次要数据,分离稳定结构及频繁变化结构,尽量减少对重要数据及结构的影响。


三、临时表空间

1、 临时表空间作用

Oracle 临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题 sql 语句的执行, temp 表空间会一直增长。直到耗尽硬盘空间。

有人猜测在磁盘空间的分配上,oracle 使用的是贪心算法,如果上次磁盘空间消耗达到 1GB,那么临时表空间就是 1GB。

也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。

临时表空间的主要作用:

? 索引 create 或 rebuild;

? Order by 或 group by;

? Distinct 操作;

? Union 或 intersect 或 minus;

? Sort-merge joins;

? analyze。

2、使用原理

在 Oracle 数据库中进行排序、分组汇总、索引等到作时,会产生很多的临时数据。对于这些临时数据,Oracle 数据库是如何处理的呢?

通常情况下,Oracle 数据库会先将这些临时数据存放到内存的 PGA(程序全局区)内。

在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临

时数据。但是这个分区的容量是有限的。当这个分区的大小不足以容纳排序后所产生的记录

时,数据库系统就会将临时数据存放到临时表空间中。这就是临时表空间的来历。

看起来好像这个临时表空间是个临时工,对于数据库的影响不会有多大。其实大家这是

误解这个临时表空间了。

在用户进行数据库操作时,排序、分组汇总、索引这些作业是少不了,其会产生大量的临时数据。为此基本上每个数据库都需要用到临时表空间。而如果这个临时表空间设置不当的话,则会给数据库性能带来很大的负面影响。为此管理员在维护这个临时表空间的时候,不能够掉以轻心。要避免因为临时表空间设置不当影响数据库的性能。


oracle中的表就是一张存储数据的表。表空间是逻辑上的划分。方便管理的。前面已经介绍了怎么去看表空间大小和扩展的一些命令,这里就不说明了。后面会分享更多关于DBA方面内容,感兴趣的朋友可以关注下!!

相关推荐

【线上故障复盘】RPC 线程池被打满,1024个线程居然不够用?

1.故障背景昨天晚上,我刚到家里打开公司群,就看见群里有人讨论:线上环境出现大量RPC请求报错,异常原因:被线程池拒绝。虽然异常量很大,但是异常服务非核心服务,属于系统旁路,服务于数据核对任务,即使...

小红书取消大小周,有人不高兴了!

小红书宣布五一节假日之后,取消大小周,恢复为正常的双休,乍一看工作时长变少,按道理来说大家应该都会很开心,毕竟上班时间缩短了,但是还是有一些小红书的朋友高兴不起来,心情很复杂。因为没有了大小周,以前...

延迟任务的多种实现方案(延迟机制)

场景订单超时自动取消:延迟任务典型的使用场景是订单超时自动取消。功能精确的时间控制:延时任务的时间控制要尽量准确。可靠性:延时任务的处理要是可靠的,确保所有任务最终都能被执行。这通常要求延时任务的方案...

百度java面试真题(java面试题下载)

1、SpingBoot也有定时任务?是什么注解?在SpringBoot中使用定时任务主要有两种不同的方式,一个就是使用Spring中的@Scheduled注解,另一个则是使用第三方框架Q...

回归基础:访问 Kubernetes Pod(concurrent.futures访问数据库)

Kubernetes是一头巨大的野兽。在它开始有用之前,您需要了解许多概念。在这里,学习几种访问集群外pod的方法。Kubernetes是一头巨大的野兽。在它开始有用之前,您需要了解许多不同的...

Spring 缓存神器 @Cacheable:3 分钟学会优化高频数据访问

在互联网应用中,高频数据查询(如商品详情、用户信息)往往成为性能瓶颈。每次请求都触发数据库查询,不仅增加服务器压力,还会导致响应延迟。Spring框架提供的@Cacheable注解,就像给方法加了一...

linux开放外部端口访问(linux开放外部端口访问功能)

前言linux安装相关软件可能都需要允许外网访问,例如mysql、redis、kafka等,前些天一同事安装了mosquitto(Mqtt服务器),外网却无法访问,检查相关配置外还是不能访问。关于这个...

JetCache 源码分析(jacoco源码分析)

JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,...

Prometheus实战教程:k8s平台-Redis监控案例

以下是Prometheus自动发现Redis实例的完整YAML文件示例,适用于生产环境。该配置包括:Redis部署:运行Redis实例。RedisExporter:用于暴露Red...

无锁编程设计(无锁并发编程)

什么是无锁编程LOCK-FREE,字面解释就是不通过锁来解决多线程、多进程之间的数据同步和访问的程序设计方案。相对来说就是通过数据结构和算法来解决数据并发冲突的实现方案。无锁编程的实现「比较并交换...

Java项目线上订单突然卡死,原因是数据库死锁,如何全流程排查?

凌晨2点,运维群里发消息:“用户下单全卡死了!客服电话被打爆!”同时电话铃声响起,我揉了揉惺忪的睡眼,打开监控系统——数据库CPU飙到90%,活跃线程数突破天际,日志里赫然躺着几个大字:Deadlo...

秒杀系统"减库存"设计:核心概念、原理与实战案例全解析

在电商高并发战场中,减库存是秒杀系统的"心脏手术",本文将从三个维度揭示其技术本质。一、核心概念透视1.库存的生命周期模型预扣库存:交易链路中的缓冲地带(用户下单未支付)真实库存:物...

Java高级开发面试题深度解析(2025版)

一、JVM与内存管理(高频考点)1.内存结构JVM内存分为堆、方法区、虚拟机栈、本地方法栈和程序计数器。堆是对象存储的核心区域,分为新生代(Eden、Survivor区)和老年代。o示例:new...

Python面试题(java下一页)

操作系统1select,poll和epoll其实所有的I/O都是轮询的方法,只不过实现的层面不同罢了.这个问题可能有点深入了,但相信能回答出这个问题是对I/O多路复用有很好的了解了.其中tornad...

拒绝躺平,如何使用AOP的环绕通知实现分布式锁

如何在分布式环境下,像用synchronized关键字那样使用分布式锁。比如开发一个注解,叫@DistributionLock,作用于一个方法函数上,每次调方法前加锁,调完之后自动释放锁。可以利用Sp...

取消回复欢迎 发表评论: