跳轉到

DB 好慢

  1. data2g / newrelic / grafana 上面的 CPU, io, waits, networks 如何?有無明顯的 bottleneck?目前系統是 cpu bound ? io bound ? lock bound ?

  2. 系統中的 slow query 如何?有無 cartesian join?還是只涉及某一個 table 時才慢?

  3. table schema 有沒有合適的 index ?

  4. redis cache 有設好嗎?http cache 的 headers 有設好嗎?

  5. DB 參數是正常的嗎?像是有 16 GB RAM 的機器,但是只讓 DB 用上 128 MB?

  6. 系統有沒有 hot spot?

  7. 系統有沒有突然爆發性的流量? rate limit 有做好嗎?db connection pool 有設好嗎?

  8. 發生災情時,DB 狀態如何?有沒有東西卡住然後變滾雪球?像是有 update 但是沒 commit 的 transaction,再加上 DB 沒有 auto-rollback idle connection

從以上幾點提到的可能性,收窄問題去找到 root cause。

一般會說「DB 很慢」的,很多時候都是癌症第四期:在多個地方都犯錯。

如果是 lock-bound / slow-query / schema design flaw 這些問題,很可能連 source code 也要看。