Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅针对插入和检索的MySQL优化_Mysql_Performance - Fatal编程技术网

仅针对插入和检索的MySQL优化

仅针对插入和检索的MySQL优化,mysql,performance,Mysql,Performance,我们的应用程序从传感器复合体读取数据,并将其连同时间戳一起写入数据库。每个传感器复合体每秒插入5次新数据,每个数据库服务器插入1..10个复合体;数据包含2个通常分别为25kB和50kB的blob,它们从1..3台机器中读取,简单如下:从表中选择*,其中sensorId=?sensorId and timestamp>?lastTimestamp。行永远不会更新;没有在数据库端创建报告;几天后删除旧行。只有一个表偶尔会收到更新 该主表的主索引是一个自动生成的id,带有传感器id和时间戳的附加索引

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

该主表的主索引是一个自动生成的id,带有传感器id和时间戳的附加索引

目前的表现非常糟糕。删除旧数据需要几个小时!,而且许多数据包没有发送到数据库,因为插入过程比传感器读取之间的间隔时间长。在这种特定场景中,我们如何优化数据库的性能

将事务隔离级别设置为READ_COMMITTED看起来很有希望,而且innodb_lock_timeout似乎也很有用。您能建议在我们的特定场景中有用的进一步设置吗

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

删除旧数据-按RANGETO\u天分区。。。使您删除分区的速度比删除快得多

更多详情:

您提到的SELECT需要这个“综合”索引:

INDEX(sensorId, timestamp)

缓慢的插入通常是由于数据库必须在每次插入时重新创建一些巨大的索引造成的。请将表格和索引定义添加到问题中。谢谢。编辑您的问题并添加SHOW CREATE TABLE TABLE Name的输出。我感觉这更像是一个dba问题我无法测试它,但您的建议看起来非常合理我的设计数据库的同事,现在决定使用另一种方法,认为他们可以通过使用新数据更新旧行来完全摆脱delete语句……如果您是通过deleted列逻辑删除行,则可能需要在SELECTs中指定AND deleted=0。这可能会影响性能。我们需要更多的细节来进一步讨论。