2014-10-16 45 views
0

我有一個每隔幾分鐘執行一次MySQL查詢的cronjob,總結MyISAM表中的大量行。但是,如果此表被鎖定幾分鐘,那麼這些彙總查詢將堆積起來,因此即使表再次可用時,它們也會長時間阻止它。如果表被鎖定,則忽略MySQL查詢

這些查詢都不是必不可少的,所以我很高興與他們不時失敗。因此,如果這些查詢僅在表被阻塞超過一秒或兩秒時失敗,我纔會更喜歡它。

有沒有辦法向MySQL提交一個查詢,如果它等待表鎖超過幾秒就會自動被殺死?我能以某種方式將查詢標記爲不重要嗎?

回答

0

看看pt-kill(Percona的工具包)。如果需要,您可以向cron查詢添加可識別的註釋以幫助定位查詢。值得使用--sentinel標誌來讓你安全地導致pt-kill退出。

此外,如果您將鎖定添加到cron作業,那麼您將防止堆積。

0

更好的方法是運行這些查詢之一嗎?這將阻止發生堆積。做一些semafore(甚至文件類型標誌)來查看是否有某個查詢已經在等待,如果是的話,不要啓動另一個查詢)。

正如你所說,如果有些沒有運行,這並不壞,這可能更容易實施。