MySQL 慢查詢 - 使用 PHPMyAdmin 快速,CPU 和 RAM 使用率低
我有一個在 Amazon EC2 上執行的站點,它執行速度很快,並且包含一些相當複雜的 MySQL 查詢。
該站點的一部分是向另一個站點提供數據的 API。這些查詢非常簡單(實際上是從只包含該行的表中返回一行)。
從外部域進行這些 API 呼叫會導致 10-20 秒的延遲。數據始終返回正常,不會引發錯誤。日誌中沒有顯示任何內容。
在 PHPMyAdmin 中本地執行這些查詢中的任何一個,它們在大約 0.007 秒內完成。
CPU 負載為 20%-30%。RAM 使用率約為 60%。
我的問題類似於:
我在 my.cnf 中添加了“skip_name_resolve”。這沒什麼區別。
有很多關於 MySQL 和 DNS 的討論,但是周圍的文件並沒有真正幫助我。
這似乎是一個簡單解決方案的問題,但我無法弄清楚它是什麼。
編輯1。
澄清一下,我的 MySQL 查詢非常基礎。其中一個簡直就是
SELECT * FROM aboutPage
其中 aboutPage 包含 1 行 5 列的微小數據。這在本地 PHPMyAdmin 中執行速度如預期的那樣快,但在遠端訪問時負載很慢。
執行 API 的主應用程序也執行得很快。它實際上只是在嘗試從另一個 IP/DNS 訪問數據時速度很慢。
您需要確定哪些查詢需要一些時間來執行並進行相應的優化。預設情況下 mysql 不會記錄慢查詢,因此您必須將以下內容添加到您的 mysql 配置文件 -
log-slow-queries slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 10 // in seconds - you can replace this with another number.
對於任何 mysql 性能問題,最好使用mysqltuner
這很可能是伺服器設置問題……但不是 MySQL 伺服器。根據到目前為止對您問題的描述,這聽起來與 MySQL 並沒有真正的關係。從 MySQL 的角度來看,它所有的傳入連接都來自同一個地方——執行 API 的伺服器和 phpMyAdmin。
事實上,很難看出它怎麼可能與 MySQL 相關,因為外部沒有人真正直接連接到 MySQL。
這個問題聽起來像是在堆棧中更進一步。Web 伺服器怎麼樣……它是否可能被配置為進行反向 DNS 查找以進行日誌記錄?
API 是否從外部的任何地方都很慢?如果你不知道,那麼你需要測試。
如果您可以修改執行 API 的網站程式碼,請添加程式碼以收集一些基準並在某處放置調試消息。查看系統時間並在請求到達時、獲取 mysql 連接對象(無論您使用什麼庫)時、連接到 mysql 時、準備好時寫入某種調試消息或日誌條目發送查詢,當您返回結果集時……這些時間戳之間的差異將告訴您瓶頸在哪裡。
或者,它們很可能在時間上都非常接近,這將告訴您沒有瓶頸,並且遠端站點在與您建立初始連接時遇到延遲。
Web 伺服器日誌可能會顯示 API 呼叫的執行時間。這些與外界的體驗相比如何?
您是否在 EC2 實例前執行彈性負載均衡器?如果是,您是否為實際上沒有部署實例的任何可用區配置了它?這是一個常見錯誤,由於 ELB 的工作方式,會導致意外超時。從目前未使用的任何可用區域中刪除它。