怎么查看oracle表空间,剩余大小,表空间利用

电脑教程015

怎么查看oracle表空间,剩余大小,表空间利用,第1张

1、因为oracle运行在Linux系统下,首先,要连接Linux系统。

2、连上后,进行oracle控制台。输入命令: sqlplus  / as sysdba

3、在sql命令行,输入:

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

4、这样就可以查看到相应结果。 完成效果图。

一、系统表空间

在 MySQL 数据目录下有一个名为 ibdata1 的文件,可以保存一张或者多张表。

923275 12M -rw-r----- 1 mysql mysql 12M 3月 18 10:42 ibdata1

这个文件就是 MySQL 的系统表空间文件,默认为 1 个,可以有多个,只需要在配置文件 my.cnf 里面这样定义即可。

innodb_data_file_path=ibdata1:200Mibdata2:200M:autoextend:max:800M系统表空间不仅可以是文件系统组成的文件,也可以是非文件系统组成的磁盘块,比如裸设备,定义也很简单innodb_data_file_path=/dev/nvme0n1p1:3Gnewraw/dev/nvme0n1p2:2Gnewraw

系统表空间里都有些啥内容?

具体内容包括:double writer buffer、 change buffer、数据字典(MySQL 8.0 之前)、表数据、表索引。

那 MySQL 为什么现在主流版本默认都不是系统表空间?

究其原因,系统表空间有三个最大的缺点:原因 1:无法做到自动收缩磁盘空间,造成很大的空间浪费。即使它包含的表都被删掉,这部分空间也不会自动释放。

二、单表空间

单表空间不同于系统表空间,每个表空间和表是一一对应的关系,每张表都有自己的表空间。具体在磁盘上表现为后缀为 .ibd 的文件。比如表 t1,对应的表空间文件为 t1.ibd917107 96K -rw-r----- 1 mysql mysql 96K 3月 18 16:13 t1.ibd

单表空间如何应用到具体的表呢?

有两种方式:方式 1:在配置文件中开启。在配置文件中开启单表空间设置参数 innodb_filer_per_table,这样默认对当前库下所有表开启单表空间。innodb_file_per_table=1另外也可以直接建表时指定单表空间mysql>create table t1 (id int, r1 char(36)) tablespace innodb_file_per_table

Query OK, 0 rows affected (0.04 sec)

单表空间除了解决之前说的系统表空间的几个缺点外,还有其他的优点,详细如下:

1. truncate table 操作比其他的任何表空间都快;

2. 可以把不同的表按照使用场景指定在不同的磁盘目录;

比如日志表放在慢点的磁盘,把需要经常随机读的表放在 SSD 上等。

mysql>create table ytt_dedicated (id int) data directory = '/var/lib/mysql-files'

Query OK, 0 rows affected (0.04 sec)3. 可以用 optimize table 来收缩或者重建经常增删改查的表。一般过程是这样的:建立和原来表一样的表结构和数据文件,把真实数据复制到临时文件,再删掉原始表定义和数据文件,最后把临时文件的名字改为和原始表一样的。

三、通用表空间

通用表空间先是出现在 MySQL Cluster 里,也就是 NDB 引擎。从 MySQL 5.7 引入到 InnoDB 引擎。通用表空间和系统表空间一样,也是共享表空间。每个表空间可以包含一张或者多张表,也就是说通用表空间和表之间是一对多的关系。

oracle数据库中,查询素有表空间的名称只需要一条sql语句即可:

select tablespace_name  from user_tablespaces;

结果输出如下图:

在上式的sql中,“user_tablespaces”即为表空间信息所在表,所需的表空间信息需要从该表中获取,“tablespace_name”即为表空间名称,

如果希望查询所有表空间名称和其他相关信息,可以将使用如下sql语句:

select * from user_tablespaces;

结果输出如下:

扩展资料:

针对表空间,还有其他的查询可供参考:

1、查看表空间的名称及对应大小

SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM

dba_tablespaces t, dba_data_files d WHERE t.tablespace_name =

d.tablespace_name GROUP BY t.tablespace_name

输出结果如下:

2、查看表空间物理文件的名称及大小

SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space

FROM dba_data_files ORDER BY tablespace_name

输出结果为:

3、查询当前用户所有表名及其所属表空间

select table_name 表名 ,tablespace_name 所使用表空间 from user_tables

输出结果为: