Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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 为什么while循环的执行速度会随时间变化?_Mysql_C_Performance_While Loop_Query Optimization - Fatal编程技术网

Mysql 为什么while循环的执行速度会随时间变化?

Mysql 为什么while循环的执行速度会随时间变化?,mysql,c,performance,while-loop,query-optimization,Mysql,C,Performance,While Loop,Query Optimization,在C while循环中有一个时间问题。在程序的一部分中,while循环通过SPI协议接收来自传感器的信息并将其存储在mysql数据库中,当我们检查存储的信息时,问题就出现了。 例如,数据库中每秒存储600个数据,但在某些秒内,存储的数据数量会减少到400个,几秒钟后会返回到每秒600个,依此类推。 我知道传感器的数据传输速率在固定的时钟上工作,无法更改。 但我不知道这个问题从何而来 以下是c语言中的while循环代码: while(1) { tx_buff[0]=0x08; tx_buff[0]

在C while循环中有一个时间问题。在程序的一部分中,while循环通过SPI协议接收来自传感器的信息并将其存储在mysql数据库中,当我们检查存储的信息时,问题就出现了。 例如,数据库中每秒存储600个数据,但在某些秒内,存储的数据数量会减少到400个,几秒钟后会返回到每秒600个,依此类推。 我知道传感器的数据传输速率在固定的时钟上工作,无法更改。 但我不知道这个问题从何而来

以下是c语言中的while循环代码:

while(1)
{
tx_buff[0]=0x08;
tx_buff[0]=(tx_buff[0]两件事

首先,打开到MySql服务器的连接并重用它。不要每次插入都打开一个新连接:它太慢了。请记住,MySql连接对象不是线程安全的

第二,如果您将多个批量插入操作捆绑到一个数据库事务中,MySql处理批量插入操作的效率最高

捆绑在一起的插入操作的合适数量是100个左右。这有助于提高MySql服务器的效率,因为大多数插入工作都发生在事务提交时。如果不在
START transaction;
commit;
MySql执行自动提交。这意味着每次插入也是一个事务,那么而且开销失控了

这很容易组织。当您的连接第一次打开时,将倒计时变量设置为100,并向MySql发出
START TRANSACTION;

每次插入时,递减倒计时变量。当倒计时变量为零时,重置它并执行一次
COMMIT;
,然后执行另一次
START TRANSACTION;

这不会使您的项目变成一个硬实时项目,但它会大大减少MySql的开销


并且,考虑在不同的主机上运行MySQL。< /P> <代码>并将其存储在MySQL数据库中-是磁盘IO(文件系统)操作吗?如果是,那么它不是依赖于RT响应的,因为FS在任何时候都可以“选择”。要重新组织,会产生相当大的延迟。通常,您应该为执行此操作设置一个不同的线程,并从

while
循环将其作为消息发送到另一个线程。您设置了几个线程,它们通过消息队列相互交互。这里,您需要将数据发送到将其存储到e SQL文件。在FS操作花费更长时间的情况下,该线程的消息队列将变得更加拥挤(消息尚未处理)。然后,一旦该操作完成,队列将逐渐“恢复正常”,其中只有几条消息处于挂起状态。因此,您应该确保使用足够大的消息队列,以处理偶尔出现的延迟。某些Unix调度程序还会惩罚在过去几秒钟内有执行时间的进程,而惩罚那些没有执行时间的进程。这可能会导致某种形式的处理器时间振荡。您可以在d使用进程的
nice
值,增加调度优先级。请参阅手册页。