PHP或MySQL中的低优先级请求

时间:2011-10-12 16:41:04

标签: php mysql database-performance

我有一个拥有500万行的网站和数据库,它的工作就像一个魅力。但是,我每小时运行一次清理cronjob,将旧数据放入“日志”表并删除旧数据,此时服务器响应非常慢。是否有可能通过PHP或MySQL将该工作放在较低的优先级?

5 个答案:

答案 0 :(得分:5)

我认为清理中最重的任务是DELETE操作,你可以使用LOW_PRIORITY。

从MySql manual page删除语法:

  

删除 [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name ...

和描述:

  

如果指定 LOW_PRIORITY ,则服务器会延迟DELETE的执行,直到没有其他客户端从表中读取为止。这仅影响仅使用表级锁定的存储引擎(例如MyISAM,MEMORY和MERGE)。

答案 1 :(得分:2)

在MYSQL中有这样的事情,即低优先级更新 - 在此处记录 - > http://dev.mysql.com/doc/refman/5.5/en/server-options.html#option_mysqld_low-priority-updates

**仅适用于MyISAM,MEMORY,MERGE存储引擎......

答案 2 :(得分:1)

MYSQL中的一个低优先级请求是INSERT DELAYED。但它只适用于INSERT,而不是UPDATE或DELETE。

编辑:我只知道DELETE也可以延迟!

答案 3 :(得分:1)

一种可能的解决方案是在从属复制服务器上复制旧数据。这样,重负荷完全在那个奴隶箱上。在slave上完成复制后,您可以在master上删除。

答案 4 :(得分:1)

正如the documentation中所述,您可以在查询中添加LOW_PRIORITY。因此,您的查询将变为:

$sql = "INSERT LOW_PRIORITY INTO #__bet_oddslog (id, team1, team2, league, sport, time, q1, q2)"; $sql .= " SELECT a.id, a.team1, a.team2, a.league, a.sport, a.time, AVG(b.q1) as q1, "; $sql .= " AVG(b.q2) as q2 FROM #__bet_details as a, #__bet_1x2_best as b WHERE time<'".date('Y-m-d H:i:s', strtotime("now"))."' AND a.id=b.bet_id GROUP BY b.bet_id";