2

目前我们有类型 4 UUID(random) 作为主键的表。我们的应用层会批量插入数据库。但是由于主键是随机的,这将导致多次磁盘旋转。有四张桌子。

CREATE TABLE process (
     process_id binary(16) not null, // uuid
     created_time bigint not null,
     owner varchar(150) not null,
     primary key (process_id),
     index idx_c_t (created_time),
     index idx_o (owner)
)
Records inserted = 2000/min

CREATE TABLE process_job (
     job_id binary(16) not null, //uuid
     process_id binary(16) not null,  //uuid
     info varchar(200),
     text varchar(500),
     primary key(job_id),
     index idx_p_id (process_id)
)
Records inserted = 10000/min

CREATE TABLE ob_status (
     job_id binary(16) not null, //uuid
     status ('STARTED', 'SUCCESS', 'ERROR') not null,
     job_code varchar(100) not null,
     info varchar(200),
     text varchar(500),
     primary key(job_id, status, job_code)
)
Records inserted = 20000/min


CREATE TABLE process_job_custom (
     job_id binary(16) not null, //uuid
     key varchar(100) not null,
     value varchar(500),
     primary key(process_id, key)
)
Records inserted = 10000/min

我们所有的表格都使用 DYNAMIC 格式。

此外,我们会定期删除 15 天前的数据。我们通过考虑大约 1000 条记录分批运行此删除操作。但是当删除运行时,整个数据库的性能都很差。磁盘使用率非常高。(我们怀疑这是由于主键的随机性)

所以我们计划将我们的主键更改为(基于时间的键,uuid)并在(uuid)列上添加索引。

记录可能以随机顺序到达(不完全按照基于时间的密钥顺序)。但是基于时间的密钥的记录大多在 5 分钟内到达。我们的删除也是基于基于时间的键。

这会影响插入的性能吗?

此外,我们的主要用例涉及基于时间的查询。那么选择性能也会提高吗?

此外,我们计划按基于时间的键进行分区。

这会帮助我们提高整体性能吗?

我们怀疑主要问题是主键的随机性。

将基于时间的键(类似于进程的创建时间)添加为所有表中主键的第一部分,并且基于 uuid 列的索引对我们有帮助吗?

4

0 回答 0