提问人:Mboe5000 提问时间:10/17/2023 最后编辑:Dale KMboe5000 更新时间:10/17/2023 访问量:46
在 Windows 和 Linux 下运行连接到 SQL Server 的同一 .NET 6 应用程序时接收的不同字节数
Different Bytes Received under windows and linux when running same .NET 6 application connected to SQL Server
问:
在分析一些 Prometheus 指标时,我发现接收到的网络流量存在有趣的差异:无论 .NET 6 应用程序是在 Linux (Ubuntu 22.04.3 LTS) 还是 Windows (Windows Server 2019 Standard) 下运行,从 Microsoft SQL Server 获取数据。
当应用程序在 Windows 下运行时,似乎从 SQL Server 的响应中传输的字节未包含在 prometheus 指标中。在示例测试中,我的值为 2.566 字节。
如果我将相同的应用程序编译到 Linux 并执行相同的测试,则此指标有 91.470.730 字节。system_net_sockets_bytes_received
有人对此有解释吗?我在网络上找不到有关此行为的任何信息。SQL Server 告诉我,两个连接都使用 TCP(第 net_transport 列)。sys.dm_exec_connections
以下是一些代码片段,用于重新创建场景。我使用 nuget 包 prometheus-net (8.0.1)、prometheus-net。AspNetCore (8.0.1) 和 System.Data.SqlClient (4.7.0)。
程序.cs:
using Prometheus;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseHttpMetrics();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapMetrics();
});
app.Run();
测试逻辑:
public void TestReceviedBytes()
{
SqlConnection conn = new SqlConnection("YOUR CONNECTION STRING");
conn.Open();
for (int i = 0; i < 100000; i++)
{
SqlCommand command = new SqlCommand(@"YOUR SELECT COMMAND", conn);
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
Console.WriteLine(String.Format("{0}", reader["Id"]));
}
Console.WriteLine($"Fetched run {i}");
}
}
conn.Close();
Console.WriteLine("Done");
}
答: 暂无答案
评论