使用具有唯一键的InnoDB进行非常慢的INSERT

时间:2018-03-19 04:28:13

标签: mysql innodb

对于这个表,我在小型InnoDB表上获得了非常慢的插入,每个大约40ms:

path('<slug:slug>/', MyView.as_view(), name='myview')

INSERT上的EXPLAIN给了我

CREATE TABLE IF NOT EXISTS events (
    serial          INT NOT NULL,               -- client side serial number
    time            BIGINT NOT NULL,            -- UNIX timestamp, client side, not server side
    shard           VARCHAR(255) NOT NULL,      -- server shard
    owner_name      VARCHAR(255) NOT NULL,      -- name of owner
    object_name     VARCHAR(255) NOT NULL,      -- object name
    region_name     VARCHAR(255) NOT NULL,      -- name of region
    region_corner_x   INT NOT NULL,             -- corner of region
    region_corner_Y   INT NOT NULL,             -- corner of region
    local_position_x  FLOAT NOT NULL,           -- X and Y only
    local_position_y  FLOAT NOT NULL,           -- X and Y only
    tripid          CHAR(40) NOT NULL,          -- trip ID (random unique identifier)
    severity        TINYINT NOT NULL,           -- an enum, really
    eventtype       VARCHAR(20) NOT NULL,       -- STARTUP, SHUTDOWN, etc.
    msg             TEXT,                       -- human-readable message
    auxval          FLOAT NOT NULL,             -- some other value associated with the event type
    INDEX(tripid),
    UNIQUE INDEX(tripid, serial),               -- catch dups at insert time
    INDEX(eventtype)
) ENGINE InnoDB;

我尝试删除索引。没有加速。从一张空桌子开始尝试。没有加速。这是在一个事务中,所以我将事务减少到这个插入。没有加速。

这是一个很小的测试案例。 200条记录。空表。空闲试验机。那个时间是一个INSERT。 200次插入大约需要10秒钟。 (插入必须单独完成;我在这里模拟传入的事件,而不是批量加载。)

现在,如果我切换到MyISAM,事情会加速大约200倍!

DB更新时间:108.224μs

整个测试的时间从10秒降至0.181秒。

我知道InnoDB速度较慢,但​​是200倍?

使用MySQL 5.7.21-0ubuntu0.16.04.1。 System是一个带有旋转硬盘的4 CPU Linux桌面。

0 个答案:

没有答案