GPDB · 特性分析· Filespace和Tablespace

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介:

Filespace和Tablespace

Tablespace允许每个节点使用多种文件目录或者文件系统,当前所有数据都是存储在默认base目录下。我们可以根据需要制定最优的物理存储方式。使用表空间有下面几个优点:

  • 根据数据使用频率来选择不同的存储类型
  • 控制一些数据库对象的IO性能

比如历史数据表我们存放在SATA盘,频繁使用的表存放在SSD盘。

filespace指的是所有的存储文件系统位置的集合。
1个filespace可以被1个或多个tablespace使用,可以通过

select * from pg_filespace_entry,pg_tablespace,pg_filespace where pg_filespace.oid=pg_filespace_entry.fsefsoid and pg_filespace.oid=pg_tablespace.spcfsoid

SQL命令查看filespace和tablespace对应关系。

创建Filespace

GP有个默认的Filespace是pg_system

postgres=# select * from pg_filespace;
  fsname   | fsowner
-----------+---------
 pg_system |      10
(1 rows)

如果需要创建新的Filespace,那么需要通过gpfilespace工具创建,步骤如下:

  • 创建config文件

文件每行内容格式为:<hostname>:<dbid>:/<filesystem_dir>/<seg_datadir_name>,每一个节点都需要配置,包括Master、Slave以及Segment
gpfilespace_config文件(文件名任意)内容如下:

filespace:test
localhost:1:/data1/test/demoDataDir-1
localhost:2:/data1/test/demoDataDir0
localhost:3:/data1/test/demoDataDir1
localhost:4:/data1/test/demoDataDir2
  • 执行gpfilespace命令
gpfilespace -c gpfilespace_config

一旦集群中创建了新的Filespace,那么再创建备库、创建Mirror等都需要指定Filespace

使用gpfilespace创建filespace过程中会重启整个集群,而关闭集群的命令是gpstop -M fast,这样如果存在备库连接,那么会一直等待,所以我们需要手动杀掉备库连接,这样才能快速完成整个过程。

创建备库时创建Filespace

参数格式为:filespace1_name:fs1_location,filespace2_name:fs2_location

gpinitstandby -s localhost -P 15433 -F test:/data1/test/demoDataDir0-stand,pg_system:/data1/tmp_datadir_for_gpdb_bld/qddir_stand -a

创建Mirror时创建Filespace

文件格式为:

   filespaceOrder=[<filespace1_fsname>[:<filespace2_fsname>:...]
   mirror<content>=<content>:<address>:<port>:<mir_replication_port>:<pri_replication_port>:<fselocation>[:<fselocation>:...]

内如如下:

filespaceOrder=test
mirror0=0:localhost:21000:22000:23000:/data1/test/mirror/demoDataDir0:/data1/test/mirror_file/demoDataDir0
mirror1=1:localhost:21001:22001:23001:/data1/test/mirror/demoDataDir1:/data1/test/mirror_file/demoDataDir1
mirror2=2:localhost:21002:22002:23002:/data1/test/mirror/demoDataDir2:/data1/test/mirror_file/demoDataDir2

创建Tablespace

语法:CREATE TABLESPACE tablespace_name [OWNER username] FILESPACE filespace_name
这点和PG不同,PG可以在创建tablespace的时候直接指定文件系统位置,PG语法如下:

CREATE TABLESPACE tablespace_name
    [ OWNER user_name ]
    LOCATION 'directory'
    [ WITH ( tablespace_option = value [, ... ] ) ]

GP有两个默认的tablepace,pg_default和pg_global

postgres=# select spcname,spcfsoid from pg_tablespace ;
  spcname   | spcfsoid
------------+----------
 pg_default |     3052
 pg_global  |     3052
(2 rows)

临时文件空间

Greenplum在执行SQL的过程中可能产生大量的workfile和temporary file,为了单独隔离这些文件(避免数据磁盘满或者放到SSD盘提高性能等),可以将这些临时文件空间可以单独放到一个文件系统中

  • 查看当前的临时文件filespace
gpfilespace --showtempfilespace
  • 将临时文件目录移到指定的filespace
gpfilespace --movetempfilespace test

执行成功之后将会在每个节点的数据目录(包括Master、Slave、Segment)下生产一个gp_temporary_files_filespace文件,内容如下:

17511
5 /data1/test/demoDataDir0-stand
1 /data1/test/demoDataDir-1

总结

Filespace和Tablespace不仅能够方便我们管理数据存储位置,而且合理搭配SSD和SATA盘能够显著提升IO性能。当然,我们需要熟悉gpfilespace命令,filespace创建之后是不能够删除的,同时在创建备库、创建Mirror需要指定filespace。

目录
相关文章
|
6月前
|
Oracle 关系型数据库
oracle context namespace
oracle context namespace
27 1
|
18天前
|
网络协议 Linux 应用服务中间件
Namespace技术概述
【10月更文挑战第6天】在Linux内核中,为了隔离不同类型的资源,实现了多种namespace,包括UTS(hostname)、User(用户和组)、Mount(文件系统挂载点)、PID(进程ID)和Network(网络协议栈)。常用指令`nsenter`可进入指定的namespace,而`unshare`则创建并加入新的namespace。在内核层面,每个进程的`task_struct`包含这些namespace的信息。
|
3月前
|
存储
【Azure Log A workspace】Azure上很多应用日志收集到Log A workspace后如何来分别各自的占比呢?
【Azure Log A workspace】Azure上很多应用日志收集到Log A workspace后如何来分别各自的占比呢?
|
图形学
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
关于Unity2017 升级到 Unity2019 两个问题。 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
3113 0
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
|
关系型数据库 数据库
【DB吐槽大会】第25期 - PG 不支持物理Partial Standby
大家好,这里是DB吐槽大会,第25期 - PG 不支持物理Partial Standby
|
SQL 固态存储 关系型数据库
|
Oracle 关系型数据库
|
前端开发 JavaScript Java
|
Oracle 关系型数据库

热门文章

最新文章

  • 1
    非阻塞 I/O:异步编程提升 Python 应用速度
    8
  • 2
    2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
    5
  • 3
    2024 RedisAnd Mysql基础与进阶操作系列(16-1)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
    4
  • 4
    2024Mysql And Redis基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
    6
  • 5
    2024Mysql And Redis基础与进阶操作系列(10)作者——LJS[你个IKUN还学不会嘛?你是真爱粉嘛?真是的 ~;以后别侮辱我家鸽鸽]
    6
  • 6
    2024 RedisAnd Mysql基础与进阶操作系列(15)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
    5
  • 7
    2024Mysql And Redis基础与进阶操作系列(9)作者——LJS[含MySQL存储过程之局部、系统变量、参数传递、流程控制-判断/case具体详步骤;注意点及常见报错问题所对应的解决方法]
    8
  • 8
    2024 Mysql基础与进阶操作系列之MySQL触发器详解(21)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
    8
  • 9
    2024 RedisAnd Mysql基础与进阶操作系列(19)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
    7
  • 10
    2024 RedisAnd Mysql基础与进阶操作系列(18)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
    5