mongodb和mysql的區別,線程池版本的mysql_MySQL線程池內幕

 2023-11-30 阅读 30 评论 0

摘要:摘要MySQL線程池在初始化的時刻根據宿主機的CPU核心數設置thread_pool_size,這也就是線程池的線程組的個數。每個線程組在初始化之后會經由過程底層的IO庫分派一個收集特別的句柄與之接洽關系,IO庫可以經由過程這個句柄監聽與之綁定的socket句柄就緒的IO義務&#x

摘要

MySQL線程池在初始化的時刻根據宿主機的CPU核心數設置thread_pool_size,這也就是線程池的線程組的個數。每個線程組在初始化之后會經由過程底層的IO庫分派一個收集特別的句柄與之接洽關系,IO庫可以經由過程這個句柄監聽與之綁定的socket句柄就緒的IO義務,線程組的構造體定義如下:

在MySQL中,線程池指的是用來治理處理MySQL客戶端連接義務的線程的一種機制,我廠用的percona版本已經是集成了線程池,只須要經由過程如下參數開啟即可。thread_handling=pool-of-threads

mongodb和mysql的區別?本文在介紹MySQL線程池核心參數的基本之上對線程池內部實現機制進行進一步介紹。

線程池概論

在持續懂得MySQL線程池之前,我們起重要懂得為什么線程池的惹人可以贊助MySQL晉升機能,除了機能之外線程池還有哪些感化?如不雅把線不雅察做體系資本那么線程池本質上是對體系資本的治理,對于操作體系來說線程的創建和燒毀是比較消費體系資本的,頻繁的創建與燒毀線程必定給體系帶來不須要的資本浪費,特別是在負載高的情況下這部分開銷嚴重影響體系的資本應用效力大年夜而影響體系的機能與吞吐量,另一方面過多的線程創建又會造成體系資本的過載消費,同時帶來相對頻繁的線程之間高低文切換問題。體系資本是寶貴的,我認為機能與資本的應用率是慎密相干的:

d97457e632fcc71bb3277d8d37c8d909.jpg-wh_651x-s_2952236128.jpg

當thread_pool_high_prio_mode=transactions的時刻每個連接的義務最多被放入優先隊列thread_pool_high_prio_tickets次,并且每放一次遞減,直到小于等于0的時刻放入通俗隊列,這個值默認是4294967295。

mysql資料,他們往往向著一個偏向成長,好的資本應用與平日可以帶來較優的機能,線程池技巧一方面可以削減線程反復創建與燒毀這部分開銷,大年夜而更好地應用已經創建的線程資本,另一方面也可以控制線程的創建與體系的負載,某些場景對體系起到了保護感化。

若何懂得MySQL線程池

經由過程進修控制MySQL有哪些參數,并深刻懂得每個參數的含義以及這些參數是若何影響MySQL的等問題是一種很好的進修MySQL線程池的一種方法,別的在懂得MySQL根本實現道理的基本之上再對MySQL線程池不足以及可以改進的處所進行更深層次的思慮有利于更好地輿解MySQL線程池技巧。

線程池核心參數

mysql字段數量?MySQL線程池向用戶開放了一些參數,用戶可以修改┞封些參數大年夜而影響線程池的行動,下面分別介紹一下這些核心參數。

thread_pool_size

這個參數指的是線程組大年夜小,默認是CPU核心數,線程池初始化的時刻會根據這個數字來生成線程組,每個線程組初始化一個poolfd句柄。

thread_pool_stall_limit

多線程線程池,Timer Thread迭代的時光距離,默認是500ms。

thread_pool_oversubscribe

用于計算線程組是否太度日躍或者太過勞碌,也即體系的負載程度,用于在必定場景決定計劃新的工作線程是否被創建于和義務是否被處理,這個值默認是3。

thread_pool_max_threads

mysql好在哪里、許可線程池中最大年夜的線程數,默認是10000。

thread_pool_idle_timeout

工作線程最大年夜余暇時光,工作線程跨越這個數還余暇的話就退出,這個值默認是60秒。

thread_pool_high_prio_mode

MYSQL8.0?這個參數可用于控制義務隊列的應用,可取三個值:transactions

statements

none

thread_pool_high_prio_tickets

高可用mysql、MySQL線程池實現內幕

線程池總體架構

與JAVA的線程池不合,JAVA線程池中是工作線程而MySQL線程池有一個線程組的概念,線程組內部層級才是工作線程,先看看MySQL線程池的大年夜致架構:

ff8e3b870fac5dc68c23ce4524dc685b.png

線程池架構

mysql必知必會?上圖大年夜致可以看出線程池內部的構造,線程組為我們存眷的一個較大年夜的組件,線程組內部每個組件的互相調和構成了線程組,每個線程組優勝地工作構成了線程池。對于線程池內部,我認為值得懂得的內容重要包含下面幾個方面:線程組

Worker線程

Check Stall機制

義務隊列

mysql索引、Listener線程

對于膳綾擎列出的幾個方面,后文將會展開介紹。

線程組struct?thread_group_t

{

mysql_mutex_t?mutex;

connection_queue_t?queue;//低優先級義務隊列

connection_queue_t?high_prio_queue;//高優先級義務隊列

worker_list_t?waiting_threads;?//代表當前哨程沒有義務的時刻進入等待隊里

worker_thread_t?*listener;//攫取收集義務線程

pthread_attr_t?*pthread_attr;

推薦閱讀

2017年7月22日,由中國新一代IT家當推動聯盟指導,CIO時代學院、IT趣學社結合主辦,CIO時代APP承辦的“西部家當互聯網岑嶺論壇暨2017CIO時代中國行西安站”晃蕩在“古城&r>>>詳細閱讀

地址:http://www.17bianji.com/lsqh/36583.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/186691.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息