热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MariaDB数据库threadpool线程池解析

对于MySQL5.5来说只有企业版本中含有ThreadPool,但幸运的是mariadb5.1中就已存在该功能,mariadb5.5中进行了改进。本篇暂且介绍FAQ:后期会放出其工作原理及使用情况。商业版本中5.5.16添加了threadhandlingmodel(线程池)来应对多客户连接问题
对于MySQL5.5来说只有企业版本中含有 Thread Pool,但幸运的是 mariadb 5.1中就已存在该功能,mariadb 5.5 中进行了改进。
   本篇暂且介绍FAQ:后期会放出其工作原理及使用情况。
   商业版本中 5.5.16 添加了 thread  handling model (线程池)来应对多客户连接问题。代替一个session 一个线程的问题。在MariaDB 5.1-5.3 中已经实现该功能,在MariaDB 5.5中实现优化,动态的线程池等,这个和商业版本有少许区别,具体查看https://kb.askmonty.org/en/thread-pool-in-mariadb-55/
   适用threadpool场景:查询相对较短,或者CPU比较吃紧。或者可以通过 threadpool 限制线程数量来达到节省内存的目的。
   安装条件:Linux 内核需高于2.6.9 版本
   在某些场合下 效果可能不是很理想:
   1、突发的工作负载,,长时间不活动和很多短期的高活跃连接,这个是有可以通过调整等待时间来应对这样的情况。Thread_pool_idle_timeout
   2、并发很多,且长时间执行的查询,一个线程执行的时候 都是重新创建,也不会等待threadpool 释放资源,这种出现在数据仓库的情景。长时间运行的查询会阻塞其他查询的执行,对于拥有阻塞监测或者其他抢占机制 可以固定 阻塞时长
   3、一些简单的查询总是很快执行完毕。无论你的机器负载多高,在拥有 threadpool 的时候,query 可能会出现排队情况,比如select  1;可能会比thread-per-connection消耗更多时间。
FAQ:
   线程池解决的问题:
   1、太多的线程堆栈,几乎让CPU的缓存无用,线程池 可以减少CPU占用内存空间。
   2、建立过多的线程容易导致过多的上下文切换,解决办法是是维持一组低于客户端连接数量,平衡mysql连接并保持较高性能。
   3、过多的事务并发执行导致资源争用,延长热锁争用
   线程池如何限控制并发的会话线程和事务来达到最优的性能和吞吐量?
   该线程池使用“分步解决”的方法来限制和平衡并发量,线程池将connections 和threads分开,这样thread 执行从connections 接受的statement,两者并没有固定的绑定在一起。线程池根据配置的已划分优先级的thread group 来处理连接。
   线程池和客户端连接池有什么区别:
   两者的职责不是同的:
客户端连接池:处于客户端一边,client不会不断的连接或断开server,它被设计为 缓存空闲的连接来被其他的connections 使用。减小建立和拆除connections的开销。Client pool 对查询处理能力和后端数据库的负载时不可见的。相比之下 thread pool 是处在MySQL 这一端的。它们被设计为管理已经建立的 connections 和接受到的query
   线程池在连接太多的时候怎么动态扩展,在链接减少的时候怎么收缩;线程池本身的开销怎样控制;是否能够利用OS原生的线程池来直接提供服务等一系列问题都是引入线程池需要考虑的。
线程相互等待的问题。如果有长链接和短链接同时存在,那么短链接可能要等到长链接执行完所有操作,才能被轮到,执行时间不可控.
MariaDB充分考虑和优化了thread pool的实现,并提供了一系列参数给用户调整线程池的配置(thread_pool_size, thread_pool_stall_limit, thread_pool_idle_timeout, thread_pool_oversubscribe )和一些状态值(threadpool_threads,threadpool_idle_threads)提供给用户查询线程池使用情况。从实现方面来看,MariaDB相对MySQL Enterprise的线程池会使用原生的系统提供的线程池,并且考虑到各个系统OS的特点,优化多路IO(IO multiplexing)接口的使用。 

推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了CentOS7编译mysql8.0.12相关的知识,希望对你有一定的参考价值。步骤一:安装 ... [详细]
  • 1.ATP方式安装在ubuntu系统的apt软件仓库中,默认存在MySQL数据库,所以直接使用apt命令就可以安装。使用命令:aptapt-getin ... [详细]
  • Linux环境中使用Mysql数据库
    Linux下Mysql数据库MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司,目前属于Oracle公司,MySQL被广泛地应用在I ... [详细]
  • 阿里云主机实战应用之centos7上的防火墙设置
    最近公司又上了一台服务器,以前都是用centos6系统,这次选择使用了centos7系统的安装镜像,因为现在程序版本在centos7上一般php默认就是5.4以上的,mysql也 ... [详细]
  • MySQL/MariaDB/PerconaDB提权条件漏洞
    背景  2016年11月01日,国外安全研究员DawidGolunski在MyS ... [详细]
  • 本文是搭建的mariadb-10.0.17版本的下载地址:https:downloads.mariadb.orginterstitialmariadb-10.0.17sourcemariadb-10.0.17.tar.gzfromhtt ... [详细]
  • centos7如何利用yum安装mysql 8.0.12
    这篇文章将为大家详细讲解有关centos7如何利用yum安装mysql8.0.12,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有 ... [详细]
  • MYsql_linux mysql
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了linuxmysql相关的知识,希望对你有一定的参考价值。一数据库安装查看:[[email pr ... [详细]
  • 1、MySQL标志说明MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 数据库进入全新时代,腾讯云发布五大数据库提前布局
    8月28日,腾讯云数据库在京正式启动战略升级,宣布未来将聚焦云原生、自治、超融合三大战略方向,以用户为中心,联接未来。并在现场面向全球用户同步发布五大战略级新品,包括数据库智能管家 ... [详细]
  • MySQL之left join表查询中发生字符集转换导致表索引失效
    mysql,之,left,join,表,查询,中,发生,字符,集,转换, ... [详细]
author-avatar
抑制不L挑逗烛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有