
我有一個 php 文件,經常被呼叫以進行外部應用程式的會話檢查。我不知道每秒有多少個調用,但我認為可能每秒有20-100個調用。
然而,這個 .php 檔案包含一個更新一行的 SQL 查詢。一旦我不註釋這些行,整個資料庫就會變慢很多,最終我的論壇將無法再存取。我認為這類似於伺服器問題(例如許多 IOPS?)。不幸的是,我不知道如何找到速度減慢的確切原因,也不知道如何確定每秒收到多少個 php 檔案的呼叫。
這是一個非常簡單的 SQL 查詢(where 子句僅包含主鍵):
UPDATE bot_sessions SET ip_address = :ip_address, renewal_count = renewal_count + 1
WHERE username = :username AND session_token = :session_token
那麼兩個問題:
- 我怎麼知道我的特定 php 檔案每秒被呼叫的頻率是多少?
- 使用此更新查詢後,如何找到整個資料庫變慢的原因?
答案1
您應該能夠透過查看 Web 伺服器日誌來了解特定 PHP 檔案的呼叫頻率。還有其他一些技巧 - 例如使用 Google Analytics(不太準確),或更新文件/計數器(資源密集型)。
正如 @ma.tome 所說,監控您的使用率為您提供了一個良好的起點,並且通常很有用。一個 Mysql 進程運行在 135% 意味著它使用了超過 1 個 CPU。 (如果您有 4 個 CPU,則總數為 400%)。運行 vmstat 將為您提供 IO 資訊。
要做的另一件事可能是開始在資料庫中記錄查詢時間。另外,檢查您的索引 - 根據您的應用程序,如果尚未索引,您可以透過在 bot_sessions 中為用戶名建立索引來獲得巨大的效能提升。 (不確定 username 或 session_token 是否是您指定的主鍵,可能需要考慮在不是主鍵的索引上建立索引) - 無論哪種方式,where 子句包含的不僅僅是主鍵。
此外,您的系統可能只是記憶體不足。看看您使用了多少交換空間 - 如果需要,可以投入更多 RAM 來解決問題或減少 vm.swappiness。