線程池 簡介 1、mysql每連接每線程,mysql都分配一個單獨的線程,該線程處理客戶端發來的所有命令 2、每個線程會占用一定的系統資源,線程數越多消耗的系統資源也越多 3、線程的創建和銷毀有一定的開銷 4、當線程數過多時,如果大部分線程都處於活躍狀態,會導致頻繁的上下文切換,從而造成系統巨大的開 ...
線程池
簡介
1、mysql每連接每線程,mysql都分配一個單獨的線程,該線程處理客戶端發來的所有命令 2、每個線程會占用一定的系統資源,線程數越多消耗的系統資源也越多 3、線程的創建和銷毀有一定的開銷 4、當線程數過多時,如果大部分線程都處於活躍狀態,會導致頻繁的上下文切換,從而造成系統巨大的開銷 5、線程的本質就是線程共用,多個連接之間共用線程
何時使用
1、在有大量短查詢的業務場景下 2、大量長查詢的業務場景下不適合使用線程池,由於長查詢占據了線程池的線程,導致線程池出現效率低下的情況
組成
1、線程池由多個分組組成 2、每個分組由一個任務隊列、一個listener線程以及多個worker線程組成 3、還存在一個timer線程(用於檢查線程池分組的狀態以及定期清理掉過期的客戶端連接)
連接池
簡介
1、連接池是一些網路代理服務或應用伺服器的特性(如J2EE伺服器) 2、實現了一個持久連接的“池”,允許其它程式,客戶端來連接 3、連接池將被所有連接的客戶端共用使用 4、連接池可以加速連接,也可以減少資料庫連接,降低資料庫伺服器的負載
短連接
簡介
1、程式和資料庫通信時建立連接,執行操作後,連接關閉 2、基本步驟:連接->數據傳輸->關閉連接 3、慢速網路下使用短連接,連接的開銷會很大 4、在生產繁忙的系統中,連接也可能會收到系統埠數的限制 5、每秒建立上千個連接,連接斷開後,埠不會被馬上回收利用,必須經歷一個“FIN”階段的等待,直到可被回收利用為止,這樣導致埠資源不夠用
長連接
簡介
1、長連接是指程式之間的連接在建立之後,就一直打開,被後續程式重用 2、當收到一個永久連接請求時,將檢查是否已經存在一個(前面已經開啟了的)相同的永久連接 3、如果存在,則直接使用這個連接,不存在,則建立一個新的連接(“相同”指用相同的用戶名和密碼到相同主機的連接) 4、客戶端角度,不用每次創建新連接,若客戶端對伺服器的連接請求很頻繁,永久連接將更高效 5、對於高併發業務,若果可能會碰到連接的衝擊時,推薦使用長連接或連接池 6、伺服器角度,可以節省創建連接的開銷,但維持長連接需要記憶體 7、擴展性好的站點,大部分的訪問不需要連接資料庫,如果需要頻繁訪問資料庫,可能會在流量增大時候產生性能問題,此時, 長短連接都無法解決問題,應該進行合理的設計和優化來避免性能問題
持久連接和連接池的區別
長連接是一些驅動、驅動框架,ORM工具的特性,由驅動來保持連接句柄的打開,以便後續的資料庫操作可以重用連接,從而減少資料庫的連接開銷 連接池是應用服務的組件,可以通過參數來配置連接數、連接監測、連接的生命周期
參考:《MySQL DBA 修煉之道》