簡體   English   中英

緩存數據以備用 mysql 查詢

[英]Caching data to spare mysql queries

我有一個 PHP 應用程序,它最多同時執行一百次,而且非常頻繁。 (它是一個擁有 250k+ 用戶的電報反垃圾郵件機器人)腳本本身進行各種數據庫調用(代碼更新、計數器等),但它每次也會從數據庫中加載或多或少的“靜態”數據,如正則表達式或 json 配置文件。 我的腳本也在做圖像處理,所以服務器的 CPU 和 RAM 有時會承受壓力。

幾天前我遇到了一個問題,由於缺少可用的 memory,apache2 OOM-Killer 正在殺死 mysql 服務器進程。mysql 服務器沒有自動重啟,導致我的腳本中斷了幾個小時。

我已經做了一些代碼優化,使我的服務器能夠呼吸,但我現在正在尋找的是有一些緩存方法來存儲腳本執行之間的數據,並有可能根據時間間隔更新它們。 首先,我想到了可以序列化數據的平面文件,但我想知道這對性能來說是否是個好主意。

就我而言,在 mysql 查詢中使用緩存數據是否有好處? 關於訪問速度、執行速度,優缺點是什么? 最后,我應該實施什么緩存方法? 我知道最簡單的解決方案是升級我的服務器容量,我計划盡快這樣做。

服務器正在運行 Debian 11, PHP 8.0 謝謝。

如果您可以使用 NoSQL 來提供這些查詢,它會大大加快速度。

現在,如果這是一個 no go,您可以 go old school 並將該“靜態”數據保留在文件系統中。

然后,您可以創建自己的計時器,例如每 20 分鍾運行一次以更新文件。

當您詢問有關訪問速度、執行速度的信息時,答案將始終是“取決於”,但從您所說的來看,訪問不斷查詢數據庫以獲取相同信息的文件系統會更好……

復雜性、一致性等導致我建議不要使用緩存層。 相反,讓我們在其他優化方面做更多的工作。

OOM 意味着某些東西被不正確地調整。 向我們展示您在 my.cnf 中的內容。 你有多少內存? 圖像處理需要多少 RAM? (PHP 的圖像* 庫有點像 memory 豬。)我們需要先了解 MySQL 可以擁有多少 RAM。

對於調整,請提供GLOBAL STATUSVARIABLES 參見http://mysql.rjweb.org/doc.php/mysql_analysis

該鏈接還顯示了如何收集慢日志。 在其中我們應該能夠找到“最差”的查詢並致力於優化它們。 對於“一百次並發”,再快的查詢也需要進一步優化。 提供“最差”查詢時,請提供SHOW CREATE TABLE

另一種技術是減少Apache 被允許運行的孩子的數量。 Apache會排隊其他人。 “數百”對於 Apache 或 MySQL 來說太多了; 最好等着開始其中的一些,而不是讓“數百人”互相絆倒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM