运行环境:
在tiDB中国目前的版本家索引很费时间,对磁盘的IO影响较大,若在加索引的时候可以考虑kill掉会话。
待空闲时间在加索引。
1.准备单表1000万条记录:
sysbench
2.执行添加字段和索引的语句:
alter table benchmark1.sbtest1 add column datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE INDEX ix_modifytime ON benchmark1.sbtest1(modifytime);
3.查询会话ID:
ID USER HOST DB COMMAND TIME STATE Info
------ ------ ------------- ---------- ------- ------ ------ ---------------------------------------------------------------------------------
150797 root 10.19.157.136 benchmark1 Query 4 2 create index ix_modifytime on benchmark1.sbtest1(modifytime)
156458 root 10.19.157.136 Query 0 2 select * from INFORMATION_SCHEMA.PROCESSLIST p where p.info <>''
LIMIT 0, 1000
kill tidb 150797;
4.查看进度:
JOB_ID DB_NAME TABLE_NAME JOB_TYPE SCHEMA_STATE SCHEMA_ID TABLE_ID ROW_COUNT START_TIME STATE
------ ---------- ---------- -------------- -------------------- --------- -------- --------- --------------------------------- ---------
9779 benchmark1 sbtest1 add index write reorganization 4782 9773 4438590 2018-09-20 16:50:09.461 +0800 CST running
9778 benchmark1 sbtest1 drop index none 4782 9773 0 2018-09-20 16:49:11.861 +0800 CST synced
admin cancel ddl jobs 9779;
总结:
可以 kill DML 语句,首先使用 show processlist,找到对应 session 的 id,然后执行 kill tidb [session id]。
可以 kill DDL 语句,首先使用 admin show ddl jobs,查找需要 kill 的 DDL job ID,然后执行 admin cancel ddl jobs 'job_id' [, 'job_id'] 。