PostgreSQL和Greenplum的临时表空间介绍

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介:

PostgreSQL的临时表空间,通过参数temp_tablespaces 进行配置,PostgreSQL允许用户配置多个临时表空间。
配置多个临时表空间时,使用逗号隔开。
如果没有配置temp_tablespaces 参数,临时表空间对应的是默认的表空间。
PostgreSQL的临时表空间用来存储临时表或临时表的索引,以及执行SQL时可能产生的临时文件例如排序,聚合,哈希等。

为了提高性能,一般建议将临时表空间放在SSD或者IOPS,以及吞吐量较高的分区中。

例子:
当前未配置temp_tablespaces,使用默认表空间。

postgres=# \l+ postgres  
                                                            List of databases  
   Name   |  Owner   | Encoding | Collate | Ctype | Access privileges |  Size   | Tablespace |                Description                   
----------+----------+----------+---------+-------+-------------------+---------+------------+--------------------------------------------  
 postgres | postgres | UTF8     | C       | C     |                   | 7456 kB | pg_default | default administrative connection database  
(1 row)  
  
postgres=# show temp_tablespaces ;  
 temp_tablespaces   
------------------  
   
(1 row)  
postgres=# create temp table tmp1 (id int);  
CREATE TABLE  
postgres=# insert into tmp1 select generate_series(1,1000);  
INSERT 0 1000  

临时表放在默认表空间中。

postgres=# select pg_relation_filepath('tmp1');  
 pg_relation_filepath   
----------------------  
 base/13241/t2_73746  
(1 row)  

执行一个大的排序,临时文件放在默认表空间中。

postgres=# select * from generate_series(1,10000000000) order by 1;  

查看临时文件目录

cd $PGDATA/base/pgsql_tmp  
$ ll  
-rw------- 1 digoal users 1.0G Mar 26 15:58 pgsql_tmp30315.0  
-rw------- 1 digoal users 1.0G Mar 26 15:58 pgsql_tmp30315.1  
....  

新建一个表空间,并将所有用户的temp_tablespaces参数设置为这个新建的表空间。

mkdir /disk1/digoal/tmptbs1  
postgres=# create tablespace tmptbs location '/disk1/digoal/tmptbs';  
CREATE TABLESPACE  
postgres=# alter role all set temp_tablespaces='tmptbs';  
ALTER ROLE  

重新测试,现在临时文件都会放到新建的表空间下面。

psql  
postgres=# select * from generate_series(1,10000000000) order by 1;  
  
cd /disk1/digoal/tmptbs/PG_9.5_201510051/pgsql_tmp  
total 528M  
-rw------- 1 digoal users 513M Mar 26 16:05 pgsql_tmp31527.0  
  
postgres=# create temp table t1(id int);  
CREATE TABLE  
postgres=# insert into t1 select generate_series(1,10000);  
INSERT 0 10000  
postgres=# select pg_relation_filepath('t1');  
              pg_relation_filepath                 
-------------------------------------------------  
 pg_tblspc/73749/PG_9.5_201510051/13241/t3_73750  
(1 row)  

下面是Greenplum的临时表空间,介绍:
关于filespace的使用,请先查看
https://yq.aliyun.com/articles/190

Greenplum没有temp_tablespaces这个参数,那么临时文件应该放哪里呢?
Greenplum将只有filespace的说法,并且临时文件是全局管理的,也就是说整个GP集群的临时文件是放在一个地方(filespace)的。
在Greenplum中不同的用户不能使用不同的临时文件目录。

默认情况下临时文件是放在默认的表空间下面
临时文件(例如排序,哈希,产生的work file)

  <filespace_directory>/<tablespace_oid>/<database_oid>/pgsql_tmp   

临时表

  <filespace_directory>/<tablespace_oid>/<database_oid>/  
You can move temporary or transaction files to a specific filespace to improve database performance when  
running queries, creating backups, and to store data more sequentially.  
  
The dedicated filespace for temporary and transaction files is tracked in two separate flat files called  
gp_temporary_files_filespace and gp_transaction_files_filespace.   
These are located in the pg_system directory on each primary and mirror segment, and on master and standby.   
You must be a superuser to move temporary or transaction files.   
Only the gpfilespace utility can write to this file.  
  
Unless otherwise specified, temporary and transaction files are stored together with all user data.   
The default location of temporary files, <filespace_directory>/<tablespace_oid>/<database_oid>/pgsql_tmp   
is changed when you use gpfilespace --movetempfiles for the first time.  
  
Also note the following information about temporary or transaction files:  
• You can dedicate only one filespace for temporary or transaction files,   
  although you can use the same filespace to store other types of files.  
• You cannot drop a filespace if it used by temporary files.  
• You must create the filespace in advance.   

如果要修改Greenplum临时文件的存放地,操作如下:
首先要创建filespace, 然后确保没有活跃会话,使用gpfilespace --movetempfilespace filespace_name命令迁移临时文件目录。

To move temporary files using gpfilespace    
1. Check that the filespace exists and is different from the filespace used to store all other user data.  
2. Issue smart shutdown to bring the Greenplum Database offline.  
   If any connections are still in progess, the gpfilespace --movetempfiles utility will fail.  
3. Bring Greenplum Database online with no active session and run the following command:  
   gpfilespace --movetempfilespace filespace_name  
   The location of the temporary files is stored in the segment configuration shared memory  
   (PMModuleState) and used whenever temporary files are created, opened, or dropped.  
To move transaction files using gpfilespace  
1. Check that the filespace exists and is different from the filespace used to store all other user data.  
2. Issue smart shutdown to bring the Greenplum Database offline.  
   If any connections are still in progess,the gpfilespace --movetransfiles utility will fail.  
3. Bring Greenplum Database online with no active session and run the following command:  
   gpfilespace --movetransfilespace filespace_name  
   The location of the transaction files is stored in the segment configuration shared memory  
   (PMModuleState) and used whenever transaction files are created, opened, or dropped.  
  
Creating a Tablespace  
  After you create a filespace, use the CREATE TABLESPACE command to define a tablespace that uses that  
  filespace.   
  For example:    
  =# CREATE TABLESPACE fastspace FILESPACE fastdisk;  
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
7天前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错之往GREENPLUM 6 写数据,用postgresql-42.2.9.jar 报 ON CONFLICT (uuid) DO UPDATE SET 语法有问题。怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
8月前
|
关系型数据库 分布式数据库 数据库
PolarDB对比X-Engine与InnoDB空间效率
本实验带您体验创建X-Engine和InnoDB两种不同的表存储引擎,通过Sysbench模拟数据注入的过程对比俩种表引擎的空间效率。
548 0
|
15天前
|
分布式计算 关系型数据库 大数据
MaxCompute产品使用合集之怎么才可以将 PostgreSQL 中的 geometry 空间类型字段同步到 MaxCompute 或另一个 PostgreSQL 数据库
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
15天前
|
监控 关系型数据库 Java
SpringBoot【集成 01】Druid+Dynamic+Greenplum(实际上用的是PostgreSQL的驱动)及 dbType not support 问题处理(附hikari相关配置)
SpringBoot【集成 01】Druid+Dynamic+Greenplum(实际上用的是PostgreSQL的驱动)及 dbType not support 问题处理(附hikari相关配置)
137 0
|
9月前
|
安全 关系型数据库 数据库
创建 PostgreSQL 表空间时没有指定空间的总大小
创建 PostgreSQL 表空间时没有指定空间的总大小
99 1
|
关系型数据库 定位技术 数据库
PostgreSQL技术大讲堂 - 第17讲:Vacuum空间管理工具
PostgreSQL从小白到专家,技术大讲堂 - 第17讲:Vacuum空间管理工具
154 0
|
并行计算 算法 Cloud Native
PolarDB 开源版 使用PostGIS 数据寻龙点穴(空间聚集分析)- 大数据与GIS分析解决线下店铺选址问题
寻龙点穴是风水学术语。古人说:三年寻龙,十年点穴。意思就是说,学会寻龙脉要很长的时间,但要懂得点穴,并且点得准则难上加难,甚至须要用“十年”时间。 但是,若没正确方法,就是用百年时间,也不能够点中风水穴心聚气的真点,这样一来,寻龙的功夫也白费了。 准确地点正穴心,并不是一件容易的事,对初学者来说如此,就是久年经验老手,也常常点错点偏。 寻龙点穴旨在寻找龙气聚集之地,而现实中,我们也有类似需求,比如找的可能是人气聚集之地。 PolarDB 开源版 使用PostGIS 数据寻龙点穴(空间聚集分析)- 大数据与GIS分析解决线下店铺选址问题
488 0
PolarDB 开源版 使用PostGIS 数据寻龙点穴(空间聚集分析)- 大数据与GIS分析解决线下店铺选址问题
|
SQL 存储 关系型数据库
【学习资料】第2期PostgreSQL、Greenplum 技术+108个场景结合最佳实践《如来神掌》
大家好,这里是PostgreSQL、Greenplum 《如来神掌》 - 目录 - 珍藏级
【学习资料】第2期PostgreSQL、Greenplum 技术+108个场景结合最佳实践《如来神掌》
|
SQL Oracle 关系型数据库
【学习资料】第1期Oracle DBA 增值 PostgreSQL,Greenplum 学习计划 - 珍藏级
大家好,这里是Oracle DBA 增值 PostgreSQL,Greenplum 学习计划 - 珍藏级
|
算法 关系型数据库 定位技术
【重新发现PostgreSQL之美】- 25 最强大脑题目 泰森多边形(空间战略布局问题)
大家好,这里是重新发现PostgreSQL之美 - 25 最强大脑题目 泰森多边形(空间战略布局问题)

相关产品

  • 云原生数据库 PolarDB