小技巧:顯示資料庫查詢耗時,改善開發者習慣

我是九顆發表於2019-07-24

我會分享一系列在我開發生涯中積累的有用且容易實現的小技巧,本文是此係列的第一篇。

很多原因都可能導致網站執行緩慢,但這其中最常見的就是在資料庫查詢耗時太多。目前,資料庫查詢可能在網頁渲染過程中起著很重要的作用(網頁上的內容總得從某處獲取),但是有時候 一些不必要的亦或沒有優化好的查詢會影響網頁渲染的速度。

例如:

· 查詢的資料根本沒有被使用

· 查詢時未使用索引

· 單次查詢可以實現的功能卻做了多次查詢

· 慢且複雜的查詢

然而有一個簡單的機制可以間接的預防並且修復此類問題:

用‘診斷框’在每一個網頁顯示資料庫查詢的次數以及消耗的總時間。

下面這個示例是我自己的一個網站(截圖 或者 這個頁面)底部的一個樣例診斷塊:

Request Details:
DB – Queries: 4, Time: 5.66 ms

我在所有開發專案以及生產環境(用我的賬號登陸)中都加了類似的診斷框。對於一個大型網站來說,你很可能想當你從辦公室或者VPN訪問網站時啟用診斷框。如果你願意的話,診斷框中還可以增加一些更具體的資訊(即將執行的查詢語句以及其它過程花費的時間等等)。

好處

· 我可以及時的看到是否資料庫導致了網頁載入緩慢。 在生產環境做除錯時這一點尤為有效,因為有些資料庫查詢在生產環境和開發環境中的表現截然不同。

· 當增加新功能的時候,我可以直觀的感受到新增的資料查詢是否輕量級的。這能幫助我在這個新功能帶來的好處和它在訪問資料時所消耗的時間這兩者之間做一個 權衡。另外它還可以提醒我有些查詢語句需要手動優化或者做一些緩衝。

· 當我參加的專案中使用了ORM框架時,它能告訴我ORM產生的查詢語句是否正是我所期望的。

· 當刪除一個功能或者做了一些資料緩衝,我可以通過它來確認查詢數量是否如願有所下降。

尾聲

當然,這些點子不是我發明的,而且有些診斷模式幾乎是每個大型網站的常見功能。如果你還沒有用到它們,我強烈建議你花點時間去實現它們。有這樣的一個‘診斷盒’不會使你的網站本身變快,但它能在開發人員之間激發一些更好的習慣,並且長期來看,它可能對你的網站的速度有巨大的影響!

有興趣的可以看下我在上述網站使用的sqlalchemy的 查詢計數程式碼 。

釋出於 10:04

相關文章