Hyper-V 中的 SQL 2012。为什么在我删除并创建任何空间索引之前我的查询很慢?

Hyper-V 中的 SQL 2012。为什么在我删除并创建任何空间索引之前我的查询很慢?

我有一个空间应用程序,每次用户平移/缩放地图时都会查询多个表(图层)。当我将 SQL 服务器移入 Hyper-V 时,我注意到查询其中一个表时有几秒钟的延迟。我从查询中禁用了此表,然后另一个表变得很慢等等。

奇怪的是,通过删除和创建数据库中任何表的任何空间索引(即使是我没有查询的表),性能神奇地变得快如闪电,直到我重新启动或创建新的连接。

我尝试使用直通磁盘,但没有任何变化。在运行本机 SQL 服务器(非虚拟)时,此“错误”不会在同一硬件上发生。我也在另一台台式电脑上尝试了 Hyper-V,也尝试了 SQL 2014 Express,但遇到了同样的问题。

还有其他 Hyper-V/SQL 设置可以尝试吗?有没有解释为什么删除并创建索引可以暂时解决问题?

答案1

不幸的是,在某些情况下,这似乎是虚拟化的代价。如果您正在使用动态内存(使用内存气球驱动程序)运行,请尝试将 VM 配置为具有一定数量的 RAM。观察主机和客户机的内存利用率。如果您发现内存消耗越来越大,请尝试禁用内存中的锁定页面。您可以尝试的一件事是关闭所有客户机,主机刚刚启动,只启动运行 SQL 的单个客户机。如果查询按预期运行,则其他客户机正在抢占该 VM 所需的资源。当服务器大小不正确时,可能会发生这种情况,并且这种情况很常见。解决此问题的方法是添加额外的磁盘阵列并将其专用于该 VM。另一种欺骗系统的方法是使用 SSD 缓存数据库。另外需要考虑的几件事是,如果您关闭 SQL 服务并使用 UltraDefrag 等工具并运行完整优化和碎片整理,然后如果查询执行速度更快,请重新启动服务。您可以在以下位置获得开源且免费的 UltraDefraghttp://ultradefrag.sf.net最后,微软有一篇论文,你可能需要用它来检查你的配置。请查看:http://www.slideshare.net/ManuelCastro8/high-performance-sql-server-workloads-on-hyper-v

另一件可以尝试的事情是使用 ESXi 而不是 Hyper-V,或者最新的 Hyper-V 2012 R2。

最后,完整版 SQL 运行的具体版本是什么?客户机和主机运行的具体操作系统是什么?您是否安装了最新的集成服务?

相关内容