mysql thread_cache 和 thread_pool 之間的關係

來源:互聯網
上載者:User

標籤:

 線程池是Mysql5.6的一個核心功能,對 於伺服器應用而言,無論是web應用服務還是DB服務,高並發請求始終是一個繞不開的話題。當有大量請求並發訪問時,一定伴隨著資源的不斷建立和釋放,導 致資源使用率低,降低了服務品質。線程池是一種通用的技術,通過預先建立一定數量的線程,當有請求達到時,線程池分配一個線程提供服務,請求結束後,該線 程又去服務其他請求。 通過這種方式,避免了線程和記憶體對象的頻繁建立和釋放,降低了服務端的並發度,減少了環境切換和資源的競爭,提高資源利用效率。 所有服務的線程池本質都是位了提高資源利用效率,並且實現方式也大體相同。本文主要說明Mysql線程池的實現原理。

    在Mysql5.6出現以前,Mysql處理 串連的方式是One-Connection-Per-Thread,即對於每一個資料庫連接,Mysql-Server都會建立一個獨立的線程服務,請求 結束後,銷毀線程。再來一個串連請求,則再建立一個串連,結束後再進行銷毀。這種方式在高並發情況下,會導致線程的頻繁建立和釋放。當然,通過 thread-cache,我們可以將線程緩衝起來,以供下次使用,避免頻繁建立和釋放的問題,但是無法解決高串連數的問題。One- Connection-Per-Thread方式隨著串連數暴增,導致需要建立同樣多的服務線程,高並發線程意味著高的記憶體消耗,更多的環境切換 (cpu cache命中率降低)以及更多的資源競爭,導致服務出現抖 動。相對於One-Thread-Per-Connection方式,一個線程對應一個串連,Thread-Pool實現方式中,線程處理的最小單位是 statement(語句),一個線程可以處理多個串連的請求。這樣,在保證充分利用硬體資源情況下(合理設定線程池大小),可以避免瞬間串連數暴增導致 的伺服器抖動。

mysql thread_cache 和 thread_pool 之間的關係

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.