数据库表空间,数据库有哪些表空间各个表空间的作用是什么
大家好,数据库表空间相信很多的网友都不是很明白,包括数据库有哪些表空间各个表空间的作用是什么也是一样,不过没有关系,接下来就来为大家分享关于数据库表空间和数据库有哪些表空间各个表空间的作用是什么的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
数据库有哪些表空间各个表空间的作用是什么
一、系统表空间
在 MySQL数据目录下有一个名为 ibdata1的文件,可以保存一张或者多张表。
923275 12M-rw-r----- 1 mysql mysql 12M 3月 18 10:42 ibdata1
这个文件就是 MySQL的系统表空间文件,默认为 1个,可以有多个,只需要在配置文件 my.cnf里面这样定义即可。
innodb_data_file_path=ibdata1:200M;ibdata2: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数据库,表空间和表之间是什么关系
在oracle中,表空间是存储概念上的,建立表空间需要有对应的数据文件,数据文件建立好之后直接会把一定的磁盘空间分配给它,这样可以对数据库的存储空间进行有效的管理。然后在建表的时候指定对应的表空间,该表的数据就会都存在表空间对应的数据文件上,和Mysql那种每个表一个文件的方式比起来,存储的可控性更强。
oracle和mysql不同,不存在mysql中那种数据库的概念,而是实例的概念,当然,也可以在实例里建立不同的user来区分,每个user对应的表都是相对独立的,比如两个user下可以分别建同名的表,但又可以通过授权来交互使用。
建数据库是在安装oracle之后执行dbca建立实例。
建表空间语句是 CREATE TABLESPACE TBS_DEFAULT DATAFILE
'/app/oradata/sys_tbs/tbs_default.dbf' size 500M
LOGGING
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
/
这里主要是需要指定对应的datafile。
建表基本都一样,例如
create table(col_1 number(8),col_2 char(2),col_3 date)
tablespace tbs_default
/
数据库就不要删除了,这方面你看下关于user操作的语句就可以了。
drop tablespace tbs_name including contents and datafiles;--删除表空间及数据文件
drop table tab_name purge;--删除表。
在Oracle中数据库、表空间、表之间的关系
在oracle中,表空间是存储概念上的,建立表空间需要有对应的数据文件,数据文件建立好之后直接会把一定的磁盘空间分配给它,这样可以对数据库的存储空间进行有效的管理。然后在建表的时候指定对应的表空间,该表的数据就会都存在表空间对应的数据文件上,和Mysql那种每个表一个文件的方式比起来,存储的可控性更强。
oracle和mysql不同,不存在mysql中那种数据库的概念,而是实例的概念,当然,也可以在实例里建立不同的user来区分,每个user对应的表都是相对独立的,比如两个user下可以分别建同名的表,但又可以通过授权来交互使用。
建数据库是在安装oracle之后执行dbca建立实例。
建表空间语句是 CREATE TABLESPACE TBS_DEFAULT DATAFILE
'/app/oradata/sys_tbs/tbs_default.dbf' size 500M
LOGGING
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
/
这里主要是需要指定对应的datafile。
建表基本都一样,例如
create table(col_1 number(8),col_2 char(2),col_3 date)
tablespace tbs_default
/
数据库就不要删除了,这方面你看下关于user操作的语句就可以了。
drop tablespace tbs_name including contents and datafiles;--删除表空间及数据文件
drop table tab_name purge;--删除表。
数据库表空间一般分为哪几类
数据库中主要的表空间类型有:
①永久表空间②撤销表空间③临时表空间
永久表空间:包含一些段,这些段在超出会话或事务的持续时间后持续存在。
撤销表空间:可能有一些段在超出会话或事务末尾后仍然保留,但它为访问被修改表的select语句提供读一致性,同时为数据库的大量闪回特性提供撤销数据。然而,撤销段主要用来存储一些列在更新或删除前的值,或者用于提供指示,表明不存在用于插入的行。
临时表空间:包含暂时的数据,这些数据只存在于会话的持续时间,例如完成分类操作的空间不适合来自于内存。
大文件表空间可用于这3类表空间的任何一种,大文件表空间将维护点从数据文件移动到表空间,从而简化了表空间的管理。大文件表空间只包含一个数据文件。
好了,文章到此结束,希望可以帮助到大家。