热门标签 | 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相关的资源。

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


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文档详细介绍了2017年8月31日关于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 设置,以排除潜在的配置错误或兼容性问题。 ... [详细]
  • 本文详细探讨了不同SQL数据库管理系统(DBMS)在限制输出结果、拼接字段和日期时间处理方面的函数差异。通过具体示例,帮助读者理解并掌握如何在不同DBMS中实现相同功能。 ... [详细]
  • 华为云openEuler环境下的Web应用部署实践
    本文详细记录了在华为云openEuler系统上进行Web应用部署的具体步骤,包括配置yum源、安装Apache、MariaDB、PHP及其相关组件,并完成WordPress的安装与配置过程。 ... [详细]
  • MySQL 错误:用户 'root' 使用密码时访问被拒绝的原因及解决方法
    在配置CentOS 7上的MariaDB(MySQL)时,用户可能会遇到“1045 - Access denied for user 'root'@'localhost' (using password: YES)”的错误。这通常是由于密码设置不正确或权限配置问题导致的。本文将详细分析该错误的原因,并提供多种解决方法,包括重置root密码、检查配置文件和修复权限设置等。 ... [详细]
  • 如何利用Apache与Nginx高效实现动静态内容分离
    如何利用Apache与Nginx高效实现动静态内容分离 ... [详细]
  • 我正在尝试在MariaDB中创建将两个表与一个桥表链接在一起的方法。该表本身称为“ActsIn ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了实现MySQL半同步架构相关的知识,希望对你有一定的参考价值。默认情况下,MySQL的复制功能是异步的, ... [详细]
  • mysql--mariadb--postgresql官网简介https:www.postgresql.org使用的镜像名称centospostgresql-96-centos7 ... [详细]
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社区 版权所有