偶遇 sqlserver 参数嗅探】的更多相关文章

需求: 费用统计 环境: 查询设计多张大表 解决方案: 优化查询语句,封装成存储过程,建立索引,最终查询速度很不错.部署上线,告一段落... 一段时间后投诉来了... 客户投诉说查询没内容,我看了日志是超时了.我自己也通过应用查询了一把也是超市,sql profiler 抓下执行存储过程的语句,放到sqlserver management 中执行也是很慢. 当时十分费解,原因是当时开发时速度很快,怎么经过一段时间后就慢了呢? 回头继续写... 2014-07-27  继续.. 主要原理是多表连接…
大家听到“嗅探”这个词应该会觉得跟黑客肯定有关系吧,使用工具嗅探一下参数,然后截获,脱裤o(∩_∩)o .事实上,我觉得大家太敏感了,其实这篇文章跟数据库安全没有什么关系,实际上跟数据库性能调优有关相信大家有泡SQLSERVER论坛的话不多不少应该都会见过“参数嗅探”这几个字这里有三篇帖子都是讲述参数嗅探的: SQL写法导致的SQL2008性能问题 Under the Table - How Data Access Code Affects Database Performance 困扰多时的查…
何谓SQLSERVER参数嗅探 大家听到“嗅探”这个词应该会觉得跟黑客肯定有关系吧,使用工具嗅探一下参数,然后截获,脱裤o(∩_∩)o . 事实上,我觉得大家太敏感了,其实这篇文章跟数据库安全没有什么关系,实际上跟数据库性能调优有关 相信大家有泡SQLSERVER论坛的话不多不少应该都会见过“参数嗅探”这几个字 这里有三篇帖子都是讲述参数嗅探的 http://social.msdn.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/caccb7f3…
大家听到"嗅探"这个词应该会觉得跟黑客肯定有关系吧,使用工具嗅探一下参数,然后截获,脱裤o(∩_∩)o . 事实上,我觉得大家太敏感了,其实这篇文章跟数据库安全没有什么关系,实际上跟数据库性能调优有关 相信大家有泡SQLSERVER论坛的话不多不少应该都会见过"参数嗅探"这几个字 这里有三篇帖子都是讲述参数嗅探的 http://social.msdn.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/caccb7f3-…
这个问题会在参数话的SQL语句(例如存储过程)与SQL Server里的计划缓存机制结合的时候会出现.这个文章分为2个部分,第1部分会介绍下参数嗅探(Parameter Sniffing)的概况,第2部分我们介绍下如何解决这个问题. 什么是参数嗅探(Parameter Sniffing) 在SQL Server里当你执行参数话的SQL查询时,查询优化器会基于第一个提供的参数值编译执行计划.然后生成的执行计划在计划缓存里缓存作为后期的重用.这就是说SQL Server后续会直接重用这个计划,而不管…
在参数嗅探(Parameter Sniffing)(1/2)里,我介绍了SQL Server里参数嗅探的基本概念和背后的问题.如你所见,当缓存的计划被SQL Server盲目重用时,会带来严重的性能问题.今天我会向你展示下如何处理这个问题,即使用不同的技术克服它. 索引(Index) 上次我们讨论造成参数嗅探问题的根源是:在执行计划里,SQL 语句有时会产生书签查找,有时会产生表/聚集索引扫描.如果你能在数据库里修改索引,解决这个问题的最简单方法就是提供查询列对应的覆盖非聚集索引.这里我们就要包…
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(4)--收集解决参数嗅探问题的信息 首先我们需要明白,参数嗅探本身不是问题,而是一个特性,避免SQL Server做出盲目的假设,从而产生次优查询计划.但是有些情况下,参数嗅探却会带来负面影响.通常有下面三种典型的情况: 查询使用的参数嗅探完全不合适.也就是说,查询计划对于这次执行是合适的,但是对于下一次执行就可能不合适. 应用程序中存在特定的调用模式,而且与其他大部分调用模式差…
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(3)--不总是参数嗅探的错 前面已经提到过关于存储过程在SSMS中运行很快,但在应用程序中运行很慢的可能原因:因为ARITHABORT的不同选项会导致不同的缓存词目,另外由于SQL Server使用了参数嗅探导致获得了不同的执行计划. 虽然已经说明了这个现象的原因,但是还没解释:如何定位和解决这个问题?到目前为止,大家都知道了如何快速处理,如果这个问题很紧急,可以直接使用: EX…
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(2)--SQL Server如何编译存储过程 在我们开始深入研究如何处理参数嗅探相关的性能问题之前,由于这个课题过于广泛,所以首先先介绍一些跟参数嗅探没有直接关系的内容,但是又会导致语句在SSMS和应用程序中存在性能差异的情况. 替换变量和参数: 前面已经接触过,但是在这里对其进行扩展.有时会看到论坛上有人说,某个存储过程很慢,但是把相同的语句提取出来单独执行就很快.真相就是:语…
文章来自:https://yq.aliyun.com/articles/61767 先说我的问题,最近某个存储过程,暂定名字:sp_a 总是执行超时,sp_a带有一个参数,暂定名为 para1 varchar(50),刚开始以为 是 sp_a 的语句优化得不够好,毕竟当时写的时候都是能用就成. 然后啪啪啪优化存储过程,写完了一测试,速度蛮快的,秒出结果.然后上线之...我写存储过程的时候,是直接定义一个参数,然后在里面写代码,没有创建存储过程去执行存储过程,大概意思是在查询分析器里面像下面这样写…
摘要 MSSQL Server参数嗅探既是一个涉及知识面非常广泛,又是一个比较难于解决的课题,即使对于数据库老手也是一个比较头痛的问题.这篇文章从参数嗅探是什么,如何产生,表象是什么,会带来哪些问题,如何解决这五个方面来探讨参数嗅探的来龙去脉,期望能够将SQL Server参数嗅探问题理清楚,道明白. 什么参数嗅探 当SQL Server第一次执行查询语句或存储过程(或者查询语句与存储过程被强制重新编译)的时候,SQL Server会有一个进程来评估传入的参数,并根据传入的参数生成对应的执行计划…
---从计划缓存中直接获取查询计划和参数: ), ) SELECT @dbname = 'hydee_连锁', @procname = 'dbo.p_select_ware'; WITH basedata AS ( AS stmt_start, qs.statement_end_offset AS stmt_end, est.encrypted AS isencrypted, est.TEXT AS sqltext, epa.value AS set_options, qp.query_plan…
分享一下我研究SQLSERVER以来收集的笔记 前言 为什麽分享??因为像现在网上很多人攻城师那样,转行去卖水果,卖早餐,总有一日我也会离开这个行业的 由于本人不是在大公司上班工资很低,我希望有一天存到足够的钱离开这个行业,然后开一个面包店(现时的想法/梦想) 因为我知道开面包店还是可以实现的,相比起其他的梦想和想法来说,难度不是太大 做一个面包师傅,能看到每个食到自己做的面包的人的微笑,你说幸福不是从这里来的吗? 把自己所学到的东西分享出来,最起码自己曾经对SQLSERVER圈子作出过小小贡献…
很久没有写随笔了,本来之前想写一篇关于SQLSERVER全文索引的随笔,可惜没有时间,一直拖到现在才有时间写,不好意思让各位久等了~ 先介绍一下SQLSERVER中的存储类对象,哈哈,先介绍一下概念嘛,让新手老手都有一个认知 SQLSERVER Management Studio将[全文目录].[分区函数]以及[分区方案]节点纳入其[对象资源管理器]的[存储]节点之中, 如下图所示: 正文来了!哈哈,有请主角:全文目录 全文目录 数据库[存储]|[全文目录]节点是用于保存和管理[全文索引]的节点…
SQLSERVER编译与重编译 编译的含义 当SQLSERVER收到任何一个指令,包括查询(query).批处理(batch).存储过程.触发器(trigger) .预编译指令(prepared statement)和动态SQL语句(dynamic SQL Statement)要完成语法解释.语句解释, 然后再进行“编译(compile)”,生成能够运行的“执行计划(execution plan)”.在编译的过程中, SQLSERVER会根据所涉及的对象的架构(schema).统计信息以及指令的…
如果SQL query中有参数,SQL Server 会创建一个参数嗅探进程以提高执行性能.该计划通常是最好的并被保存以重复利用.只是偶尔,不会选择最优的执行计划而影响执行效率. SQL Server尝试通过创建编译执行计划来优化你的存储过程的执行.通常是在第一次执行存储过程时候会生成并缓存查询执行计划.当SQL Server数据库引擎编译存储过程中侦测到有参数值传递进来的时候,会创建基于这些参数的执行计划.这种在编译存储过程中侦测参数值的方法,通常被称为"参数探测".有时参数探测会产…
多年前用过李天平前辈的,自己改过,后来李老师做动软了,不给源码,修改不是很方便.加上我目前需要转java方向,于是决定自己搞.到目前为止花了整整一个星期了,看看目前的成果. 最后是代码工程文件,用c#开发的,IDE是vs2010 为了实现最大的模板自由,设计了专有的模板语法.基于C#,但是已经做到尽量简化,对有一点开发经验的同行应该是很好上手的. 目前c#的代码模板已经做了一些通用样例,接下来做java的开发代码模板. 总之,为了提高效率,并且规范项目团队成员的代码书写. 下面把核心的代码两个类…
1.缺失索引: USE AdventureWorks2014 SET STATISTICS TIME ON; SET STATISTICS IO ON ; SELECT per.FirstName,per.LastName,p.Name,p.ProductNumber,soh.OrderDate,sod.LineTotal,soh.TotalDue FROM sales.SalesOrderHeader AS soh INNER JOIN sales.SalesOrderDetail sod O…
合理配置SQLSERVER内存 原文地址:https://www.cnblogs.com/lyhabc/archive/2012/09/28/2707857.html SQLSERVER是个很喜欢内存资源的程序,他的理想状态就是把所有可能会用到的数据和结构都缓存在物理内存里,以达到最优的性能. 虽然这样,但是SQLSERVER会约束自己的内存使用量,不过亲们最好对SQLSERVER的内存使用作出合理的分配 SQLSERVER的内存用在哪里? SQL会缓存大量的数据页面,他还会缓存很多其他信息,包…
SQL Server - 最佳实践 - 参数嗅探问题 转.   文章来自:https://yq.aliyun.com/articles/61767 先说我的问题,最近某个存储过程,暂定名字:sp_a 总是执行超时,sp_a带有一个参数,暂定名为 para1 varchar(50),刚开始以为 是 sp_a 的语句优化得不够好,毕竟当时写的时候都是能用就成. 然后啪啪啪优化存储过程,写完了一测试,速度蛮快的,秒出结果.然后上线之...我写存储过程的时候,是直接定义一个参数,然后在里面写代码,没有创…
Sql Server Replication Monitor 提供一个feature,能够verify Replication的 Publication 和 Subscription 的数据同步status. 1,在Replication Monitor的Left pane中点击Repulication,弹出快捷菜单 "Validate Subscriptions...",开始Validate one subscription. 2,在Replication Monitor的Right…
-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据库的大小的方法 笔记3-徐 设置数据库自动增长注意要点 笔记4-徐 模仿灾难发生时还原adventurework数据库 示例 stopat 笔记5-徐 检查日志文件不能被截断的原因 笔记6-徐 检测孤立用户并恢复孤立用户到新的服务器 解决数据库镜像孤立用户问题 笔记7-徐 SQLSERVER日志记录…
我们的一个Reporting Service服务上部署了比较多的SSRS报表,其中有一个系统的SSRS报表部署后,执行时间相对较长,加之供应商又在ASP.NET页面里面嵌套了Reporting Service的报表,使得用户对报表响应速度非常不满,于是和几个同事研究了一番如何定位.优化SSRS报表性能. 案例环境: 操作系统   :   Windows Server 2008 R2 Standard SP1 数据库版本 :   SQL Server 2008 R2 (SP2) - 10.50.4…
1. 防止包打开后hang住,可以使用delay validation=false. 2.2008R2 configuration 起作用的优先级? 一是des ign time. 二是运行的时候指定的文件 2012的parameter 则是相反. 3.注意SSIS包的32位与64位跑的区别?agentjob 默认是64位的去跑,如果你是包需要在32位下面跑,有选项可以勾选. 你可以使用不同folder下面的dtsexec去跑你的job. 第三方的driver也许需要设置allow in pro…
CPU使用率过高的常见原因 查询优化器会尽量从CPU,IO和内存资源成本最小的角度,找到最高效的数据访问方式.如果没有正确的索引,或者写的语句本身就会忽略索引, 又或者不准确的统计信息等情况下,查询计划可能不是最优的. 有些查询计划可能对只对某种条件下的查询是高效,而不是所有条件下都是. 缺失索引 索引的缺失,会导致查询处理的行数大大超出必要的行数,从而加重CPU和IO的负载.简单的例子: SELECT per .FirstName , per.LastName , p.Name , p.Pro…
<Troubleshooting SQL Server>读书笔记-CPU使用率过高(下) 第三章 High CPU Utilization. CPU使用率过高的常见原因 查询优化器会尽量从CPU,IO和内存资源成本最小的角度,找到最高效的数据访问方式.如果没有正确的索引,或者写的语句本身就会忽略索引, 又或者不准确的统计信息等情况下,查询计划可能不是最优的. 有些查询计划可能对只对某种条件下的查询是高效,而不是所有条件下都是. 缺失索引 索引的缺失,会导致查询处理的行数大大超出必要的行数,从而…
每次经历数据库性能调优,都是对性能优化的再次认识.对自己知识不足的有力验证,只有不断总结.学习才能少走弯路. 一.性能问题描述 应用端反应系统查询缓慢,长时间出不来结果.SQLServer数据库服务器吞吐量不足,CPU资源不足,经常飙到100%……. 二.监测分析 收集性能数据采用二种方式:连续一段时间收集和高峰期实时收集 连续一天收集性能指标(以下简称“连续监测”) 目的: 通过此方式得到CPU/内存/磁盘/SQLServer总体情况,宏观上分析当前服务器的主要的性能瓶颈. 工具: 性能计数器…
接上文:T-SQL动态查询(2)--关键字查询   本文讲述关于静态SQL的一些知识和基础技巧. 简介: 什么是静态SQL?静态SQL是和动态SQL相对而言的,其实我们没必要过于纠结精确定义,只要大概知道什么算静态SQL即可.当一个语句特别是存储过程,语句不需要动态生成或拼接,除了参数之外我们都知道语句的最终形态时,就可以认为这是静态SQL,简单来说,我们大部分的)--关键字查询 使用带有OPTION(RECOMPILE)的静态SQL有以下优点: 对于中等复杂的搜索条件,可以得到排版紧凑,相对易…
起因: 由于最近工作需要及过去一直的疑问,所以决定着手研究一下动态SQL.由于离开一线开发有点年头了,很多技巧性的东西没有过多研究,作为DBA和<SQL Server性能优化与管理的艺术>一书的独立作者,更多的是关注在满足功能要求前提下的性能问题.但是我认为本文不仅对DBA有用,对数据库开发人员甚至设计师.架构师等都有一定的参考价值. 前言: 读者是否遇到过类似功能:一个应用程序(不管是B/S还是C/S结构),有某个/些功能,允许用户选择不同的条件来进行查询(为了简便期间,这里仅针对查询功能)…
前言: 在前面一文中,已经提到了三类常见的索引问题,那么问题来了,当系统出现这些问题时,该如何应对? 简单而言,需要分析现有系统的行为,然后针对性地对索引进行处理: 对于索引不足的情况:检查缺少索引的情况,也需要检查现有索引定义是否有问题. 对于索引过多的情况:分析每一个索引的使用情况,判断是否有存在的必要或者可合并.可修改的可能. 对于索引不合理的情况:也要分析每个索引的定义,及其使用情况,确定索引是否有存在必要,如果有,是否能很好地支持查询并且对现有系统的影响也不大. 从上面描述可知,我们的…