急!看数据库里最耗资源的Sql语句,竟然是NULL!?

marsoft9_1 2015-12-12 02:20:57
加精
今天报系统使用很慢,如果看服务器(4核,80线程,128内存),发现内存使用在35%,CPU一直在35%-75%之前徘徊,于是用下面语句查了下,但发现如下截图。

我想问的是,为什么显示这个Sql语句是为空的?
而且我kill掉后,cpu还是高

注:我是参考这里的处理方式:http://www.cnblogs.com/lyhabc/archive/2013/06/12/3133273.html
帮帮我~~

--取前10个最耗CPU时间的会话
SELECT TOP 10
[session_id],
[request_id],
[start_time] AS '开始时间',
[status] AS '状态',
[command] AS '命令',
dest.[text] AS 'sql语句',
DB_NAME([database_id]) AS '数据库名',
[blocking_session_id] AS '正在阻塞其他会话的会话ID',
[wait_type] AS '等待资源类型',
[wait_time] AS '等待时间',
[wait_resource] AS '等待的资源',
[reads] AS '物理读次数',
[writes] AS '写次数',
[logical_reads] AS '逻辑读次数',
[row_count] AS '返回结果行数',
[cpu_time]
FROM sys.[dm_exec_requests] AS der
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id]>50
--AND DB_NAME(der.[database_id])='gposdb'
ORDER BY [cpu_time] DESC


...全文
3156 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
fmjwn 2015-12-22
  • 打赏
  • 举报
回复
什么版本的oracle,出一份包含故障期的awr报告,报告里你需要的信息基本都有。
marsoft9_1 2015-12-21
  • 打赏
  • 举报
回复
sql 可以查询启动以来哪些sql语句最耗cpu或内存的吗?? 是想相历史的~
业余草 2015-12-21
  • 打赏
  • 举报
回复
你还是好好把oracle学习学习
啊时代经典 2015-12-19
  • 打赏
  • 举报
回复
nettman 2015-12-19
  • 打赏
  • 举报
回复
qq_33434292 2015-12-19
  • 打赏
  • 举报
回复
执行dbcc inputbuffer(session_id) 后显示,应该是查历史的吧
LongRui888 2015-12-18
  • 打赏
  • 举报
回复
引用 15 楼 marsoft9_1 的回复:
[quote=引用 10 楼 yupeigu 的回复:] 这个不太可能是null,因为计算是加密过的存储过程,在执行时 还是能查询到是 exec 存储过程 这样的语句的。 你这么试试; dbcc inputbuffer(会话id) 看看到底是什么语句把。
我执行dbcc inputbuffer(session_id) 后显示 EventType Parameters EventInfo Language Event 0 A380_ToDoList 这是什么意思哦??[/quote] A380_ToDoList 这个就是你执行的存储过程把
xiaoxiangqing 2015-12-18
  • 打赏
  • 举报
回复
先监控一下哪条语句慢,再想办法
marsoft9_1 2015-12-18
  • 打赏
  • 举报
回复
引用 10 楼 yupeigu 的回复:
这个不太可能是null,因为计算是加密过的存储过程,在执行时 还是能查询到是 exec 存储过程 这样的语句的。 你这么试试; dbcc inputbuffer(会话id) 看看到底是什么语句把。
我执行dbcc inputbuffer(session_id) 后显示 EventType Parameters EventInfo Language Event 0 A380_ToDoList 这是什么意思哦??
marsoft9_1 2015-12-18
  • 打赏
  • 举报
回复
引用 16 楼 xiaoxiangqing 的回复:
先监控一下哪条语句慢,再想办法
如何监控呢兄弟? 查历史的,还是查当前的? 有没有可以用的sql语句查查?
薛定谔的DBA 2015-12-17
  • 打赏
  • 举报
回复
加密的存储过程是查看不到的,看看有什么加密的存储过程:
select routine_catalog,routine_schema,routine_name 
from information_schema.routines 
where routine_type = 'procedure' and routine_definition is null
语句逻辑读太多了,一定还有其他操作,主要先确定是什么操作再优化吧
LongRui888 2015-12-17
  • 打赏
  • 举报
回复
另外,最近我也遇到过类似的问题,报表一查询,cpu瞬间上升到100%,然后我在任务管理器中查看sqlservr.exe ,发现cpu使用率很高,基本上确定是sql server导致的。 为了让系统维持正常,你可以修改 系统参数 最大并行度: 右键sql server服务器,选择 属性,在左边点击 高级,然后在右边找到 最大并行度,修改为 2,这样,你的cpu使用率应该会马上下降。
LongRui888 2015-12-17
  • 打赏
  • 举报
回复
这个不太可能是null,因为计算是加密过的存储过程,在执行时 还是能查询到是 exec 存储过程 这样的语句的。 你这么试试; dbcc inputbuffer(会话id) 看看到底是什么语句把。
Yole 2015-12-17
  • 打赏
  • 举报
回复
引用 7 楼 marsoft9_1 的回复:
谢谢楼上的,这前20个是包含历史数据的吗
只是查看跟踪期间发生的语句中,cpu、duration等参数最高的。 http://blog.csdn.net/yole_grise/article/details/45745525 多跟踪几次,或者跟踪时间长一些(半天或一天)。
marsoft9_1 2015-12-17
  • 打赏
  • 举报
回复
引用 6 楼 u010192842 的回复:
我觉得您应该开启跟踪器,跟踪一段时间,然后另存为跟踪表;然后用语句查看。

--前20个累计最耗CPU的语句
select top 20 substring(textdata,1,200),count(*),SUM(cpu),SUM(cpu) / COUNT(*)  
from sql_test(nolock) 
group by substring(textdata,1,200) order by SUM(cpu) desc

--前20个最耗CPU的单个语句
select top 20 * from sql_test(nolock)   order by cpu desc

兄弟,能具体告诉下我怎么操作吗?
szlixiaolong 2015-12-17
  • 打赏
  • 举报
回复
你是使用什么软件,我们可以沟通。QQ:515991152
szlixiaolong 2015-12-17
  • 打赏
  • 举报
回复
先把存储过程解密,优化一下存储过程,可以处理好这个问题的。
marsoft9_1 2015-12-16
  • 打赏
  • 举报
回复
谢谢楼上的,这前20个是包含历史数据的吗
Yole 2015-12-16
  • 打赏
  • 举报
回复
我觉得您应该开启跟踪器,跟踪一段时间,然后另存为跟踪表;然后用语句查看。

--前20个累计最耗CPU的语句
select top 20 substring(textdata,1,200),count(*),SUM(cpu),SUM(cpu) / COUNT(*)  
from sql_test(nolock) 
group by substring(textdata,1,200) order by SUM(cpu) desc

--前20个最耗CPU的单个语句
select top 20 * from sql_test(nolock)   order by cpu desc

marsoft9_1 2015-12-15
  • 打赏
  • 举报
回复
求人帮帮我吧~~~
加载更多回复(4)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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