首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别哪些函数和sql过程导致主机服务器上的cpu使用率高。

如何识别哪些函数和sql过程导致主机服务器上的cpu使用率高。
EN

Stack Overflow用户
提问于 2016-01-28 13:06:23
回答 5查看 1.6K关注 0票数 4

我有一个c#/ASP.NETWeb应用程序(非mvc),它的一些页面使用存储过程和视图多次访问sql数据库。这个应用程序现在有5-10个用户,主机已经告诉我,它导致了服务器上的95%+ cpu的使用。

我的问题是,如何识别哪些函数/过程/线程导致了高cpu的使用,从而使我能够缓存或优化它们?注意,主机不允许我访问任何服务器日志、统计数据或服务器系统数据库表,只有我的应用程序的数据库,这让我非常头疼!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-01-28 13:48:19

您可以使用SqlProfiler跟踪任何SQL过程、函数等的性能和行为。

您可以检查这个:SqlProfiler,因为它是一个非常有用的工具,在增强SQL存储过程性能方面确实对我有很大帮助。

您将运行您的应用程序,但在此之前,将其配置为只侦听所需的事件,如“过程完成”,并选择您的筛选条件,如数据库或执行用户,然后当您在与数据库相关的应用程序中执行任何操作时,分析器将跟踪并分析它。

您可以一步一步地检查它的使用情况这里

关于与数据访问无关的C#函数,您可以使用秒表类来衡量它的性能,以计算它的执行时间:

代码语言:javascript
复制
var watch = Stopwatch.StartNew();
// the code that you want to measure comes here
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;

或者你可以在Visual 2015中分析调试时的性能

票数 3
EN

Stack Overflow用户

发布于 2016-03-04 03:36:45

您需要分别分析.NET代码和SQL。我将处理SQL部分。

下面是一个修改过的皮纳尔·戴夫的问题版本,它使用sys.dm_exec_query_stats查找最近昂贵的查询。我已经调整了它,包括热路径,以显示瓶颈。查询计划将帮助您进一步分解它。

代码语言:javascript
复制
SELECT TOP 50
  st.text AS [SQL Definition]
, SUBSTRING(
    st.text,
    qs.statement_start_offset / 2 + 1,
    ( CASE
        WHEN qs.statement_end_offset = -1 
        THEN LEN(CONVERT(NVARCHAR(MAX), st.text)) * 2 
        ELSE qs.statement_end_offset
      END - qs.statement_start_offset ) / 2
  ) AS [Hot Path]
, qs.execution_count AS [Execution Count]
, qs.total_worker_time / 1000000 AS [Total CPU (s)]
, (qs.total_worker_time / $1000000) / qs.execution_count AS [Average CPU (s)]
, qs.total_elapsed_time / 1000000 AS [Total Time (s)]
, qs.total_logical_reads / qs.execution_count AS [Average Logical Reads]
, qs.total_logical_writes / qs.execution_count AS [Average Logical Writes]
, qs.total_physical_reads / qs.execution_count AS [Average Physical Reads]
, ISNULL(qp.query_plan, '') AS [Query Plan]
  FROM sys.dm_exec_query_stats AS qs WITH (NOLOCK)
 CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
 CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
 ORDER BY [Total CPU (s)] DESC

这显然只是一个起点,但是如果您的问题是由于查询效率低下或缺少索引所致,那么它将为您指明正确的方向。

票数 1
EN

Stack Overflow用户

发布于 2016-01-28 13:28:35

在本地部署应用程序并进行诊断。

如果您的应用程序可以阻塞服务器,它很可能也会杀死您的机器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35062357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档