2010-03-25 129 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