mysql數(shù)據(jù)庫每次查詢是一條線程嗎?
問題描述
對于mysql的查詢,請問是IO復(fù)用,線程池,進(jìn)程池中的哪種模型?或者是其他模型?可以配置嗎?
問題解答
回答1:MySQL的查詢使用的是線程池。當(dāng)有大量請求并發(fā)訪問時,一定伴隨著資源的不斷創(chuàng)建和釋放,導(dǎo)致資源利用率低,降低了服務(wù)質(zhì)量。線程池技術(shù),預(yù)先會創(chuàng)建一定數(shù)量的線程,當(dāng)有請求達(dá)到時,線程池分配一個線程提供服務(wù),請求結(jié)束后,該線程又去服務(wù)其他請求。 通過這種方式,避免了線程和內(nèi)存對象的頻繁創(chuàng)建和釋放,降低了服務(wù)端的并發(fā)度,減少了上下文切換和資源的競爭,提高資源利用效率。在MySQL早期的版本中,處理連接的方式是One-Connection-Per-Thread,即對于每一個數(shù)據(jù)庫連接,MySQL-Server都會創(chuàng)建一個獨立的線程服務(wù),請求結(jié)束后,銷毀線程。再來一個連接請求,則再創(chuàng)建一個連接,結(jié)束后再進(jìn)行銷毀。但是,這種方式在高并發(fā)情況下,會導(dǎo)致線程的頻繁創(chuàng)建和釋放。當(dāng)然,通過thread-cache,我們可以將線程緩存起來,以供下次使用,避免頻繁創(chuàng)建和釋放的問題,但是無法解決高連接數(shù)的問題。One-Connection-Per-Thread方式隨著連接數(shù)暴增,導(dǎo)致需要創(chuàng)建同樣多的服務(wù)線程,高并發(fā)線程意味著高的內(nèi)存消耗,更多的上下文切換(cpu cache命中率降低)以及更多的資源競爭,導(dǎo)致服務(wù)出現(xiàn)抖動。相對于One-Thread-Per-Connection方式,一個線程對應(yīng)一個連接,Thread-Pool實現(xiàn)方式中,線程處理的最小單位是statement(語句),一個線程可以處理多個連接的請求。這樣,在保證充分利用硬件資源情況下(合理設(shè)置線程池大小),可以避免瞬間連接數(shù)暴增導(dǎo)致的服務(wù)器抖動。
相關(guān)文章:
1. javascript - sublime快鍵鍵問題2. javascript - immutable配合react提升性能?3. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問?4. javascript - 移動端上不能實現(xiàn)拖拽布局嗎?5. 實現(xiàn)bing搜索工具urlAPI提交6. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽數(shù)據(jù)變化7. javascript - nodejs關(guān)于進(jìn)程間發(fā)送句柄的一點疑問8. phpstudy8.1支持win11系統(tǒng)嗎?9. 如何解決Centos下Docker服務(wù)啟動無響應(yīng),且輸入docker命令無響應(yīng)?10. css - 寫頁面遇到個布局問題,求大佬們幫解答,在線等,急!~

網(wǎng)公網(wǎng)安備