lightdb中的表空间及相关注意点

  一般来说,现在为了各司其职,都把硬盘做成了san,raid,至少lvm。但是仍然有一些用户希望可以指定表空间和索引,当然也包括冷热数据。在lightdb里面也支持该特性。如下:

lightdb@postgres=# create tablespace tab_tbs location '/data1/cn/tab_tbs';
WARNING:  tablespace location should not be inside the data directory
ERROR:  directory "/data1/cn/tab_tbs" does not exist
lightdb@postgres=# create tablespace tab_tbs location '/data1/cn/';
WARNING:  tablespace location should not be inside the data directory
CREATE TABLESPACE
-- 本质上有点像oracle的OMF 文件自动管理功能,只不过OMF通过db_create_file_dest指定目录 create tablespace OMF; lightdb
@postgres=# create table tab_for_tbs(id int) tablespace tab_tbs; CREATE TABLE lightdb@postgres=# \dS+ tab_for_tbs Table "public.tab_for_tbs" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+---------+-----------+----------+---------+---------+--------------+------------- id | integer | | | | plain | | Tablespace: "tab_tbs" Access method: heap

  这样就在tab_tbs下创建了表。

  索引也是一样的,如下:

lightdb@postgres=# create index idx_tab_for_tbs on tab_for_tbs(id) tablespace tab_tbs;
CREATE INDEX
zjh@postgres=# create tablespace my_tbs location '/data1/zjh';
CREATE TABLESPACE
zjh@postgres=# create table my_tbs_tab(id int) tablespace my_tbs ;
CREATE TABLE
[zjh@hs-10-20-30-193 13592]$ pwd
/data1/zjh/PG_13_202204261/13592   #PG版本号_Catalog version number/db_oid
[zjh@hs-10-20-30-193 13592]$ ll
total 0

   Catalog version number可通过lt_controldata -D /data1/zjh/data得知,如下:

[zjh@hs-10-20-30-193 13592]$ lt_controldata -D /data1/zjh/data
lt_control version number:            1300
Catalog version number:               202204261
Database system identifier:           7114486460059183269
Database cluster state:               in production
  • 移动整个空间的目录。
  • 在lt_dump/lt_restore的时候是包含表空间定义的,所以在恢复的时候需要确保表空间存在,在同一台机器上恢复可能会有问题。
  • lt_upgrade的时候是整个物理目录覆盖的。
  • 另外在主备高可用下,需要确保物理目录一致,否则启动会报表空间目录相关的错误。一般来说即使相互主备,也是规划好的,不会存在冲突。
  • lt_probackup,lt_basebackup(注:从lightdb 23.2开始,因为支持增量检查点,故不能再用pg_basebackup完全代替lt_basebackup),需要通过-T, --tablespace-mapping=OLDDIR=NEWDIR手动建新的表空间路径进行指定

  需要注意的是,在lightdb-x分布式版本中,表空间属性不支持透传到DN节点。索引不能声明tablespace xxx子句,如下:

lightdb@postgres=# \dS+ tab_for_tbs_103402
                            Table "public.tab_for_tbs_103402"
 Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
--------+---------+-----------+----------+---------+---------+--------------+-------------
 id     | integer |           |          |         | plain   |              | 
Access method: heap

lightdb@postgres=# create index idx_tab_for_tbs on tab_for_tbs(id) tablespace tab_tbs;
ERROR:  specifying tablespaces with CREATE INDEX statements is currently unsupported

  注:虽然如此,一般来说,我们是强烈建议数据文件,WAL日志,临时文件目录分开的。

  从lightdb 23.1开始,将支持oracle create tablespace语法,如下:

1.1创建单个表空间   
create tablespace ts_something   
  logging   
  datafile  '/dbf1/ts_sth.dbf'     
  size 32m    
  autoextend on    
  next 32m maxsize 2048m   
  extent management local;   
//   
1.2创建多个表空间   
CREATE TABLESPACE TS_IMAGEDATA   
    NOLOGGING    
    DATAFILE  'D:"oracle"oradata"DATA01.dbf'  SIZE 2000M,    
              'D:"oracle"oradata"DATA02.dbf'  SIZE 2000M,    
              'D:"oracle"oradata"DATA03.dbf'  SIZE 2000M,    
              'D:"oracle"oradata"DATA04.dbf'  SIZE 2000M,    
              'D:"oracle"oradata"DATA05.dbf'  SIZE 2000M EXTENT    
    MANAGEMENT LOCAL SEGMENT    
    SPACE MANAGEMENT  AUTO; 

  同样包含GUC参数lightdb_db_create_file_dest(其值默认为GUC $data_directory/../,在lt_initdb的初始化实例的时候会被设置)作为LOCATION对应的默认值,相当于OMF自动文件管理。上述create tablespace都相当于在lightdb_db_create_file_dest指定目录下创建数据文件。

  同时,LOCATION参数支持相对路径,如果路径非/开头,相对于lightdb_db_create_file_dest。例如:

create tablespace my_tbs location 'lt_data/zjh'; 相当于$LTDATA/../lt_data/zjh。

posted @ 2022-08-14 12:13  zhjh256  阅读(115)  评论(0编辑  收藏  举报