暂无图片
暂无图片
10
暂无图片
暂无图片
暂无图片

GBase 8s存储结构介绍及设置数据库空间自动拓展(注意操作系统空间)

原创 一直在路上 2022-02-07
30125
天津南大通用数据技术股份有限公司(GBASE)成立于2004年,始终坚持国产数据库的自主研发和推广,为用户提供全栈国产数据库产品和服务。
南大通用是国家级高新技术企业、国家规划布局内重点软件企业、信创工委会成员企业(0084)。
南大通用是目前国内唯一一家专注于数据库产品研发,并且在金融、电信行业得到规模化应用的独立数据库服务商。
  • 在传统交易领域,南大通用事务型数据库GBase 8s作为一款成熟稳定的安全事务型数据库,已经在中国人民银行、兴业银行、北京农商行、国家电网、12306、国家信息中心、某水电站、国防某部等关键领域的核心业务系统上实现规模化应用。

  • 在项目实际应用中,如果客户数据库的应用场景是数据量增长较快,如果空间规划不够,可能会出现数据空间满的情况,基于多次遇到此问题,现进行GBase 8s数据库空间自动扩展测试,在这个测试之前,我们先来了解一下物理存储单元的知识点。

  • 存储结构介绍(包括物理存储单元、逻辑存储单元、大对象存储)

    一个GBase 8s实例Instance可以创建多个dbspace,一个dbspace可以包含多个物理chunk,一个chunk分成多个连续扩展区extent,一个表或者索引占用的空间被称为一个tablespace,一个extent包含多个物理页page。

    其中,dbspace、tablespace和extent属于逻辑存储单元;chunk和page属于物理存储单元。

  • chunk

chunk就是用于存储数据的连续磁盘空间,也就是存储数据库数据的文件或者裸设备。

一个chunk可以是一个裸设备(Raw Device)或者一个UNIX文件(Cooked File)。

一个chunk最大可以是4TB,最多可以有32767个chunk。

root chunk包含整个数据库保留页及系统表等信息。一般将物理日志、逻辑日志迁移到单独的dbspace上。

一个非root chunk主要存储表、索引的数据(Tablespace),划分为多个连续的extent。

  • page

数据页page是最基本的存储单元,是最小的I/O单元。磁盘的一个数据页读取到内存就会分配一个

同样大小的内存page来存储。

  • 设置数据库空间自动拓展操作步骤(注意:适用于数据空间要求远低于操作系统空间的情境下使用

1、新建数据空间文件datadbs2_2,加权限:

cd /opt/dbs/

touch datadbs2_2

chmod 660 datadbs2_2

2、在数据库用命令新增datadbs2空间:

onspaces -c -d datadbs2 -p /opt/dbs/datadbs2_2 -o 0 -s 102400 -k 16k

查询:
onstat -d

4c43e880      7      0x60001     7      1      16384     N      BA      gbasedbt     datadbs2

4e8b2028    7      7     0      6400     6347      PO-B-D /opt/dbs/datadbs2_2

  • 数据库数据空间自动拓展设置:

3、命令行格式设置:

dbaccess sysadmin -

execute function task (“modify chunk extendable”,7);

onstat -d

4e8b2028      7      7      0      6400     6347     PO-BED      /opt/dbs/datadbs2_2

4、在datadbs2创建测试库,并使用测试表并生成大量数据

dbaccess - -

create database testdb in datadbs2 with log;

dbaccess testdb -

create table test2 (id serial,c char(1000));

insert into test2(id) values(1);

insert into test2(id) values(2);

insert into test2(id) values(3);

insert into test2(id) values(4);

insert into test2(id) values(5);

insert into test2(id) values(6);

insert into test2(id) values(7);

insert into test2(id) values(8);

insert into test2(id) values(9);

insert into test2(id) values(10);

5、反复执行至datadbs2的free空间为0(或者很小):

insert into test2 select * from test2;

onstat -d

4e8b2028     7     7      0      6400   181     PO-BED     /opt/dbs/datadbs2_2

6、当chunk空间使用完时,继续insert记录,将自动拓展chunk的大小,前提是裸设备有剩余空间。

insert into test2 select first 20000* from test2;

通过onstat -d查询,发现总空间大小增加,已实现空间的自动拓展:

4e8b2028     7     7     0     7424  0      PO-BED      /opt/dbs/datadbs2_2

  • 另外建表的时候可指定extent大小

如extent size 1000000 next size 500000 lock mode row;

onstat -d查询:

4c507028     7      7     0      38674     0     PO-BED     /opt/dbs/datadbs2_2

即自动扩展空间大小为:38674-7424=31250

验证空间增量乘页大小16K正好与next size500000是一致的:500000=31250*16

  • 设置chunk可扩展后,也可指定chunk扩展增加指定大小:

如设置编号为7的chunk自动扩展:

execute function task (‘modify chunk extendable’,7);

如chunk增加2G:

execute function task(‘modify chunk extend’,1,2000000);

  • pagesize对应rowsize大小关系:

pagesize     rowsize

2K                 3Byte

4K                 11Byte

8K                 28Byte

16K               60Byte

  • GBase 8s存储限制情况

当我们在向表中insert记录时,提示如下信息,可能原因有3个:

1、空间不足

2、extents最大上限

3、最大数据页上限

271:Could not insert new row into the table.

136:ISAM error:no more extents

  • 此时,我们可以根据实际情况的原因,通过如下措施来解决该问题:

1、空间不足→扩大空间;

2、extents上限→重建表,使用较大的extend size和next size或者删除表中的部分记录;

3、最大数据页上限→使用分片表或者使用更大的数据页

最后修改时间:2023-03-09 11:46:23
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论