sql server版本 性能_迁移到高版本 SQL 数据库后,性能变差了
//迁移高版本 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 数据库后,性能变差了相关推荐
- sql server java类型_使用基本 JDBC 数据类型 - SQL Server | Microsoft Docs
使用基本数据类型Using basic data types 01/29/2021 本文内容 Microsoft JDBC Driver for SQL ServerMicrosoft JDBC Dr ...
- sql server键查找_如何查找SQL Server版本
sql server键查找 In this article, we will explore how to find the SQL Server version details with vario ...
- sql server复制表_具有超过246列的表SQL Server复制
sql server复制表 问题 (Problem) In our environment we use SQL Server merge replication to replicate data ...
- SQL Server 2000 从哪里看是哪个版本
有两种方法: 第一步:使用SQL语句查询 select @@version 查询结果如下: Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May ...
- 报错:此版本的SQL Server Data Tools与此计算机中安装的数据库运行时组件不兼容...
在Visual Studio 2012中使用Entity Framework,根据模型生成数据库时,报如下错误: 无法在自定义编辑器中打开Transact-SQL文件 此版本的SQL Server D ...
- 停止、启动或重新启动 VMware vCenter Server Appliance 6.x 及更高版本上的服务 (2109887)
停止.启动或重新启动 VMware vCenter Server Appliance 6.x 及更高版本上的服务 (2109887) https://kb.vmware.com/s/article/2 ...
- sql server合并行_合并SQL Server复制参数化的行筛选器问题
sql server合并行 In this article we will discuss about SQL Server Merge Replication Parameterized row f ...
- oracle 图片 显示不出,Sql Server 中image类型迁移到Oracle 中Blob类型出现图片显示不出来,why????请博客们帮忙 | 学步园...
我现在在一项目中碰到这么一个问题 Sql Server 中image类型迁移到Oracle Blob类型出现图片显示不出来,我在Sql Server 中看了一条image数据 如下: 1.Sql Se ...
- sql server重命名_在Linux上SQL Server中重命名逻辑和物理文件名
sql server重命名 Each database in SQL Server contains at least two files i.e. Data file (*.mdf) and log ...
最新文章
- 2022-2028年中国酱腌菜行业市场研究及前瞻分析报告
- 使用Struts2标签遍历集合
- 浅析js中的arguments
- CentOS7升级JDK
- 程序员面试金典 - 面试题 16.01. 交换数字(位运算swap)
- 软件测试基础知识(三)
- 微信小程序 讲座预约签到系统java python php
- linux测试wifi信噪比,无线网络中信噪比(SNR)计算
- 删除excel中复制网页带过来的下拉框、复选框、单选框
- excel 取消合并单元格
- Layim 自定义聊天界面
- 如何将电脑文字复制到模拟器_如何将电脑中的文字复制到手机上?
- 关键字深度剖析,集齐所有关键字可召唤神龙?【完】
- expdpimpdp使用remap
- Windows 11的这19个新功能,你都知道吗?
- Photo2Cartoon,照片图片批量转漫画
- Error in nextTick: TypeError: Cannot read property 'children' of undefined 解决
- 单链表的基本操作,建立单链表,插入删除等
- PHP获取微信公众号头像,新版微擎框架公众号获取用户头像
- Qt之简单图片浏览器
热门文章
- SQL查询优化 LEFT JOIN和INNER JOIN
- Spark运行命令示例
- 阅读构建之法10、11、12章
- Android AES加密算法及事实上现
- 基于 Android NDK 的学习之旅-----Java 调用C(附源码)
- SharePoint2007安装图文详解三:安装SqlServer2005
- Log4Net使用手册
- 开发基础框架:mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3
- TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN
- PyTorch 1.0 中文文档:自动求导机制