No.6
(单选) 你是KingbaseESv8的系统管理员,现在生产库上的一个复杂查询由于生成的临时文件过大导致磁盘空间不足而中止了,你需要为其指定一个新的磁盘来存放临时文件。则以下哪个选项适用于这种场景?
A.
CREATE
TABLESPACE语句和配置default_tablespace参数
B.
CREATE TABLESPACE语句和配置temp_tablespaces参数
C.
CREATE
TEMPORARY TABLESPACE语句和配置default_tablespace参数
D.
CREATE
TEMPORARY TABLESPACE语句和配置temp_tablespaces参数
【答案】B
【解析】
--可以把kes的临时表空间建立在/dev/shm下面提高性能
-- 新建目录结构.
mkdir /dev/shm/tbs_tmp
-- 创建表空间
create tablespace tbs_tmp location '/dev/shm/tbs_tmp';
--如果把目录建在/dev/shm目录下,需要改变目录权限,默认为root用户
chown kingbase.kingbase /dev/shm
--设置临时表空间 -- 会话级生效
set session temp_tablespaces='tbs_tmp';
--查看临时表空间
TEST=# show temp_tablespaces ;
--创建测试表
TEST=# create temp table
test2 (id int);
TEST=# \d+ test2
Table
"sys_temp_5.test2"
Column
| Type
| Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------
id | integer | | plain | |
Has OIDs: no
Tablespace: "tbs_tmp"
--插入数据
TEST=# insert into test2
select generate_series(1,1000000);
--可发现此目录明显增大,说明临时表的数据已经进到此目录
35M /dev/shm/tbs_tmp/
--由于是临时表,故session退出后此数据就会被清空,临时表目录大小变为0
0 /dev/shm/tbs_tmp/
--如果要想让临时表空间的设置对所有的session永久生效,则需要修改配置文件
[kingbase@kes tmp]$ vim $KINGBASE_DATA/kingbase.conf
temp_tablespaces = 'tbs_tmp'
[kingbase@kes tmp]$ sys_ctl reload




