mysql选择更新concurency问题

时间:2017-09-07 12:08:29

标签: mysql

我们有一张表:

CREATE TABLE usable (
id bigint(20) NOT NULL AUTO_INCREMENT primary key ,
device VARCHAR(64) NOT NULL,
key1 VARCHAR(128) NOT NULL,
key2 VARCHAR(128) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
create unique index uidx_usable on usable (key1);

CREATE TABLE used
(
usedid bigint(20) PRIMARY KEY NOT NULL AUTO_INCREMENT primary key,
devid VARCHAR(64) NOT NULL,
key1 VARCHAR(128) NOT NULL ,
key2 VARCHAR(64) NOT NULL '
created_time timestamp DEFAULT CURRENT_TIMESTAMP  NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
create unique index uidx_used on used (key1);
create unique index uidx_used_deviceid on used (devid);
  1. 从可用表中选择1条记录,多条线程。
  2. 将记录插入已使用的表格。
  3. 从可用表中删除此记录。
  4. 我的工作在这里:

    START TRANSACTION
    SELECT * FROM usable WHERE device = 555 order by rand() limit 1 FOR UPDATE;
    insert into used (key1, key2) values (key1, key2 from step 1 select result);
    delete from usable where id = (id from step 1 select result);
    COMMIT
    

    表格在InnoDB引擎中。 AutoCommit在全局变量中设置为ON。

    只有一个线程没有问题,这三个sql cmds大约100ms。有解决方案来改善吗? 但是,线程在100 QPS时开始挂起。 如何确认交易有效? 如何提高QPS

    (0.7~5ms)SELECT; (47ms~250ms)插入; (48ms~250ms)删除 为什么插入和删除需要大量时间?如何调整插入和删除sql?

0 个答案:

没有答案