删除表数据问题

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.5
【问题描述】

我现在在测试tpc-h,需要测试100G和1T的场景。

首先使用TPCH生成了100G的数据,导入到数据库,一切正常,也可以查询数据。

obclient(root@yh)[(none)]> use tpch;
Database changed
obclient(root@yh)[tpch]> show tables
    -> 
    -> ;
+----------------+
| Tables_in_tpch |
+----------------+
| customer       |
| lineitem       |
| nation         |
| orders         |
| part           |
| partsupp       |
| region         |
| revenue0       |
| supplier       |
+----------------+
9 rows in set (0.017 sec)

obclient(root@yh)[tpch]> select count(*) from customer;
+----------+
| count(*) |
+----------+
| 15000000 |
+----------+
1 row in set (0.027 sec)

obclient(root@yh)[tpch]> select count(*) from lineitem;
+-----------+
| count(*)  |
+-----------+
| 600037902 |
+-----------+
1 row in set (0.100 sec)

后续我需要删除表,测试1T的场景。

还是按照官网文档 步骤六,进行建表操作。

例如:

drop tablegroup IF EXISTS tpch_tg_SF_TPC_USER_lineitem_order_group_1000;
drop tablegroup IF EXISTS  tpch_tg_SF_TPC_USER_partsupp_part_1000;
create tablegroup tpch_tg_SF_TPC_USER_lineitem_order_group_1000 binding true partition by key 1 partitions 256;
create tablegroup tpch_tg_SF_TPC_USER_partsupp_part_1000 binding true partition by key 1 partitions 256;


DROP TABLE IF EXISTS LINEITEM;
CREATE TABLE lineitem (
   l_orderkey bigint NOT NULL,
   l_partkey int(32) NOT NULL,
   l_suppkey int(32) NOT NULL,
   l_linenumber int(32) NOT NULL,
   l_quantity decimal(32,2) NOT NULL,
   l_extendedprice decimal(32,2) NOT NULL,
   l_discount decimal(15,2) NOT NULL,
   l_tax decimal(15,2) NOT NULL,
   l_returnflag varchar(64) DEFAULT NULL,
   l_linestatus varchar(64) DEFAULT NULL,
   l_shipdate date NOT NULL,
   l_commitdate date DEFAULT NULL,
   l_receiptdate date DEFAULT NULL,
   l_shipinstruct varchar(64) DEFAULT NULL,
   l_shipmode varchar(64) DEFAULT NULL,
   l_comment varchar(64) DEFAULT NULL,
primary key(l_shipdate, l_orderkey, l_linenumber)
)row_format = condensed
tablegroup = tpch_tg_SF_TPC_USER_lineitem_order_group_1000
partition by key (l_orderkey) partitions 256 with column group(each column);
alter table lineitem CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

此时我在数据库查询数据的时候,是查不到数据的。

这都很正常。

但是为啥删除前后我的磁盘空间没有变化?

这不合理吧?

难道是数据存储有预分配空间吗?

1 个赞

数据盘是预分配的。
可以在sys租户下查看使用率:

select zone,svr_ip,
concat(round(log_disk_assigned*100/log_disk_capacity),'%') log_disk_assigned_p,
concat(round(log_disk_in_use*100/log_disk_assigned),'%') log_disk_in_use_p,
concat(round(data_disk_allocated*100/data_disk_capacity),'%') data_disk_allocated_p,
concat(round(data_disk_in_use*100/data_disk_allocated),'%') data_disk_in_use_p
from oceanbase.gv$ob_servers order by zone,svr_ip;
1 个赞

好的,感谢解答。

我还有几个问题:

  1. 这个数据盘预分配是不是由datafile_size、datafile_disk_percentage、 datafile_maxsize这几个参数共同决定?

  2. 像我上面这种情况,当前服务主机磁盘已经预留不多了。我的tpch测试数据(1T)在当前服务器下,如果使用旁路导入方式导入数据,数据会存到其他节点去吧?

因为我们是分布式部署的。

1 个赞

1、这个其实你可以多看看官方的文档
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003379139
2、会的 如果创建租户没有限制副本数
select UNIT_ID,TENANT_ID,UNIT_GROUP_ID,ZONE,SVR_IP,SVR_PORT from DBA_OB_UNITS where TENANT_ID = 1004;
查看表的分布
SELECT * FROM oceanbase.DBA_OB_TABLE_LOCATIONS
WHERE DATABASE_NAME=‘test’ and TABLE_NAME=‘t1’

1、是的
2、看你的部署架构,每个zone有几台服务器。测试的租户unit个数情况。