mysql數(shù)據(jù)庫每次查詢是一條線程嗎?
問題描述
對于mysql的查詢,請問是IO復用,線程池,進程池中的哪種模型?或者是其他模型?可以配置嗎?
問題解答
回答1:MySQL的查詢使用的是線程池。當有大量請求并發(fā)訪問時,一定伴隨著資源的不斷創(chuàng)建和釋放,導致資源利用率低,降低了服務(wù)質(zhì)量。線程池技術(shù),預先會創(chuàng)建一定數(shù)量的線程,當有請求達到時,線程池分配一個線程提供服務(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é)束后再進行銷毀。但是,這種方式在高并發(fā)情況下,會導致線程的頻繁創(chuàng)建和釋放。當然,通過thread-cache,我們可以將線程緩存起來,以供下次使用,避免頻繁創(chuàng)建和釋放的問題,但是無法解決高連接數(shù)的問題。One-Connection-Per-Thread方式隨著連接數(shù)暴增,導致需要創(chuàng)建同樣多的服務(wù)線程,高并發(fā)線程意味著高的內(nèi)存消耗,更多的上下文切換(cpu cache命中率降低)以及更多的資源競爭,導致服務(wù)出現(xiàn)抖動。相對于One-Thread-Per-Connection方式,一個線程對應(yīng)一個連接,Thread-Pool實現(xiàn)方式中,線程處理的最小單位是statement(語句),一個線程可以處理多個連接的請求。這樣,在保證充分利用硬件資源情況下(合理設(shè)置線程池大小),可以避免瞬間連接數(shù)暴增導致的服務(wù)器抖動。
相關(guān)文章:
1. docker-compose中volumes的問題2. java - SSH框架中寫分頁時service層中不能注入分頁類3. boot2docker無法啟動4. javascript - vue生成一維碼?求助?。。。。〖?/a>5. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.6. nignx - docker內(nèi)nginx 80端口被占用7. javascript - mock.js可以存儲數(shù)據(jù)嗎8. docker網(wǎng)絡(luò)端口映射,沒有方便點的操作方法么?9. 老師,按tab鍵不起作用怎么回事10. java - Eclipse中的 “context root” 和 “content directory” 的作用是什么?

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