最近公司的服务器总挂掉,加大线程池以及虚拟机内存都只能控制一段时间,后来总结出是数据库的问题,但不知道到底是那一条查询语句导致的,后来看公司大神操作,可以用
SELECT [Spid] = session_id ,
ecid ,
[Database] = DB_NAME(sp.dbid) ,
[User] = nt_username ,
[Status] = er.status ,
[Wait] = wait_type ,
[Individual Query] = SUBSTRING(qt.text,
er.statement_start_offset / 2,
( CASE WHEN er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text))
* 2
ELSE er.statement_end_offset
END - er.statement_start_offset )
/ 2) ,
[Parent Query] = qt.text ,
Program = program_name ,
hostname ,
nt_domain ,
start_time
FROM sys.dm_exec_requests er
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt
WHERE session_id > 50 -- Ignore system spids.
AND session_id NOT IN ( @@SPID ) -- Ignore this current statement.
ORDER BY 1 ,
2
查询出到底是那条语句占用大量的内存,数据库也设计不是特别合理,存了大约1年的数据,大约2000万条,索引设计也不是特别合理,我只好将数据拆分,3个月的数据存在一张表里,因为查询的时候时间是必须的,所以根据时间来判断是哪一张表就行了。