【问题标题】:Mysql query process check via Wireshark通过Wireshark检查Mysql查询过程
【发布时间】:2019-12-04 00:38:03
【问题描述】:

当客户端执行一个简单的选择查询时,我试图了解后台发生了什么。

我正在使用 C# Asp.Net Webforms,并使用 WireShark 检查了进程。

public DBC(string procedureName, params object[] procParams)
{
    strError = null;
    using (MySqlConnection connection = new MySqlConnection(GetConnectionString()))
    {
        connection.Close();
        try
        {
            connection.Open();
            MySqlCommand cmd = new MySqlCommand(procedureName, connection);
            cmd.CommandType = CommandType.StoredProcedure;

            //if we use params for stored procedure
            if (procParams != null)
            {
                int i = 1;
                foreach (object paramValue in procParams)
                {
                    cmd.Parameters.Add(new MySqlParameter("@param_" + i, paramValue.ToString()));
                    i++;
                }
            }

            if (procedureName.Contains("get"))
            {
                dtLoaded = new DataTable();
                dtLoaded.Load(cmd.ExecuteReader());
            }
            else
            {
                cmd.ExecuteNonQuery();
            }
        }
        catch (Exception ex)
        {
            strError = ErrorHandler.ErrorToMessage(ex);
        }
        finally
        {
            connection.Close();
            connection.Dispose();
        }
    }
}

这是一个简单的SELECT * FROM TABLE 查询,在try-catch 语句中。在 finally 状态下,连接被关闭并释放。

为什么会导致43进程?我不明白,为什么有这么多。有人可以解释我吗?

非常感谢!

【问题讨论】:

  • TCP 最大数据报大小约为 1500(此连接为 1514)字节,因此当服务器需要发送更多数据时,需要更多响应。决赛应该以 s 200 OK 状态结束。
  • 你在做任何并行请求吗?看起来第二个请求是在第一个请求的 200 OK 之前发出的。
  • 哦,我明白了,谢谢!我不认为,这个连接请求是唯一的。我在代码上方添加了单击按钮时调用的内容。第一张图片包括单击按钮时的过程。 (这是一种通用的数据库连接处理方法,适用于任何类型的过程)
  • 多次按下按钮将创建多个并行请求,除非您添加锁以防止多个请求。

标签: c# mysql asp.net wireshark windows-server-2019


【解决方案1】:

我假设您使用的是 Oracle 的 Connector/NET。打开连接后,它会执行许多非严格必要的查询,例如,SHOW VARIABLES 以检索一些服务器设置。 (在 8.0.17 及更高版本中,此为 been optimised slightly。)

执行存储过程需要检索有关存储过程的信息(以对齐参数);它比直接执行 SQL 语句更“昂贵”。 (您可以使用 CheckParameters=false 禁用此功能,但我不建议这样做。)

如果您想要更高效的 .NET 客户端库,可以切换到 MySqlConnector。它一直是tuned for performance(在客户端 CPU 时间和网络 I/O 方面),并且在打开连接和执行查询时不会执行太多不必要的工作。 (MySqlConnector 是 TechEmpower Framework Benchmarks 中用于 .NET/MySQL 基准测试的客户端库。)

【讨论】:

  • 谢谢!我会尝试换成MySqlConnector,之后我会比较结果。
猜你喜欢
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多