PHP/MySQL数据库连接优先级?

6
我有一个生产数据库,其中包含使用统计信息。这个数据库负责很多其他事情(不仅仅是统计计算)。我使用php定期汇总不同分辨率(日、周、月、年)的有趣统计数据,并将其放入由分辨率指定的桶中。
我编写的php应用程序在运行时会“完成”其数据,因此它将计算自上次运行以来各个分辨率和时间段的所有汇总统计数据。如果我们想要关闭此功能以调试数据库性能问题,这将非常有用,因为我可以重新启动它并使其完成其数据集,独立于脚本运行频率(cron作业可以从每天移动到每周等)。
我的问题是,这些计算相当耗费资源,会增加生产数据库服务器的查询每秒数(QPS)。是否有一种方法可以对特定的数据库连接设置“优先级”,使其仅在“离线周期”内执行这些计算?
也许一个适当的响应是将我正在处理的表复制到另一个统计数据库中,但遗憾的是,我没有足够的资源尝试这样做(至少目前还没有)。
感谢您的帮助, Josh

我也遇到了完全相同的问题! - camdixon
1个回答

5

好奇这是如何工作的...如果设置为1,则所有INSERT、UPDATE、DELETE和LOCK TABLE WRITE语句都会等待,直到受影响的表上没有挂起的SELECT或LOCK TABLE READ语句。这似乎是一个服务器设置?这似乎不合适,因为我不希望所有插入、更新、删除都受到影响(它是一个执行许多其他操作的生产数据库)。事实上,我希望由此连接发出的所有查询都被视为低优先级处理(甚至包括选择等)。 - Josh
2
文档中写道:“变量作用域:全局”,这意味着您可以在全局范围内设置它,也可以仅为会话/连接设置。并且它被标记为“dynamic: yes”,因此适用于http://dev.mysql.com/doc/refman/5.0/en/dynamic-system-variables.html。 - VolkerK
感谢回复 - 我已经投票支持这些答案。然而,查询的性质是在大数据集上进行select avg()和select max(),以及许多小的selects在小时间域内。我并不真正担心插入、更新和删除本身(它们在一个与产品没有交互的表上,因此锁定不会产生干扰)。我更担心的是因为排序等原因导致I/O达到最大或者处理器崩溃。除非我错过了什么,否则我不确定是否有一种通用的方法来在数据库不使用时简单地使用它。 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接