当从本地SQL Server获得比通常的DB结果稍大时,在Docker中使用dotnet核心的SQL超时

问题描述 投票:4回答:2

我们正在Docker for Windows中开发.NET Core项目,我们需要检索国家列表(约250条记录),其中包含大约9个不超过guid的列。在开发过程中,每个开发人员都使用Microsoft SQL Server 2017 Developer Edition的本地实例。

问题是,当选择这些~250条记录时,一些新的强大工作站没有问题(尽管这意味着它们可能会遇到大问题的问题)。但是,一些较弱和较旧的笔记本电脑无法执行查询,SQL Server会抛出超时。我们认为这是一个RAM问题,并增加了笔记本电脑的RAM,但问题没有解决。

奇怪的是,有一个记录计数阈值,超时被抛出。我不记得每台笔记本电脑的确切数字,但是假设为120.当记录数为120时,查询将在大约2-3秒内成功返回。但是,一旦查询数量变为121,就会抛出超时异常。当我们使用远程SQL Server时没有问题,尽管该服务器是与其他6个VM共享主机的VM,并且在通过SQL Server Management Studio连接时运行速度相当慢。同样,使用SQL Server Management Studio管理本地服务器很快,并且在大约1秒内执行相同的查询。

这种行为可能有什么问题?在与主机通信时,Docker的TCP是否有某种限制?

编辑:添加我检索记录的代码部分:

 public List<CountryDTO> Get(FilterParameters filterParameters)
    {
        IQueryable<Country> query = dbContext.Countries.OrderBy(w => w.Name);

        //...Some basic filtering code, but does not execute since filter is empty
        var entityList = query.ToList();
        return Mapper.Map<List<CountryDTO>>(entityList);
    }
sql-server docker .net-core
2个回答
0
投票

在您的情况下,您面临至少3件必须检查的事项

1.script你正在使用(你可以直接在你的sql中执行脚本并检查执行的持续时间,如果必须获得你的程序将其发送到sql的确切脚本(为此你可以运行sql profiler并运行你的软件来获取它))

  1. 网络延迟(如果您的软件和您的数据库位于不同的服务器中),您可以通过电线鲨鱼在两台服务器之间传输数据,并查看您有多少延迟

3.从您的数据库到软件对象的结果(您可以使用jetBrain等诊断工具处理)

在检测到您的问题状态后,您可以继续前进

当你确定问题出在什么阶段时,请告诉我,我可以告诉你一些解决方案


0
投票

由于这似乎是本地docker实例的一个问题,而不是SQL Server问题,我建议在下面的步骤来处理这个问题。

  1. 根据规范化或基于列的访问模式(常用列和很少使用的列)将国家/地区表垂直分区为两个或多个表。请参阅Normalization并参考Vertical Partitioning
  2. 分别查询这些垂直分区表并将它们连接到.net代码中并相应地应用过滤器。
© www.soinside.com 2019 - 2024. All rights reserved.