我有一个存储过程,我想永远运行,但在循环中休眠一秒钟。当它醒来时,它会轮询一个表以查看它是否应该做一些工作。工作只需要每分钟完成一次,因此无需担心投票表同时受到来自两个作者的更新的影响。
在存储过程SLEEP()
中间隔的最佳方法是什么?实际上,如果它可以休眠 200 毫秒,那就太好了,但一秒钟也可以。
我有一个存储过程,我想永远运行,但在循环中休眠一秒钟。当它醒来时,它会轮询一个表以查看它是否应该做一些工作。工作只需要每分钟完成一次,因此无需担心投票表同时受到来自两个作者的更新的影响。
在存储过程SLEEP()
中间隔的最佳方法是什么?实际上,如果它可以休眠 200 毫秒,那就太好了,但一秒钟也可以。
我遇到了同样的问题。谷歌搜索了很多之后,我发现我们可以使用
SELECT SLEEP(<seconds>);
延迟我们的程序这么多秒。在你的情况下,使用
SELECT SLEEP(0.2);
就好了。
您可以使用:
DO SLEEP(0.2);
参考:http ://dev.mysql.com/doc/refman/5.7/en/do.html
或者
SELECT SLEEP(0.2);
参考:http ://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_sleep
MySQL 有一个事件调度程序。https://dev.mysql.com/doc/refman/5.6/en/events-overview.html
样本:
CREATE EVENT performance_schema_snapshots.fill_events_statements_summary_by_digest_history1
ON SCHEDULE -- every day at 6 am
EVERY 1 DAY
STARTS TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 14 HOUR
DO
-- take snapshot
CALL performance_schema_snapshots.events_statements_summary_by_digest_snapshot_reset ();
你没有指定你正在使用哪个数据库,但通常实现你想要的方法不是拥有一个无限运行的存储过程,而是拥有一些外部组件——比如调度程序,或者 MSSQL 中的 SQL Server 代理——经常执行存储过程.