DB 好慢
-
data2g / newrelic / grafana 上面的 CPU, io, waits, networks 如何?有無明顯的 bottleneck?目前系統是 cpu bound ? io bound ? lock bound ?
-
系統中的 slow query 如何?有無 cartesian join?還是只涉及某一個 table 時才慢?
-
table schema 有沒有合適的 index ?
-
redis cache 有設好嗎?http cache 的 headers 有設好嗎?
-
DB 參數是正常的嗎?像是有 16 GB RAM 的機器,但是只讓 DB 用上 128 MB?
-
系統有沒有 hot spot?
-
系統有沒有突然爆發性的流量? rate limit 有做好嗎?db connection pool 有設好嗎?
-
發生災情時,DB 狀態如何?有沒有東西卡住然後變滾雪球?像是有 update 但是沒 commit 的 transaction,再加上 DB 沒有 auto-rollback idle connection
從以上幾點提到的可能性,收窄問題去找到 root cause。
一般會說「DB 很慢」的,很多時候都是癌症第四期:在多個地方都犯錯。
如果是 lock-bound / slow-query / schema design flaw 這些問題,很可能連 source code 也要看。