SQL Server 2014:相同虚拟机的不同性能(巨大的“执行次数”)

2024-04-17

I have 2 个相同的虚拟机(16 个 vCPU,RAM:64GB)具有相同的数据库、相同的表和视图以及相同的行数。 View1 有 470 万行。

在 VM1 (UAT) 上SELECT TOP 1000 .. FROM View1不到 1 秒即可给出答案。

在 VM2 (PROD) 上,相同的查询会在 4 分钟内得到答案。

我检查了数据库、表、视图1的属性,没有发现VM1和VM2之间有任何区别。 我检查了统计数据,但它表明没有任何内容需要重新刷新。

VM2 上的执行计划显示:

  • 估计处决人数:1000
  • 执行次数:4.2M

On VM1:

  • 估计处决人数:1000
  • 处决数量:900

VM2 (PROD) 应该与 VM1 (UAT) 完全相同,但可能存在什么问题?

以下是两个虚拟机上“SELECT TOP 1000 .. FROM View1”的执行计划:

虚拟机上的执行计划:UAT 和 PROD http://www.cjoint.com/data/FKvqlQD1w5U_PROD-UAT-exec-plans.7z

他们看起来很相似。

以下是 UAT 与 PROD 统计数据:

什么可以解释两种环境之间逻辑读取(和预读读取)数量的巨大差异???

预先感谢您帮助我了解这个“奥秘”。


尽管这是两个具有相同配置的不同虚拟机,但它还是有很多差异:

  1. 您检查过两台服务器的 IOPS 数量吗?

从 View1 选择前 1000 个...期间为 10 MB/s

  1. 尽管两者的 RAM 相同,但分配给 SQL Server 的有多少?

两个虚拟机上为“SQL Server 2014”分配了 60GB/64GB

  1. 数据加载模式:数据加载如何发生以及索引如何重建/重新组织?其时间表是怎样的?

没有 DBA“在场”,我希望他下周能回来

  1. 统计信息更新:即使您重建了索引,两个服务器中的统计信息是否都是最新的?

请问,如何强制更新统计数据?在两个虚拟机上,上次更新是 1.5个月前!但它说统计数据是最新的......

  1. 网络测试如何进行?如果您从远程计算机查询是否存在连接问题?

测试是通过“终端服务器”在 VM1 和 VM2 上使用“SQL Server Management Studio”。在此期间网络活动非常低 在VM2上测试

  1. 在您不知情的情况下,同一张表上有任何额外的触发器、约束吗?

理论上不会,但是……也许吧。我会和 DBA 一起看看他什么时候会 后退。

第 3 点和第 4 点对于估计和实际处决数量及其差异至关重要。

有关 View1 的附加信息:它使用 2 个表 - view0:470 万行,无 性能问题(选择前 1000 个

在VM2上测试View1时,1个CPU的使用率为100%。

有没有一个工具可以快速比较两个数据库及其参数 组件(表、视图、索引...)?

感谢您的帮助 ! :)

对于第 3 点:您可以执行以下脚本:

SELECT a.index_id, name, avg_fragmentation_in_percent  
FROM sys.dm_db_index_physical_stats (DB_ID(N'YourDatabase'), OBJECT_ID(N'YourTable'), NULL, NULL, NULL) AS a  
    JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id;  

UAT 和 PROD 的结果

结果 UAT 和 PROD https://i.stack.imgur.com/wDUct.png

按照以下百分比重建或重组索引:

avg_fragmentation_in_percent 值 更正说明

5% 和

https://msdn.microsoft.com/en-us/library/ms189858.aspx https://msdn.microsoft.com/en-us/library/ms189858.aspx

对于第 4 点:

您可以运行以下脚本:

update statistics yourtablename

这将更新您的统计数据。之后,您可以使用以下命令检查统计直方图

dbcc show_statistics(yourtablename, yourindexname)

它在两台服务器中均匀分布,这使得查询优化器能够选择最佳计划。

考虑到两个执行计划是相似的。如果您发布两个执行计划,我们可以找到确切的差异。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 2014:相同虚拟机的不同性能(巨大的“执行次数”) 的相关文章

  • 获取一组记录之间的时间差

    我有一个具有以下结构的表 ID ActivityTime Status 19 2013 08 23 14 52 1 19 2013 08 23 14 50 1 19 2013 08 23 14 45 2 19 2013 08 23 14 3
  • 循环内的局部变量会被垃圾收集吗?

    我想知道将循环内引用的任何变量放在循环外是否更有效 或者它们可以像函数内的变量一样被垃圾收集吗 var obj key val for var i 0 i lt 10 i console log obj or for var i 0 i l
  • 优化数据可视化 Web 应用程序的性能

    我正在重写 3 年前编写的数据可视化网络工具 从那时起 浏览器的 JavaScript 引擎变得更快 所以我正在考虑将部分工作从服务器转移到客户端 在页面上 数据在表格和地图 或图表 中可视化 它使用相同的数据 但以不同的方式 因此准备显示
  • 如何从 SQL Server 中的 SELECT 进行更新?

    In SQL服务器 可以将行插入到带有INSERT SELECT陈述 INSERT INTO Table col1 col2 col3 SELECT col1 col2 col3 FROM other table WHERE sql coo
  • jQuery - 提高处理 XML 时的选择器性能

    我正在处理一个 XML 文件 当使用 XPath 样式选择器选择节点时 该文件的性能非常慢 这是运行特别慢的部分代码 for i 0 i
  • Python——捕获异常的效率[重复]

    这个问题在这里已经有答案了 可能的重复 Python 常见问题解答 异常有多快 https stackoverflow com questions 8107695 python faq how fast are exceptions 我记得
  • SQL Server Management Studio v18 的命令行参数登录

    使用 SQL Server 身份验证时是否仍然可以从命令行打开 SQL Server Management Studio v18 根据微软的发行说明 由于安全风险 他们删除了 P 命令行参数 因此 可以从命令行使用 SQL Server 身
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack
  • Sql Server 的夏令时

    我们正在使用一个以 C Unix 格式存储日期的旧应用程序 C 时间基本上是自 1970 年 1 月 1 日以来的秒数 日期以整数形式存储在 SQL Server 数据库中 我正在为使用这些日期的报告编写视图 到目前为止 我正在使用以下命令
  • JavaFX 中 WebView 的性能

    我有一个 HTML5 UI 和一个 Java 后端 并且希望避免在纯 java 中重建 HTML ui 所以我的想法是运行本地 Web 服务器并使用 WebView 在 本机 窗口中呈现它 解决方案似乎是使用可以嵌入到 swing 中的 J
  • 如何连接子查询的第一行?

    我有一个发票表和一个按键关联的相关数据的子表 特别是 对于每张发票 我只对子表中的第一个相关行感兴趣 鉴于我想要每个发票键都有一个相关行 我该如何实现这一点 Select i Invoice Number c Carrier Name Fr
  • 对于返回超过1个值的SQL select,当Id为GUID时它们如何排序?

    我想知道 SQL Server 如何对查询返回的数据进行排序 并且各个表的 Id 列都是 uniqueidentifier 类型 我在创建所有 GUID 时使用 NHibernate GuidComb 并执行以下操作 Sheet sheet
  • linq2sql,存储库模式 - 如何从两个或多个表查询数据?

    我使用存储库模式 和 linq2sql 作为数据访问 并拥有例如 ProductsRep 和 CustomersRep 在非常简单的场景中 数据库有两个表 产品 产品 ID 客户 ID 产品名称 日期 和顾客 客户 ID 名字 姓氏 每个存
  • SQL Server Like 查询不区分大小写

    Query SELECT from Table 2 WHERE name like Joe Output 1 100 Joe 2 200 JOE 3 300 jOE 4 400 joe 为什么不区分大小写 Problem 查询不区分大小写
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe
  • 如何最大限度地提高服务器性能?

    我一直在努力了解性能和可扩展性 并想知道开发人员 系统管理员正在做什么来提高他们的系统的效率 为了标准化答案 如果您能尽力回答以下任一问题 将会有所帮助 Profile Magazine publication on Joomla Jobs
  • ASP SQL Server 连接

  • Pandas dataframe:每批行的操作

    我有一个熊猫数据框df我想计算每批行的一些统计信息 例如 假设我有一个batch size 200000 对于每批batch sizerows 我想要一列的唯一值的数量ID我的数据框 我怎样才能做这样的事情呢 这是我想要的一个例子 prin
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不

随机推荐

  • 如何使用 python 和 Opencv 计算图像中的点数?

    I want to count number of dots in an image The image looks like 我参考了这个 SOF 链接计算图像中的彩色点 https stackoverflow com questions
  • 即使使用stream_set_blocking,PHP SSH2流内容仍为空?

    我正在开发一个工具 它使用 PECL SSH2 扩展通过 SSH2 从远程主机读取 iptables 配置 我能够成功连接到主机 进行身份验证并执行命令 我遇到的问题是有时该流不包含任何数据 Load the current firewal
  • TwoSum 算法:如何改进?

    我想做一个算法并发现这个问题leetcode http www leetcode com 给定一个整数数组 找到两个数字 使它们加起来等于特定的目标数字 函数twoSum 应返回两个数字的索引 以便它们相加达到目标 其中index1 必须小
  • Jython,仅使用 Java 中的 Python 方法?

    阅读和使用时本文 http www rexx com dkuhlman jython course 03 html example the jython classes它假设我们有一个完整的对象定义 包含类和从 python 到 java
  • 查找日期的两个周期之间重叠的天数

    我有两个表 每个表都保存日期期间 从 date1 到 date2 我将在表1和表2中查找两个日期期间之间的重叠天数 Example table1 id FromDate ToDate 1 2000 01 01 2000 02 04 2 20
  • 映射减少计数示例

    我的问题是关于mapreduce programming in java 假设我有 WordCount java 示例 一个标准mapreduce program 我希望map函数收集一些信息 并返回形成如下的reduce函数map
  • 如何从单独的文件下载用于 cmake 中交叉编译的工具链?

    我有一个项目 根目录中有一个 CMakeLists txt 文件 该项目在 Linux 和 OSX 上编译得很好 现在我想为 MIPS OpenWRT 交叉编译它 我想尽可能地自动化它 所以我将使用以下代码来下载工具链并设置编译器变量 Ex
  • 停止并重新启动计时器

    我想停止这个计时器 然后从停止的地方重新启动它 secondsTimer Timer scheduledTimer timeInterval 1 0 target self selector selector addSeconds user
  • 覆盖 FILE_LOG_PATTERN (如果可能的话每个环境)

    我想覆盖 Spring Boot 的默认文件和控制台日志模式以包含一些自定义 MDC 字段 有没有一种简单的方法可以使用application properties yaml 如果没有的话 这将是一个很好的功能 否则我可能不得不复制 Boo
  • 比较当前文件版本和上一个远程存储库

    如何区分我的工作文件版本与远程存储库中的某些先前版本 假设我今天拉取 对本地副本执行 6 8 次提交 然后想要查看我的最新工作版本 给定文件 与远程或任何其他版本上的最新版本之间的差异 要查看 最新工作版本 我将其作为您的工作副本 之间的差
  • 使用 sharekit 在 Facebook 上添加图像和描述

    我正在使用 sharekit 在 Facebook 上分享文本 我想在文本附近添加一张图片 如下图所示 知道如何做到这一点吗 还有其他合适的库 例如 sharekit 吗 谢谢 将 og image 元标记添加到 head html 块中
  • 如何获取使用 AngularDart 的路线?

    这是我的代码 import package angular angular dart class AppModule extends Module AppModule type AppController type LoginControl
  • Biopython无法直接访问异质残基

    我可以使用以下方法直接获取蛋白质 1n31 的残基 residue structure 0 A 100 然而 当我尝试访问异质残基时 例如 residue structure 0 A 2003 我收到错误消息 File
  • 顺序订阅可观察数组

    在这里 我用过forkJoin从 rxjs 并行订阅可观察数组 但我想一一订阅 最好的解决方案是什么 下面是我的代码 var observables Observable forkJoin observables subscribe gt
  • 从 Vaadin 8 Grid 获取列表

    Problem 我有一个 Vaadin 8 Grid 但我找不到提取其中项目的方法 描述 从网格开始 Grid
  • Clojure:避免埃拉托斯特尼筛中的堆栈溢出?

    这是我在 Clojure 中实现的埃拉托斯特尼筛法 基于 SICP 流课程 defn nats from n iterate inc n defn divide p q zero rem q p defn sieve stream lazy
  • 未找到 SDL2_image

    我正在尝试编译以下具有标题的代码 include
  • Vulkan:上传 3 通道图像到设备

    假设主机端有一个3通道图像 float或uint8 需要传输到设备图像 vkCmdCopyBufferToImage用于它 对于设备图像的格式 我看到两个选项 使用 R32G32B32A32 SFLOAT R8G8B8A8 SNORM 并将
  • 代数数据类型的特征

    我无法理解有关代数数据类型特征的规则 这是一个简化的示例 use std rc Rc use std cell RefCell trait Quack fn quack self struct Duck impl Quack for Duc
  • SQL Server 2014:相同虚拟机的不同性能(巨大的“执行次数”)

    I have 2 个相同的虚拟机 16 个 vCPU RAM 64GB 具有相同的数据库 相同的表和视图以及相同的行数 View1 有 470 万行 在 VM1 UAT 上SELECT TOP 1000 FROM View1不到 1 秒即可