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

MySQL数据库线程池详解

相对5.1中的线程池,5.5是重新实现,最吸引人的特性是可以根据负谈话自动调整线程数。(不再局限于设置的线程数,以避免线程饥饿,但是线程数还是要比one-thread-per-connection模式下线程要少)。我们为什么想要引入线程池MySQL在活跃线程非常大的情况下

相对5.1中的线程池,5.5是重新实现,最吸引人的特性是可以根据负谈话自动调整线程数。(不再局限于设置的线程数,以避免线程饥饿,但是线程数还是要比one-thread-per-connection模式下线程要少)。

我们为什么想要引入线程池

MySQL在活跃线程非常大的情况下,缺乏自我保护机制。这也是我一直说道的,从去年到今年,没有变过。因为这一点在淘宝体感受特别深。在淘宝的业务场景下,可能达到最大连接数的活跃线程数,导致了:

* 线程因并发事务数限制而在InnoDB的等待队列中,而后被唤醒,导引线程切换额外开销非常大。

也许你不会觉得这有什么,但想像下,线程少时,直接进入InnoDB层,而避免了spin count次,并且免除了sleep delay时间。

* 在集中型的并发更新时,大量的InnoDB等待队列中的线程是等待记录锁,一旦被唤醒,等待相同记录锁的线程都被唤醒,但只有第一个到达的才能正常的更新,其它的线程还是再次进入等待列队中等待记录锁。

对于淘宝的典型业务场景,引入线程池并不是为了减少线程创建、销毁的额外开销,也不是为减少到InnoDB真正进干活的线程数量,因为这些在淘宝的业务上,都有参数可以缓解,并不是太大的问题。

我们要解决的还是并发量变大后的各种性能不稳定,抖动等“怪异”的现象。

线程池要解决的几个问题

1.  不能引入死锁

2.  不能让个别线程饥饿,即要保证调度算法的公平性

3.  能正常kill会话

4.  client异常能处理连接

这几点说起来容易,实现起来要考虑的场景就是很多了。

MariaDB线程池的实现思路

在此只linux平台下的实现,基于libevent来做,

1. “acceptor”线程只有一个,而不像Oracle官方设计为多个group。接受连接请求后,调用线程调度的回调函数thd_scheduler->add_connection(),将连接加入到线程池中。

2. 线程池中的worker线程调用threadpool_add_connection(),worker线程来初始化线程上下文,连接权限验证,一旦验证成功,线程池开始异步地从连接的socket上读取请求。

3. 客户发起一个查询,关闭连接,异常断开等,由线程池中的worker线程完成,完成后再发起异步读。异常的话,threadpool_remove_connection()将关闭连接并释放与client相关的资源。

简单版本的工作流程可以参考下图:


推荐阅读
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • CentOS 7 默认安装了 MariaDB,作为 MySQL 的一个分支。然而,出于特定需求,我们可能仍需在系统中安装 MySQL。本文将详细介绍如何通过 Yum 包管理器在 CentOS 7 上安装 MySQL,并提供一些常用的 MySQL 命令。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • 如何在Linux系统上部署MySQL 5.7.28
    本文详细介绍了在Linux系统上部署MySQL 5.7.28的具体步骤。通过官方下载页面获取最新安装包后,按照提供的指南进行配置和安装。文章内容实用性强,适合初学者和有经验的管理员参考。 ... [详细]
  • 在使用 PHP 通过 SSL 安全连接到 MySQLi 数据库服务器时,遇到了一些技术难题。我的环境包括一个 Web 服务器和一个数据库服务器,两者均使用 OpenSSL 生成了证书。尽管证书内容一致,但在尝试从 Web 服务器使用 `mysql` 命令进行连接时,仍然遇到了问题。为了确保连接的安全性和稳定性,需要进一步检查证书配置和 PHP 的 SSL 设置,以排除潜在的配置错误或兼容性问题。 ... [详细]
  • yum安装linux的mysql客户端,mysql在windows(含客户端工具)及linux(yum)环境下安装...
    下载windows安装包下载linux安装包下载windows下安装mysql(含客户端工具Navicat安装及配置)linux下安装mysql编译安装,自由linu ... [详细]
  • 开发笔记:Linux 系统安装下安装 mysql5.7(glibc版)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Linux系统安装下安装mysql5.7(glibc版)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文详细介绍了Hive中用于日期和字符串相互转换的多种函数,包括从时间戳到日期格式的转换、日期到时间戳的转换,以及如何处理不同格式的日期字符串。通过这些函数,用户可以轻松实现日期和字符串之间的灵活转换,满足数据处理中的各种需求。 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 我正在尝试在MariaDB中创建将两个表与一个桥表链接在一起的方法。该表本身称为“ActsIn ... [详细]
  • 为TiDB DM添加阿里云RDS/DMS Online DDL支持
    Foreword停更了好几个月,在百忙之中抽点时间写篇小的流水账吧。OnlineDDL即无锁表结构变更,能够避免对表(尤其是大表)进行更改时,长时间阻塞 ... [详细]
author-avatar
卫通达邱小洁GPS
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有