sqlserver中执行sql比较快,使用ado.net却比较慢

lxj1004 2019-07-08 06:14:34
相同的存储过程、相同的参数。
原来是在Api中执行、发现时间很长,使用Sql Profiler 跟踪语句拿到MSSMS中执行很快的。
再次使用Sql Profiler 查看结果如下图:



...全文
253 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
天涯特困生 2019-07-24
  • 打赏
  • 举报
回复
快和慢的case中,输入参数完全一样吗?
1. 如果不一样, 则可能是parameter sniffing. 采取方案有(1)recompile (2)optimizer for variant hint (3) plan guide (4)dynamic SQL
... 等等。他们各有优劣,要依具体场景来决定。
2.如果完全一样,(1)检查连接options (2)对比二者执行计划,确认二者一致,尤其是implicit data type conversion. 例如,在某些java连接库默认以unicode传递参数,导致隐式转换,进而无法使用索引。(3)检查应用逻辑。例如某些应用在取到数据,然后loop datareader做某些处理,如果结果集大或处理复杂,自然总体处理时间变长。

除此之外,还有非常多的可能,比如不同的网络环境, 不同的系统负载 等等
haiancdp0503 2019-07-09
  • 打赏
  • 举报
回复
会不会是内存不够了,索引啥的跑到虚拟内存了
Hello World, 2019-07-09
  • 打赏
  • 举报
回复
也遇到过这问题,开始是一个整的查询,总出问题,尝试过加入WITH RECOMPILE选项,过一段时间又回老样子。
后来把查询的一部份分拆到临时表再查询就好了,几个月了也还正常的。
吉普赛的歌 2019-07-09
  • 打赏
  • 举报
回复 1
很可能是参数嗅探造成。

改一下存储过程:
Alter proc proc_xxx

with recompile
As
......

.NET Framework 4.0 常用类库参考手册 [微软官方 MSDN] MSDN Library - .NET Framework 4.0 - 命名空间 (节选版) 制作成了chm格式,方便离线状态下学习! ======================================= 原文地址:http://msdn.microsoft.com/zh-cn/library/ms229335.aspx ======================================= .NET Framework 类库 - 命名空间 (节选版) Microsoft.Win32 提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。 System 包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、特性和处理异常的基础类和基类。其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。 System.Collections 包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。 System.Data 包含组成大部分 ADO.NET 结构的类。ADO.NET 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。 System.Data.Common 包含由 .NET Framework 数据提供程序共享的类。.NET Framework 数据提供程序描述用于在托管空间访问数据源(如数据库)的类的集合。 System.Data.Linq 包含支持在 LINQ to SQL 应用程序与关系数据库进行交互的类。 System.Data.Linq.Mapping 包含用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。 System.Data.Mapping 提供用于存储数据映射信息的类型。 System.Data.Metadata.Edm 包含一组类型,这些类型表示模型由实体框架使用的概念,以及一组帮助应用程序使用元数据的类。 System.Data.Objects 包含可访问对象服务的核心功能的类。 System.Data.Objects.DataClasses 包含以下这些类:Entity Data Model (EDM) 定义的类型的基类、由导航属性返回的类型的基类,以及用于定义将公共语言运行时 (CLR) 对象映射到概念模型类型的特性的类。 System.Data.Sql 包含支持特定于 SQL Server 的功能的类。此类的 API 扩展已添加到 SQL Server 的 .NET Framework 数据提供程序 ( System.Data.SqlClient) 。 System.Data.SqlClient 包含封装 SQL Server .NET Framework 数据提供程序的类。SQL Server .NET Framework 数据提供程序描述了用于在托管空间访问 SQL Server 数据库的类集合。 System.IO 包含允许对数据流和文件进行同步和异步读写的类型。 System.Linq 包含支持使用语言集成查询 (LINQ) 的查询的类和接口。 System.Web 提供启用浏览器/服务器通信的类和接口。 ……

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧