AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 142856
Accepted
LawrenceLi
LawrenceLi
Asked: 2016-07-03 18:34:14 +0800 CST2016-07-03 18:34:14 +0800 CST 2016-07-03 18:34:14 +0800 CST

20个mysqld进程只使用1个端口?

  • 772

这些来自阿里云云数据库服务器,20个mysqld进程使用一个3306端口

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

  • 有没有人见过这个 ?
  • 任何人都可以解释如何做到这一点?
  • 这有什么好处吗?
mysql percona-server
  • 4 4 个回答
  • 3030 Views

4 个回答

  • Voted
  1. Michael - sqlbot
    2016-07-04T06:36:12+08:002016-07-04T06:36:12+08:00

    我们看到的是不可能的,所以合乎逻辑的假设是它是一种幻觉。

    多个 MySQL 服务器实例无法侦听同一端口。它们也不能像它们那样共享同一个 pid 文件,也不能共享 InnoDB 的数据文件。

    对此最明智的解释是,这些工具向您展示的是线程,而不是进程——无论出于何种原因。Linux 中的线程(如果是这样的话)共享相同的进程 ID,但它们也有自己的线程 ID,这个数字来自与 PID 相同的编号空间。

    我怀疑最引人注目的是有 20 多个条目,每个条目消耗 10.9% 的可用内存。虽然如果 MySQL 服务器拥有相同数量的内存(尤其是繁忙的),多个相同实例的可能性极小,但您在此服务器上的内存使用率不可能超过 200%。

    mysql> SHOW FULL PROCESSLIST;当由具有SUPERorPROCESS权限的用户执行时,应该向您显示活动的客户端线程,并且可能包含代表两个看起来特别忙的条目,这里。当然,输出中的数量会比此处显示的要少,因为并非所有线程都是客户端线程。

    SELECT CONNECTION_ID(), UUID_SHORT();通过反复连接和断开连接和发出和/或同时在多个连接上执行此操作,向自己证明实际上只有一个实例在运行。这两个值都会增加很多(connection_id 会随着每个连接增加,但在连接时保持不变,uuid_short 会随着每个查询增加)并且永远不会更小。如果涉及多个 MySQL 服务器守护程序实例,这几乎是不可能的。

    • 0
  2. Philᵀᴹ
    2016-07-04T18:32:46+08:002016-07-04T18:32:46+08:00

    他们并不都使用相同的端口。

    主 mysqld 进程将fork关闭其子进程(您可以在ps输出的第 2 列和第 3 列中看到 child<>parent 关系 - pid 26308 看起来是主“线程”。实际上只有一个进程会监听在TCP端口上。您可以使用lsof.forkargv[]fork()--port=3306

    • 0
  3. Best Answer
    RolandoMySQLDBA
    2016-07-04T18:39:58+08:002016-07-04T18:39:58+08:00

    您在操作系统中看到的所有这些进程都是源自 mysqld 的内核线程。

    仔细看第一张图

    • Linux 进程 ID26101是 mysqld_safe
    • Linux 进程 ID26307是线程 mysqld_safe 启动 mysqld
    • Linux 进程 ID26308实际上是 mysqld
    • 19 个 Linux 进程 ID 26309-26334是来自 mysqld ( 26308)的线程

    我的猜测是它们只是数据库连接,但其他内部线程是可能的

    如果要证实这一点,可以运行以下命令:

    • 在 mysql 中,SELECT COUNT(1) FROM information_schema.processlist;
    • 在操作系统中,运行netstat | grep -c 3306或netstat | grep mysql | grep -c ESTABLISHED
    • 结果可能有利于操作系统

    旧版本的 mysqld 倾向于在操作系统中执行此操作。例如,请看以下内容:

    • Nov 28, 2013:Why do top and ps show different PIDs for the same processes?
    • Apr 28, 2012:Is multiple mysqld processes for 1 mysql server is normal?
    • May 29, 2007:mysql creating lots of processes (not threads, linux processes)

    我一直怀疑当mysqld出现这种行为时,它可能是通过源码编译构建的,但没有适当的编译选项。mysqld 会在操作系统的眼中将其表现为多个连接。

    • 从 2007 年起,施瓦茨男爵似乎就是这么认为的
    • 斯科特坦纳似乎从 2007 年开始就这么认为
    • 去年我刚刚提到过:太多的 mysql 实例。怎么杀?
    • 4年前我对此发表了评论:innodb_buffer_pool_size没有改变

    结论

    你真的没什么好担心的。mysqld 仍将正常运行。这完全与创建 mysqld 二进制文件的环境与运行这些二进制文件的位置有关。

    • 0
  4. Rick James
    2016-07-11T10:36:03+08:002016-07-11T10:36:03+08:00

    根据操作系统,您可能会看到 mysqld 有 1 个进程,或者您可能会看到每个连接有 1 个。每个最初都连接在端口 3306 上。

    如果您有连接池(在客户端)和/或高值thread_cache_size和高值wait_timeout,则可能有一堆“不会消失”的空闲连接。

    正如罗兰多所说,“没什么好担心的”。

    另一方面,39.6%CPU非常高。SHOW FULL PROCESSLIST;看看你能不能抓住它。然后考虑改进那个繁忙的查询。(这可能会或可能不会“担心”。)

    • 0

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve