ProxySQL手册_14ProxySQL线程

2021-11-17  本文已影响0人  这货不是王马勺

转载来自 骏马金龙 https://www.junmajinlong.com

ProxySQL以多线程的daemon运行,每个模块使用一个或多个线程去执行。
下面是正常运行时使用的线程列表:

Main thread

该线程只负责引导启动核心模块以及启动其它核心线程。

Admin thread

该线程负责以下几件事:

MySQL workers

mysql-threads线程负责处理MySQL流量,包括所有来自客户端的连接以及所有到后端服务器节点的连接。也就是:用少量线程处理任意多数量的连接。

MySQL workers线程在相同的端口上进行监听。当新客户端发起连接请求,其中一个MySQL worker线程将成功接受该连接,并创建一个MySQL会话(session):客户端和会话绑定在该worker线程上,直到连接断开。换句话说,在断开连接之前,某客户端的所有连接总是被同一个worker线程处理。

MySQL auxiliary threads

这些线程其实就是空闲线程(idle threads)。

如果proxysql使用--idle-threads选项启动,每个worker线程都会伴随启动一个auxiliary线程。每个worker线程以及它的auxiliary线程一起工作:第一个线程处理活动的连接,并将所有的空闲连接派遣到第二个线程上,但第二个线程只要等待到了发生在空闲连接上的一个事件(或超时),就会将连接还给第一个线程。

当活动的客户端连接数量远少于空闲客户端连接数量时,强烈建议使用"idle threads"。这使得ProxySQL可以处理几十万个连接(测试时是100W个连接)。

HTTP server (new in 1.4.4)

ProxySQL内置了一个基于limicrohttpd的HTTP server。通过MHD_USE_INTERNAL_POLLING_THREAD来配置它,可潜在地使用多线程。

Cluster threads (new in 1.4.2)

ProxySQL集群中的每个ProxySQL节点都会启动一个专门的线程负责和对端通信(译注:每两两节点之间都启动一个集群线程)。随着ProxySQL节点的增加、移除,这类线程的数量也会随之动态增、减。

Query Cache purge thread

该线程扮演的是垃圾收集器,回收查询缓存。通过垃圾收集器,可保证在客户端等待响应的过程中绝不会回收缓存。

ClickHouse Server thread (new in 1.4.3)

如果启用了ClickHouse(编译时加入了ClickHouse的支持,且proxysql使用--clickhouse-server选项启动),那么该线程负责如下几件事:

SQLite3 Server thread (new in 1.4.3)

如果启用了SQLite3 Server(proxysql使用--sqlite3-server选项启动),那么该线程负责以下几件事:

Monitor threads

Monitor模块会启动多个线程。 在ProxySQL 1.4.X中,Monitor模块启动的线程包括:

一个主线程(main thread)负责为每个监控类别启动一个线程,总共5个类别,如下:
一个负责安排连接检查的线程。
一个负责安排ping检查的线程。
一个负责安排只读(read-only)检查的线程(译注:具备read_only=1的都是slave)。
一个负责安排复制延迟检查的线程(replication lag check,即检查某从节点是否拖后腿了)。
一个负责组复制监控的线程。
一个线程池(初始值为mysql-threads的两倍)。

线程池负责执行所有的检查任务,并通过以上各调度线程来监控调度情况。线程池会基于监控队列中待检查的数量多少而自动增长、收缩。基于检查的结果,会使用相同的线程对结果进行处理,例如避开一个节点、重新配置一个主机组。

注意各模块的CPU使用率

上面列出的线程中,各自所使用的CPU差别很大。

一般来说,MySQL worker线程是最繁忙的线程,它们的CPU使用率最多。

尽管其它的线程CPU使用率很低,但当ProxySQL处理几十万个请求时,Monitor模块会急剧增加Monitor线程池的大小,从而霸占对CPU的使用。

上一篇 下一篇

猜你喜欢

热点阅读