我们正在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);
}
在您的情况下,您面临至少3件必须检查的事项
1.script你正在使用(你可以直接在你的sql中执行脚本并检查执行的持续时间,如果必须获得你的程序将其发送到sql的确切脚本(为此你可以运行sql profiler并运行你的软件来获取它))
3.从您的数据库到软件对象的结果(您可以使用jetBrain等诊断工具处理)
在检测到您的问题状态后,您可以继续前进
当你确定问题出在什么阶段时,请告诉我,我可以告诉你一些解决方案
由于这似乎是本地docker实例的一个问题,而不是SQL Server问题,我建议在下面的步骤来处理这个问题。