匿名用户sql server 同一个sql,查询有时很快,有时很慢是什么原因?
是调用存储过程吗?
存储过程有参数嗅探问题。你重新编译一下应该就可以了。
评论
有用 0在实际操作中如果出现SQL Server数据库查询速度慢的情况原因:
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
2、I/O吞吐量小,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不足
5、网络速度慢
6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
9、返回了不必要的行和列
10、查询语句不好,没有优化
评论
有用 01:查看SQL等待类型,
SELECT dest.text AS [执行中的SQL] , der.start_time AS SQL开始运行的时间, datediff(ss,der.start_time,GETDATE()) AS SQL已执行时长秒, der.session_id AS 会话ID, der.command AS 命令类型 , des.[host_name] 应用服务器主机名, des.login_name AS 账号名, des.[program_name] AS 应用程序名 , dec.client_net_address AS 应用服务器IP, der.status AS 运行状态 , der.wait_type AS 等待类型, DB_NAME(der.database_id) AS 访问的数据库
FROM sys.dm_exec_requests der
INNER JOIN sys.dm_exec_connections dec ON der.session_id = dec.session_id
INNER JOIN sys.dm_exec_sessions des ON des.session_id = der.session_id
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS dest
WHERE des.is_user_process = 1
order by 2 END
其他:
1、检查是否发生阻塞,如果被其他SQL阻塞了,在运行时间会变长;检查SQL sp_who2 active;
2、检查cpu并行度设置,若设置为0,则不限制CPU并行度,负载较高的情况下会大量出现(CXPACKET等待),oltp服务器建议降低并行度;检查方法:实例属性--高级--并行--最大并行度
3、大批量插入、更新导致统计信息不准确,可以更新统计信息:update statistics table_name
评论
有用 0
墨值悬赏

