mysql   线程池

工作原理

根据连接id将连接分配到线程组中,线程组中的listener线程监控任务并将事务类型的任务放入优先队列,非事务任务放入普通队列,

worker线程优先将优先队列中的任务处理掉再处理普通队列中的任务,线程组中worker线程循环取出任务,执行,返回结果。

在线程组之外有一个timer线程,主要做以下事情.

1.监控线程组的状态,如果监控到线程组中的线程不够用,就唤醒或者创建线程.

2.kill 超时连接线程

# 线程池有关的参数变量:

thread_concurrency                    # 允许进入innodb内部的最大线程数  ,一般情况下设置为 cpu核数或者2倍

thread_handling                       # 线程模式  pool-of-threads,表示启用线程池

thread_pool_high_prio_mode            # 放入优先队列的语句模式,transactions ,state

thread_pool_high_prio_tickets         #  每个连接被放入到优先队列的次数

thread_pool_idle_timeout              #  线程最大闲置的时间,如果超过这个时间就会被销毁

thread_pool_max_threads               # 最大线程数

thread_pool_oversubscribe             #  每个线程组处于活跃状态的线程数

thread_pool_size                      # 线程组数 , 默认为 cpu数

thread_pool_stall_limit               # 活跃线程停滞的时间,如果超过这个时间限制,就会创建或者唤醒其他线程 /timer线程检查间隔

thread_stack                          # 线程占用的内存大小

thread_statistics                     # 是否收集线程的统计信息

# 线程池有关的状态变量:

Threadpool_idle_threads               # 空闲的线程数

Threadpool_threads                    # 线程总数

Threads_running                       #  正在运行的线程数

线程池问题

http://blog.jobbole.com/87944/

http://www.gpfeng.com/?p=540

线程池实现原理:

perconadb 手册

https://www.percona.com/doc/percona-server/5.6/genindex.html

时间: 2025-01-02 00:03:04

mysql   线程池的相关文章

Mysql线程池优化笔记

Mysql线程池优化我是总结了一个站长的3篇文章了,这里我整理到一起来本文章就分为三个优化段了,下面一起来看看. Mysql线程池系列一(Thread pool FAQ) 首先介绍什么是mysql thread pool,干什么用的?使用线程池主要可以达到以下两个目的:1.在大并发的时候,性能不会因为过载而迅速下降.2.减少性能抖动 thread pool的工作原理?线程池使用分而治之的方法来限制和平衡并发性.与默认的thread_handling不同,线程池将连接和线程划分开,所以连接数量和执

mysql线程池的实现原理浅析

今天抽空主要看了一下mysql线程池(cached threads)的实现原理,总体并不那么复杂,也学到了一些设计原理,值得记录一下.为了简化代码,让思路更清晰,我删去了不少错误处理,线程同步锁的代码,mysql中大量使用全局变量,这些都需要锁了控制访问. 先大致说一下几个关键的东西: 1.List结构:这个看名字就知道,是一个list,可以理解为队列,这个数据结构是用来放thd的,就是线程数据的,这里不去深究list如何实现了(暂时). 2.threads:一个thd的list,这些thd都是

MySQL详解(7)-----------MySQL线程池总结(一)

线程池是Mysql5.6的一个核心功能,对于服务器应用而言,无论是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题.当有大量请求并发访问时,一定伴随着资源的不断创建和释放,导致资源利用率低,降低了服务质量.线程池是一种通用的技术,通过预先创建一定数量的线程,当有请求达到时,线程池分配一个线程提供服务,请求结束后,该线程又去服务其他请求. 通过这种方式,避免了线程和内存对象的频繁创建和释放,降低了服务端的并发度,减少了上下文切换和资源的竞争,提高资源利用效率.所有服务的线程池本质都是位

MySQL线程池总结

线程池是Mysql5.6的一个核心功能,对于服务器应用而言,无论是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题.当有大量请求并发访问时,一定伴随着资源的不断创建和释放,导致资源利用率低,降低了服务质量.线程池是一种通用的技术,通过预先创建一定数量的线程,当有请求达到时,线程池分配一个线程提供服务,请求结束后,该线程又去服务其他请求. 通过这种方式,避免了线程和内存对象的频繁创建和释放,降低了服务端的并发度,减少了上下文切换和资源的竞争,提高资源利用效率.所有服务的线程池本质都是位

MySQL线程池(THREAD POOL)的原理

MySQL常用(目前线上使用)的线程调度方式是one-thread-per-connection(每连接一个线程),server为每一个连接创建一个线程来服务,连接断开后,这个线程进入thread_cache或者直接退出(取决于thread_cache设置及系统当前已经cache的线程数目),one-thread-per-connection调度的好处是实现简单,而且能够在系统没有遇到瓶颈之前保证较小的响应时间,比较适合活跃的长连接的应用场景,而在大量短连接或者高并发情况下,one-thread

mysql线程池

http://mysql.taobao.org/monthly/2016/02/09/ 概述 MySQL 原有线程调度方式有每个连接一个线程(one-thread-per-connection)和所有连接一个线程(no-threads). no-threads一般用于调试,生产环境一般用one-thread-per-connection方式.one-thread-per-connection 适合于低并发长连接的环境,而在高并发或大量短连接环境下,大量创建和销毁线程,以及线程上下文切换,会严重影

mysql线程池与连接池

线程池与连接池 连接池通常实现在Client端,是指应用(客户端)创建预先创建一定的连接,利用这些连接服务于客户端所有的DB请求.如果某一个时刻,空闲的连接数小于DB的请求数,则需要将请求排队,等待空闲连接处理.通过连接池可以复用连接,避免连接的频繁创建和释放,从而减少请求的平均响应时间,并且在请求繁忙时,通过请求排队,可以缓冲应用对DB的冲击.线程池实现在server端,通过创建一定数量的线程服务DB请求,相对于one-conection-per-thread的一个线程服务一个连接的方式,线程

MySQL具体解释(8)----------MySQL线程池总结(二)

这篇文章是对上篇文章的一个补充,主要环绕下面两点展开.one-connection-per-thread的实现方式以及线程池中epoll的使用. one-connection-per-thread 依据scheduler_functions的模板,我们也能够列出one-connection-per-thread方式的几个关键函数. static scheduler_functions con_per_functions= { max_connection+1, // max_threads NU

MySQL详解(8)----------MySQL线程池总结(二)

这篇文章是对上篇文章的一个补充,主要围绕以下两点展开,one-connection-per-thread的实现方式以及线程池中epoll的使用. one-connection-per-thread 根据scheduler_functions的模板,我们也可以列出one-connection-per-thread方式的几个关键函数. static scheduler_functions con_per_functions= { max_connection+1, // max_threads NU

Mysql线程池系列一:什么是线程池和连接池( thread_pool 和 connection_pool)

   thread_pool 和 connection_pool 当客户端请求的数据量比较大的时候,使用线程池可以节约大量的系统资源,使得更多的CPU时间和内存可以高效地利用起来.而数据库连接池的使用则将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量.使用情况等.本文我们主要就介绍一下线程池和数据库连接池的原理,接下来我们一起来了解一下这一部分内容. 首先介绍什么是mysql thread pool,干什么用的?使用线程池主要可以达到以下两个目的:1.在大并发的时