SQL Server 2016 高空闲 CPU 和查询速度极慢

And*_*dle 10 performance sql-server sql-server-express sql-server-2014

我有一个大约 10 天的 WinServer2012R2 和 SQL Server Express 2016 安装用于测试。我是这台机器上唯一的用户。SQL Server 2005 中的 .bak 大约为 250MB 的数据库已恢复,没有任何问题。机器重新启动后,进程“SQL Server NT - 64 位”使用 0% CPU。

几分钟或几小时后,来自“SQL Server NT - 64 位”的 SSMS CPU 使用率的一些简单查询(没有更新/插入!)突然跃升至约 15% 并保持在那里,即使在空闲时也是如此。从那时起,通常需要不到一秒钟的查询突然需要 2 分钟。在实际查询期间,CPU 使用率不会增加。在这种状态下,服务器几乎无法使用。

仅连接 SQL Server Profiler 需要 30 秒以上的时间。除了我自己的查询之外,我只看到来自 SQLServerCEIP / SQLTELEMETRY 的非常少的查询,大约每分钟 3 次。

重新启动 SQL-Server 并不能解决它。CPU 使用率立即回升至约 15%。即使在数小时后 SQL-Server 也不会恢复。只有重新启动整个机器才能解决问题。

由于这是一个“开箱即用”的安装,只有一个小数据库,几乎没有查询,只有我作为用户并且可能没有锁,关于常规 SQL-Server 性能问题的许多文章谈论了很多事情真的不适用这里。这似乎为SQL-服务器专用希望专注于一些内部的任务。

这是一个具有 2GB RAM 和 2GHz 双 Xeon 的虚拟机。我也有 VS2016,它真的很快。没有防病毒软件,甚至没有 Windows Defender。这里已经晚了。明天我将尝试 sp_whoisactive。我真的很想知道 SQL-Server 在那里做什么......在以前的机器上有 1 GB 相同的数据库在 SQLServer2005 下运行了 10 年没有问题......

我不是 SQL-Profiler 专家。我应该从哪里开始寻找?

小智 3

由于您的 CPU 利用率较低(并且您有一个很棒的 CPU 集),我会首先检查内存压力。使用 SQL Express 2016,您的内存限制为 1410 MB,但您的 VM 只有 2GB。为您的虚拟机增加 1GB 内存,看看是否有帮助。您还可以检查 SQL Server 日志是否将内存分页到文件。

如果这不起作用,请尝试将数据库设置 LEGACY_CARDINALITY_ESTIMATION 设置为 ON。参考:在 SQL Server 2016 中将数据库兼容性级别 130 与旧版 CE 结合使用。我们在一些升级中遇到了这个问题;结果会因每个数据库而异。