本文主要介绍了索引创建并发任务数的计算方式,索引的默认创建模式以及如何观察索引的创建进度。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。
索引并发创建
索引并发创建说明。
任务数:单个表创建索引时,会生成 N 个任务排队。 N = data_size/tablet_size。
data_size 表的大小,通过
__all_virtual_meta_table查询。tablet_size 系统参数,分区内部并行处理(合并、查询等)时每个分片的大小,默认值:128M。
如果同时有多张表创建索引,那么变化的是任务数,执行任务的总线程数不变。
执行任务线程数:单个 OBServer 上,有 M 个线程负责执行 1 中的任务来创建索引,M = 系统租户的 parallel_servers_target * 2。
parallel_servers_target参数为系统租户的参数值,默认值 =MAX(3, min_cpu * cpu_quota_concurrency * 0.1 * 0.8),一般都等于 3。启动后允许修改。
索引创建并发的注意事项
如果要加快索引创建,不建议直接粗暴改大 parallel_servers_target(sys 租户的,和普通租户的 parallel_servers_target 无关)。需要分情况:
V2.x 之前的版本,需要同时改大
parallel_servers_target和parallel_max_servers,否则可能导致系统租户运行不稳定。V3.1 及之后版本,可以通过改大
parallel_servers_target来加速。无论 V2.x 还是 V3.x,建议最大值不超过
parallel_servers_target = min_cpu * 10。- 参与创建索引的线程数,一定不能超过物理 CPU 数量的上限,否则可以把系统打爆。
Oracle 模式指定 parallel 仅会修改索引的并行度,并不会启用索引并行。
索引创建的方式
OceanBase 数据库索引创建默认 online,无需再指定 online 关键字。
查看索引创建进度
obclient [oceanbase]> desc __all_virtual_long_ops_status:
+------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| tenant_id | bigint(20) | NO | | NULL | |
| sid | bigint(20) | NO | | NULL | |
| op_name | varchar(128) | NO | | NULL | |
| target | varchar(128) | NO | | NULL | |
| svr_ip | varchar(46) | NO | | NULL | |
| svr_port | bigint(20) | NO | | NULL | |
| start_time | bigint(20) | NO | | NULL | |
| finish_time | bigint(20) | NO | | NULL | |
| elapsed_time | bigint(20) | NO | | NULL | |
| remaining_time | bigint(20) | NO | | NULL | |
| last_update_time | bigint(20) | NO | | NULL | |
| percentage | bigint(20) | NO | | NULL | |
| message | varchar(500) | NO | | NULL | |
+------------------+--------------+------+-----+---------+-------+
13 rows in set (0.002 sec)
obclient [oceanbase]> desc gv$session_longops;
+------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------+------+-----+---------+-------+
| SID | bigint(20) | NO | | NULL | |
| OPNAME | varchar(128) | NO | | NULL | |
| TARGET | varchar(128) | NO | | NULL | |
| SVR_IP | varchar(46) | NO | | NULL | |
| SVR_PORT | bigint(20) | NO | | NULL | |
| START_TIME | bigint(20) | NO | | NULL | |
| ELAPSED_SECONDS | decimal(24,4) | NO | | NULL | |
| TIME_REMAINING | bigint(20) | NO | | NULL | |
| LAST_UPDATE_TIME | bigint(20) | NO | | NULL | |
| MESSAGE | varchar(500) | NO | | NULL | |
+------------------+---------------+------+-----+---------+-------+
10 rows in set (0.003 sec)