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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2018-08-14 11.2.0.4 sql*loader/oci direct load导致kpodplck wait before retrying ORA-54