如何验证mysql单进程多线程模型?

如何验证mysql单进程多线程模型?

据说 MySQL 处理连接,为每个与服务器的连接分配一个线程,并且 MySQL 是一个具有多个线程的单进程。

现在在我的 localhost 中。
有两个到 mysql 的连接。

sudo ps -el |grep mysql
4 S     0   892     1  0  80   0 -  1084 -      ?        00:00:00 mysqld_safe
4 S   111  1338   892  0  80   0 - 172432 -     ?        00:00:21 mysqld
0 S  1000 14903 14892  0  80   0 - 27406 -      pts/1    00:00:00 mysql
0 S  1000 14937 14922  0  80   0 - 27375 -      pts/2    00:00:00 mysql

我们来搜索一下892的ps树。

 pstree  892 -p
mysqld_safe(892)───mysqld(1338)─┬─{mysqld}(1361)
                                ├─{mysqld}(1362)
                                ├─{mysqld}(1363)
                                ├─{mysqld}(1364)
                                ├─{mysqld}(1365)
                                ├─{mysqld}(1366)
                                ├─{mysqld}(1367)
                                ├─{mysqld}(1368)
                                ├─{mysqld}(1369)
                                ├─{mysqld}(1370)
                                ├─{mysqld}(1477)
                                ├─{mysqld}(1478)
                                ├─{mysqld}(1479)
                                ├─{mysqld}(1480)
                                ├─{mysqld}(1500)
                                ├─{mysqld}(1518)
                                ├─{mysqld}(2611)
                                └─{mysqld}(11598)

有 14903 和 14937 线程吗?它们属于哪个进程?这意味着 MySQL 服务器处理连接,为每个到服务器的连接分配一个线程。
现在对于 mysql 客户端的 14903 进程,mysql 服务器为该连接分配一个线程,现在 1361-1370 范围内的哪一个或 1477-1499 范围内的哪一个或 1500、1518、2611、11598 处理 14903 的连接?

答案1

你需要区分mysqldmysql。后者是客户用于管理服务器的程序。

答案2

输出ps -ef | grep mysql清楚表明这些进程是 mysql 客户端

0 S  1000 14903 14892  0  80   0 - 27406 -      pts/1    00:00:00 mysql
0 S  1000 14937 14922  0  80   0 - 27375 -      pts/2    00:00:00 mysql

服务器进程以d字母结束。

相关内容