MySQL优化仅用于插入和检索

时间:2017-06-07 07:49:28

标签: mysql performance

我们的应用程序从传感器组合中读取数据,并将它们与时间戳一起写入数据库。每个传感器复合体每秒插入大约5次新数据(每个数据库服务器1..10个复合体;数据包含2个通常为25kB和50kB的blob),它们是从1..3台机器读取的(简单读取如下: select * from table where sensorId=?sensorId and timestamp>?lastTimestamp)。行永远不会更新;没有在数据库端创建报告;几天后删除旧行。只有一个表会偶尔收到更新。

该主表的主要索引是自动生成的ID,其中包含sensoridtimestamp的附加索引。

目前的表现非常糟糕。删除旧数据需要数小时(!),并且许多数据包不会发送到数据库,因为插入过程所需的时间比传感器读取之间的间隔长。如何在这种特定情况下优化数据库的性能?

transaction isolation level设置为READ_COMMITTED看起来很有希望,innodb_lock_timeout似乎也很有用。您能否建议在我们的特定场景中使用其他设置?

当我们摆脱接收更新的表格时,我们能获得更多可能性吗?

1 个答案:

答案 0 :(得分:1)

删除旧数据 - PARTITION BY RANGE(TO_DAYS(...))可让您DROP PARTITION比执行DELETEs更快。

更多详情:http://mysql.rjweb.org/doc.php/partitionmaint

你提到的SELECT需要这个'复合'指数:

INDEX(sensorId, timestamp)