网站首页 > 技术文章 正文
概述
PostgreSQL中的表空间实际上就是文件系统位置的一个目录,可以保存所有其他对象的容器,如表、索引等,有默认表空间、共享系统表表空间、自定义表空间。
一般PG DBA会规划一个存索引的表空间、存归档的表空间,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。
DBA规划表空间就是合理利用磁盘性能和空间,制定最优的物理存储方式来管理数据库表和索引。
一、Oracle VS PG 数据库的物理布局设计
在Oracle数据库中;一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。属于"一对多"的关系
在PostgreSQL集群中;每个数据库都会在$PGDATA/base下面生成一个子目录,文件名与数据库oid一一对应,一个表空间可以让多个数据库使用;数据库目录可以分布于多个表空间,也就是同一个数据库oid可以存在于不同表空间。属于"多对多"的关系。
二、Oracle VS PG系统自带表空间
1、Oracle自带系统表空间
1)system表空间
每个Oracle数据库都会有SYSTEM表空间,而且SYSTEM表空间总是要保持在联机模式下,因为其包含了数据库运行所要求的基本信息,如:数据字典、联机求助机制、所有回退段、临时段、所有的用户数据库实体、其它ORACLE软件产品要求的表等等。
2)SYSAUX表空间
作为SYSTEM表空间的辅助表空间,主要存放一些其他的 metadata 组件,如 OEM,Streams 等会默认存放在 SYSAUX 表空间里。
3)临时表空间
临时表空间是用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序。像数据库中一些操作: CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN等都可能会用到临时表空间。当操作完成后,系统会自动清理临时表空间中的临时对象,自动释放临时段。
4)UNDO表空间
undo表空间中会自动分配undo段,这些undo段用来保存事务中的DML语句的undo信息,也就是来保存数据在被修改之前的值。在rollback,实例恢复(前滚),一致性读CR块的构造时会使用到undo信息。由于undo的引入,从而Oracle的select语句实现一致性读时,不需要任何锁。
5)USERS表空间
创建用户必须为其指定表空间,如果没有显性指定默认表空间,则指定为users表空间,此用户所有信息都会放入到users表空间中。
2、PG自带系统表空间
注意PG默认没有temp表空间(或者说临时段默认是存放在pg_default表空间)和undo表空间。
1)pg_default表空间
表空间pg_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录$PADATA/base/
(1)目录名“1”是系统数据库template1各relation的存储目录
(2)目录数字“倒数第二”是系统数据库template0各relation的存储目录
(3)其他数字目录是用户建立的数据库目录
(4)目录的命名方法就是数据库的oid值
(5)FSM的文件记录每个数据块的空闲空间
(6)VM文件让vacuum高效工作,被标为无效的记录需要用vacuum来进行清理,需要一个文件来标识哪些数据块中存在无效记录来达到高效的清理。
2)pg_global表空间
表空间pg_global用来存放系统字典表;对应存储目录$PADATA/global/
三、pg表空间物理布局图
四、PG表空间管理相关命令
1、查看表空间
\db
select * from pg_tablespace;
2、创建表空间
语法:CREATE TABLESPACE tablespace_name [ OWNER { new_owner | CURRENT_USER | SESSION_USER } ] LOCATION 'directory'
注意目录"directory"必须是一个已有的空目录,并且属于PostgreSQL操作系统用户
这里把建用户、表空间、建库一起做一个实例介绍了。
su - postgres
psql
--建用户
CREATE USER dbmt WITH PASSWORD 'jkc800$uTxt$9K20';
--创建表空间
CREATE TABLESPACE dbmt OWNER dbmt LOCATION '/data/pgdata/dbmt';
--建库
CREATE DATABASE dbmt with OWNER=dbmt ENCODING='UTF-8' TABLESPACE=dbmt CONNECTION LIMIT=-1;
--将dbmt数据库的所有权限都赋予dbmt
GRANT ALL PRIVILEGES ON DATABASE dbmt TO dbmt;
\q
3、删除表空间
drop tablespace tablespace_name;
4、为数据库指定默认表空间
注意:
1)执行该操作不能连着对应数据库操作
2)对应的数据库不能存在表或者索引已经指定默认的表空间
3)执行该操作必须是没有人连着对应的数据库
ALTER DATABASE name SET TABLESPACE new_tablespace;
5、将表从一个表空间移到另一个表空间
注意:在移动表的时候会锁表,此时对该表的所有操作都将被阻塞,包括select操作,所以请考虑在合适的实际做这个操作。
ALTER TABLE name SET TABLESPACE new_tablespace;
6、临时表空间管理
PG的临时表空间用来存储临时表或临时表的索引,以及执行SQL时可能产生的临时文件例如排序,聚合,哈希等。为了提高性能,一般建议将临时表空间放在SSD或者IOPS,以及吞吐量较高的分区中。
PG临时表空间主要是通过参数temp_tablespaces进行配置,PostgreSQL允许用户配置多个临时表空间。配置多个临时表空间时,使用逗号隔开。如果没有配置temp_tablespaces 参数,临时表空间对应的是默认的表空间pg_default。
6.1、创建临时表空间
CREATE TABLESPACE temp01 LOCATION '/data/pgdata/temp';
--查看临时表空间
show temp_tablespaces;
6.2、设置临时表空间
--会话级生效
set temp_tablespaces = 'temp01';
--永久生效
1)修改参数文件postgresql.conf
2)执行pg_ctl reload
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
猜你喜欢
- 2025-07-17 故障分析 | MySQL 派生表优化(mysql pipe)
- 2025-07-17 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
- 2024-10-23 Oracle日常维护内容 oracle系统维护
- 2024-10-23 oracle19c上安装样例数据库 oracle数据库如何安装
- 2024-10-23 超详细的oracle DB体系结构图(三)
- 2024-10-23 每天一个入坑小技巧:MySql和oracle语法区别(今日追加)
- 2024-10-23 性能优化技巧 - 内存关联计算 内存条关联
- 2024-10-23 Oracle大数据量delete清空数据后查询依旧很慢
- 2024-10-23 从零开始学习Oracle之管理表空间 oracle表空间是什么意思
- 2024-10-23 让用户随心所欲地使用数据库需要国产数据库厂商不断地努力
你 发表评论:
欢迎- 614℃几个Oracle空值处理函数 oracle处理null值的函数
- 605℃Oracle分析函数之Lag和Lead()使用
- 594℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 591℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 585℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 579℃【数据统计分析】详解Oracle分组函数之CUBE
- 568℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 559℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- PageHelper - 最方便的 MyBatis 分页插件
- 面试二:pagehelper是怎么实现分页的,
- MyBatis如何实现分页查询?(mybatis-plus分页查询)
- SpringBoot 各种分页查询方式详解(全网最全)
- 如何在Linux上运行exe文件,怎么用linux运行windows软件
- 快速了解hive(快速了解美国50个州)
- Python 中的 pyodbc 库(pydbclib)
- Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 故障分析 | MySQL 派生表优化(mysql pipe)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)