​//迁移高版本 SQL//

高版本 SQL,一定要迁移吗?

是的,必须的。数据库软件毕竟不是互联网的单体应用,UI 一天一变,讨用户的巧。这类商用软件讲究的是稳定,可靠和安全。所以一个大版本的上线,带来的是无数企业客户提出的需求,可以是更好的支持硬件,支持更多的并发,也可以带来更好的优化器。相比成本来说,数据更有价值。

所以很多岗位都为项目迁移而设计。

这两天微信群有个朋友就碰到迁移中遇到的性能问题。非常有意思。还记得我之前怎么看待微信区和交流社区的吗?假如你一个人默默的学习、看书、做实验,始终碰到的困难和问题有限,一旦很多人聚集在一起学习和交流,那么问题就会有一堆。我很庆幸有读者愿意分享自己的经历,这是宝。让我提前接触了我没有遇到过的问题,将来某个时刻我遇到了,嗯,我就可以正经的说三道四了。

//正经的问题//

这位读者遇到的问题是这样的:

公司从 SQL Server 2012 升级 2016,升级过程很顺利,并没有太多曲折。但升级完后,打开 Crystal Reports 就贼慢,比以前用 SQL 2012 慢了很多。经分析执行计划,他机智的发现是很多查询都不走索引了。

之前我写过很多文章,都是讲索引失效的处理方法

可能大家都没有怎么留意。所以这证实了我的一个想法,有些原理必须反复的讲解,从通俗易懂的概念讲起,从案例实战讲起,从简单到复杂,深度剖析本质,才有可能把问题说清楚。否则很多读者朋友看过就是看过而已,并没有太放心上。根据费曼定理,只有 7 遍以上的重复,才能引起主观意识。而真正掌握,则是要自己动手去实践。

不看之前的文章,你能直接说出如何为优化器指定一个索引去生成执行计划吗?可以留言区写写你的看法

//新概念 CE//

我当时给的方案就是通过改写优化器,指定查询重走索引。

当后来仔细一想,有点问题。既然是很大面积的出现了这种问题,肯定是和新的 database context 有关,即新版本的数据库软件,有某个设置,使得优化器判断失误,致使执行计划低效。

于是,我就 Google 了一把。

终于有个可疑的设置引起了我的注意。那就是新的数据库优化器组件, Cardinality Estimation, 我将它翻译为“笛卡尔估算器”。这是我瞎翻的,并不是官方叫法。这份组件有个很重要的副作用,就是会产生 Regression, 即优化器生成的执行计划会回退至低效。

首先,我们看下 Cardinality Estimation 会不会引起执行计划改变?

在判断条件上,使用了不同的数据,导致执行计划更改:

用 10 来缩小范围和 用 100 来缩小范围,虽然逻辑计划都是 Inner Join, 但物理计划却一个是 Inner Join , 另一个是 Hash Match. 这两个物理计划可是有着天然的速度对抗。

当我们点击顶层标签的时候,发现 CEMV (Cardinality Estimation Model Version)是 70,如下:

CEMV 是 SQL 2014 的新组件,共有 120 和 70 两个级别。120 是高版本,70 是旧版本。而当数据库的 compatibility 级别是 120 以上时,120 的 CEMV 才会起作用,如果此时 CEMV 为 70 就有可能引起不稳定或者 Regression.

此时,我们就要检查数据库的 compatibility level 了。如果是低于 120 的,那么 CEMV 即使 120 以上都不会起作用,只有 70 才能正确生成执行计划。

//结论//

这只是我的一个猜测,迁移高版本后,Regression 发生了。如果要证实能不能通过修改 Cardinality Estimation 来解决这问题,还需要这位读者自行测试。

sql server版本 性能_迁移到高版本 SQL 数据库后,性能变差了相关推荐

  1. sql server java类型_使用基本 JDBC 数据类型 - SQL Server | Microsoft Docs

    使用基本数据类型Using basic data types 01/29/2021 本文内容 Microsoft JDBC Driver for SQL ServerMicrosoft JDBC Dr ...

  2. sql server键查找_如何查找SQL Server版本

    sql server键查找 In this article, we will explore how to find the SQL Server version details with vario ...

  3. sql server复制表_具有超过246列的表SQL Server复制

    sql server复制表 问题 (Problem) In our environment we use SQL Server merge replication to replicate data ...

  4. SQL Server 2000 从哪里看是哪个版本

    有两种方法: 第一步:使用SQL语句查询 select @@version 查询结果如下: Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May ...

  5. 报错:此版本的SQL Server Data Tools与此计算机中安装的数据库运行时组件不兼容...

    在Visual Studio 2012中使用Entity Framework,根据模型生成数据库时,报如下错误: 无法在自定义编辑器中打开Transact-SQL文件 此版本的SQL Server D ...

  6. 停止、启动或重新启动 VMware vCenter Server Appliance 6.x 及更高版本上的服务 (2109887)

    停止.启动或重新启动 VMware vCenter Server Appliance 6.x 及更高版本上的服务 (2109887) https://kb.vmware.com/s/article/2 ...

  7. sql server合并行_合并SQL Server复制参数化的行筛选器问题

    sql server合并行 In this article we will discuss about SQL Server Merge Replication Parameterized row f ...

  8. oracle 图片 显示不出,Sql Server 中image类型迁移到Oracle 中Blob类型出现图片显示不出来,why????请博客们帮忙 | 学步园...

    我现在在一项目中碰到这么一个问题 Sql Server 中image类型迁移到Oracle Blob类型出现图片显示不出来,我在Sql Server 中看了一条image数据 如下: 1.Sql Se ...

  9. sql server重命名_在Linux上SQL Server中重命名逻辑和物理文件名

    sql server重命名 Each database in SQL Server contains at least two files i.e. Data file (*.mdf) and log ...

最新文章

  1. 2022-2028年中国酱腌菜行业市场研究及前瞻分析报告
  2. 使用Struts2标签遍历集合
  3. 浅析js中的arguments
  4. CentOS7升级JDK
  5. 程序员面试金典 - 面试题 16.01. 交换数字(位运算swap)
  6. 软件测试基础知识(三)
  7. 微信小程序 讲座预约签到系统java python php
  8. linux测试wifi信噪比,无线网络中信噪比(SNR)计算
  9. 删除excel中复制网页带过来的下拉框、复选框、单选框
  10. excel 取消合并单元格
  11. Layim 自定义聊天界面
  12. 如何将电脑文字复制到模拟器_如何将电脑中的文字复制到手机上?
  13. 关键字深度剖析,集齐所有关键字可召唤神龙?【完】
  14. expdpimpdp使用remap
  15. Windows 11的这19个新功能,你都知道吗?
  16. Photo2Cartoon,照片图片批量转漫画
  17. Error in nextTick: TypeError: Cannot read property 'children' of undefined 解决
  18. 单链表的基本操作,建立单链表,插入删除等
  19. PHP获取微信公众号头像,新版微擎框架公众号获取用户头像
  20. Qt之简单图片浏览器

热门文章

  1. SQL查询优化 LEFT JOIN和INNER JOIN
  2. Spark运行命令示例
  3. 阅读构建之法10、11、12章
  4. Android AES加密算法及事实上现
  5. 基于 Android NDK 的学习之旅-----Java 调用C(附源码)
  6. SharePoint2007安装图文详解三:安装SqlServer2005
  7. Log4Net使用手册
  8. 开发基础框架:mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3
  9. TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN
  10. PyTorch 1.0 中文文档:自动求导机制