請關掉你的資料庫連線!並且請使用資料庫連線池
本文由碼農網 – 唐李川原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
那看上去也許是一個即簡單又很明顯的規則,然而,確保你的資料庫連線被以適時的方式關閉對保護你的資料庫效能和可利用性有很大幫助。在下面這些技巧的幫助下你可以很好地關閉你的資料庫連線。
一個智者曾對我說,“如果你開啟了一個資源使用時,請在你使用好的時候確保你關上了它”。
注意,他沒這樣說,“當你開啟一個資源使用時,請在你使用好時確保你關上了它,如果你不關上它,一點問題也沒有,你正在使用的庫/驅動/執行時間最終會自動關上它”。
如果每次我看見資源被開啟使用而使用完以後又認為它關閉了或最終超時關閉時都有5分錢的話,我會成為一個富有的人。沒有比資料庫連線更嚴重的例子了。
我們都會對那樣做感到內疚,但是不恰當地關閉資料庫連線帶來的負面效果會在你沒預料到或者意想不到的情況下被強烈的感覺到。在你最新發布的產品系統裡恰好一切都會發出嗡嗡的響聲直到不久的將來某時你的客戶驚慌失措地給你打了個電話,他(她)想知道為什麼他們的應用程式或者系統不再工作了。或者,更糟糕的是,這個問題會斷斷續續地發生,一些使用者可以用這個系統,而另一些使用者卻用不了。
不過,還是有好訊息的。這些各種各樣的問題可以用一點預見和紀律來解決。
連線池的規則
只要有可能,不要依靠你資料庫本身的初始連線資源。這些初始連線資源通常是在資料庫本身配置好的,不要為不同的客戶端去很好地擴充套件它們或者很好地配置它們,在多企業架構的狀況下這種做法很痛苦。
資料庫連線池最大的優點在於它能合理安排資料庫連線(這樣一來資料庫連線資源就可以來做更重要的事情像查詢和提供資料)和它能設定一個你的應用程式可以獲得的可配置的資料庫最大連線數。
你沒理由不使用一個資料庫連線池。
當你寫完開啟的資料庫資源時請關上它
當你第一次寫資料庫物件開啟命令時,乾脆直接在connection.open()程式碼下面幾行寫上connection.close()(這有點好笑),然後再在connection.open()和connection.close()之間寫其他的程式碼。這樣,你就會被迫去看到connection.close()和記得關閉資料庫連線。
異常的時候
當處理資源時,使用try/catch異常處理塊是常用的模式。資料庫連線就不同了。你不可能總是知道什麼時候或者什麼地方你的程式碼就出現了問題,但是你仍然應該為它做好準備。
確保在恰當的catch程式碼塊裡釋放你任何潛在地開啟的連線。在你想關閉連線之前首先去檢查一下你是否有一個有效的連線被開啟也是一個好主意,這樣以免引起其他的異常!
測試,診斷,故障排除
大多數的關係型資料庫系統都有幫助你檢查它正在使用的連線是否被你的程式碼正確關閉的能力。例如,在MySQL資料庫裡,你需要做的是以管理員的身份(或者有適合許可權的使用者)通過在命令列(或者你喜歡的資料庫客戶端)輸入命令的方式來連線到資料庫伺服器,
SHOW PROCESSLIST;
…通過在命令列輸入SHOW PROCESSLIST顯示如下的資訊:
+----+------+-----------------+--------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------------+--------+---------+------+-------+------------------+ | 4 | root | localhost | webapp | Query | 0 | NULL | show processlist | | 6 | root | localhost:3306 | webapp | Sleep | 208 | | NULL | | 8 | root | localhost:3307 | webapp | Sleep | 208 | | NULL | | 9 | root | localhost:3309 | webapp | Sleep | 208 | | NULL | +----+------+-----------------+--------+---------+------+-------+------------------+ 4 rows in set (0.00 sec)
從這個資訊列表裡,我們可以快速地知道並不是所有的連線都被恰當地關閉了。
我常常驚訝我所遇到的很多開發人員沒有意識到這個命令,或者至少知道這個命令的。我們要知道它,我們要使用它,並且我們要愛上它!
結論
雖然資料庫在管理這些資料庫連線時越來越好也越來越智慧,這也許是正確的,但是這不能成為我們變懶的藉口,因此不要認為沒事就跳過這些技巧。要知道在開發界記憶體洩漏是重大的災難。
通過確保總是有足夠的連線可以被服務請求所用可以取悅你的客戶。並且同時通過保持一個最小的開啟連線數,這也有助於改善你資料庫的效能。
所以,記住要關閉這些開啟的資料庫連線!
譯文連結:http://www.codeceo.com/article/close-db-connection.html
英文原文:Close Your Database Connections! And Use Connection Pools While You're at It
翻譯作者:碼農網 – 唐李川
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- 【MySQL】自定義資料庫連線池和開源資料庫連線池的使用MySql資料庫
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- 資料庫連線池原理資料庫
- Flask資料庫連線池Flask資料庫
- python資料庫連線池Python資料庫
- 帶你進入資料庫連線池資料庫
- Druid資料庫連線池使用體驗UI資料庫
- 聊聊資料庫連線池 Druid資料庫UI
- 資料庫連線池實現資料庫
- Javaweb-資料庫連線池JavaWeb資料庫
- 手寫資料庫連線池資料庫
- Python資料庫連線池DButilsPython資料庫
- 資料庫連線池_druid基本使用&工具類資料庫UI
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- MySql資料庫連線池專題MySql資料庫
- Java Druid資料庫連線池+SpringJDBCJavaUI資料庫SpringJDBC
- JavaWeb之事務&資料庫連線池JavaWeb資料庫
- mysql資料庫連線池配置教程MySql資料庫
- druid資料庫連線池的配置類UI資料庫
- 使用Sequelize連線資料庫資料庫
- 使用JPA連線資料庫資料庫
- 使用Python連線資料庫Python資料庫
- 連線資料庫資料庫
- 資料庫連線池技術詳解資料庫
- Spring Boot整合Druid資料庫連線池Spring BootUI資料庫
- Springboot 整合阿里資料庫連線池 druidSpring Boot阿里資料庫UI
- 淺談JDBC和資料庫連線池JDBC資料庫
- 資料庫連線池的實現及原理資料庫
- django中的資料庫連線池實現Django資料庫
- python資料庫連線池的正確用法Python資料庫
- 「資料庫、資料庫連線池、資料來源」這些概念你真的理解了嗎?資料庫
- 使用instantclient連線oracle資料庫clientOracle資料庫
- 使用C#連線資料庫C#資料庫
- 使用PETAPOCO連線MYSQL資料庫MySql資料庫
- 使用cmd連線mysql資料庫MySql資料庫
- Flask框架使用藍圖劃分目錄、g物件、使用資料庫連線池連結資料庫Flask框架物件資料庫
- 【資料庫】使用DBever連線人大金倉資料庫資料庫
- mysqli連線資料庫MySql資料庫