Mysql IO写的太多了

时间:2017-04-07 12:15:20

标签: mysql io

我有一张在我的服务器上使用myisam引擎的表。平均每秒有10个更新语句。我发现mysql进程磁盘写入比理论值高很多。经过实验,我怀疑修改任何数据列会重写整行数据。以下是一个实验...

我的表:

CREATE TABLE `test_update` (
  `id` int(11) NOT NULL DEFAULT '0',
  `str1` blob,
  `str2` blob,
  `str3` blob,
  `update_time` int(11) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `update_time` (`update_time`)
) ENGINE=MyISAM;

我插入了100000行数据,每行有30k字符串(每个blob 10k)。之后我随机更新'update_time'列1行/秒

while 1:
    sql = "update test_update set update_time=%d where id=%d" %(now, randomid)
    cur.execute(sql)
    conn.commit()

    slp_t = 1-(time.time()-end)
    if slp_t>0:
        time.sleep(slp_t)
    end=time.time()

和iotop显示:

https://i.stack.imgur.com/sJa8y.png

似乎修改int列会重写整行(甚至更多)。真的吗?如果答案是肯定的,为什么它的设计是这样的呢?我该怎么做才能避免这种浪费?

0 个答案:

没有答案