2010-03-25 130 views
6

我有一个生产数据库,其中使用统计信息驻留。这个数据库负责许多其他事情(不仅仅是统计数据)。我使用php定期在分辨率决定的桶中汇总不同的分辨率(日,周,月,年)。PHP/MySQL数据库连接优先级?

我已经写了“完成”的数据PHP应用程序时,它的运行,这样它会计算所有决议,因为这是最后一次运行期间卷起的统计数据。如果我们想要关闭它来调试数据库性能问题,这是非常有用的,因为我可以重新打开它并使其完成与脚本运行频率无关的数据集(cron作业可以从每日移动到每周等)。

我遇到的问题是计算相当密集并且驱动生产数据库服务器的QPS上升。有没有办法在特定的数据库连接上设置“优先级”,以便它只使用“off-cycles”来执行这些计算?

也许一个恰当的反应会复制我的工作到不同的统计数据库中的表,但不幸的是我没有资源来尝试这样的事情(还)。

在此先感谢您的帮助, 乔希

+0

我有这个完全相同的问题! – camdixon 2016-12-02 18:56:45

回答

5

low_priority_updates应该做的正是你需要的。

+0

好奇的如何工作...... “如果设置为1,所有INSERT,UPDATE,DELETE和LOCK TABLE WRITE语句将一直等待,直到在受影响的表上没有挂起的SELECT或LOCK TABLE READ。 这似乎是一个服务器设置?这看起来并不合适,因为我不希望所有插入,更新和删除都会受到影响(其生产数据库还有很多其他功能)。事实上,我希望这个连接发出的所有查询都被视为低优先级(甚至选择等) – Josh 2010-03-25 20:17:59

+2

文档中提到“变量作用域:两者”,这意味着您可以在全局范围内对其进行设置,但也仅对会话/连接进行设置。它被标记为“动态:是”,因此适用http://dev.mysql.com/doc/refman/5.0/en/dynamic-system-variables.html。 – VolkerK 2010-03-25 20:37:22

+0

感谢您的回应 - 我投了答案。但是,密集查询的性质是在大数据集上选择avg()并选择max(),以及在小时间域上选择很多小数据。它并不是真正的插入,更新和删除,我担心本身(它们在一个没有与产品交互的表上,因此锁没有侵入性)。由于排序等原因,我更担心maxing I/O或者处理器的崩溃。我不确定是否有一种通用的方式来简单地使用数据库,除非我错过了某些东西。 – Josh 2010-03-28 03:42:32