解决数据库性能问题

时间:2011-04-07 20:46:39

标签: sql-server sql-server-2005 database-connection

我遇到了数据库的问题,这是我每天都在处理的一个场景:通常应用程序可以处理流量等,但是我每天都会处理性能问题。当它发生存储过程时,它们的执行时间从200%-1000%增加 我有一个,在这里描述:https://stackoverflow.com/questions/5585726/query-with-large-table-joins-optimization-techniques。通常它的执行大约需要6-8秒(我已经从开始时的20秒cos优化了它,我认为程序是罪魁祸首),但是当某事正在发生时,该程序甚至可以执行60秒。
今天我意识到应用程序中有更多的地方可以冻结,而且我不小心意识到,SQL Management Studio发出的样本查询通常在眨眼之间执行,当某事时开始变慢发生在数据库服务器上。好消息是,由于这一发现,我删除了应用程序和网络服务器作为瓶颈 它的数据库服务器无法处理请求。我想知道有没有办法对实时数据库进行故障排除并发现慢速查询或其他操作,如重新索引索引,统计数据,内存问题等,或者可能导致性能下降的其他问题?

谢谢,Pawel

2 个答案:

答案 0 :(得分:2)

这是我经常使用的查询。

它显示当前正在执行的代码等待信息阻止信息,正在运行的spid,运行的时间,当前命令是什么,查询文本是什么,以及xml查询计划,如果缓存中有一个:

SELECT 
d2.wait_type,
d1.session_id,
d2.blocking_session_id, 
d2.status,
d1.login_name,
d2.start_time, 
d2.command,
d3.[text] as Batch, 
SUBSTRING(d3.[text], (d2.statement_start_offset/2) + 1,
    ((CASE statement_end_offset 
        WHEN -1 THEN DATALENGTH(d3.text)
        ELSE d2.statement_end_offset END 
            - d2.statement_start_offset)/2) + 1) AS Current_Statement,
qp.query_plan,
d1.login_time, 
d2.wait_time,
d2.cpu_time, 
d1.memory_usage,
d2.total_elapsed_time, 
d2.reads,d2.writes,
d2.logical_reads
FROM sys.dm_exec_sessions d1
JOIN sys.dm_exec_requests d2 ON d1.session_id=d2.session_id
CROSS APPLY sys.dm_exec_sql_text(d2.sql_handle) d3 
CROSS APPLY sys.dm_exec_query_plan(d2.plan_handle) AS qp
WHERE d1.session_id <> @@SPID

答案 1 :(得分:1)

在SSMS中,如果右键单击服务器名称(而不是数据库名称),它将显示一个活动监视器菜单,单击该菜单,这将是一个很好的起点。