我安装了大约 10 天的 WinServer2012R2 和 SQL Server Express 2016 用于测试。我是这台机器上唯一的用户。SQL Server 2005 中的 .bak 约为 250MB 的数据库被还原,没有任何问题。重新启动机器后,进程“SQL Server NT - 64 Bit”使用 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-Server只想专注于一些内部任务。
这是一个具有 2GB RAM 和 2GHz 双 Xeon 的虚拟机。我也有VS2016,它真的很快。没有防病毒软件,甚至没有 Windows Defender。这里已经很晚了。明天我会试试 sp_whoisactive。我真的很想知道 SQL-Server 在那里做什么......在以前的 1 GB 机器上,相同的数据库在 SQLServer2005 下运行了 10 年没有问题......
我不是 SQL-Profiler 专家。我应该从哪里开始寻找?
由于您的 CPU 利用率很低(而且您的 CPU 设置很好),我会先检查内存压力。使用 SQL Express 2016,您的内存限制为 1410 MB,但您的 VM 只有 2GB。给你的虚拟机多 1GB 内存,看看是否有帮助。您还可以检查 SQL Server 日志是否将内存分页到文件。
如果这不起作用,请尝试将数据库设置 LEGACY_CARDINALITY_ESTIMATION 设置为 ON。参考:在 SQL Server 2016 中将 DB Compatibility Level 130 与旧 CE 一起使用。我们在进行一些升级时遇到了这个问题;结果会因每个数据库而异。
以下补丁描述了类似的问题。可能值得尝试:
https://support.microsoft.com/en-us/help/3195888/fix-high-cpu-usage-causes-performance-issues-in-sql-server-2016