sqlsever2012 CPU高 内存低

weixin_37714971 2018-12-24 05:09:03
日常业务,cpu 60-70% 内存占用11%
...全文
558 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-12-29
  • 打赏
  • 举报
回复
引用 8 楼 morliz子轩 的回复:
这有什么问题不?
一般最好不要在别人的贴子里问问题, 不太礼貌。 再者整个过程也描述不太清楚, 建议你另开一贴, 描述完整的过程再说吧。
morliz子轩 2018-12-29
  • 打赏
  • 举报
回复
引用 3 楼 吉普赛的歌 的回复:
应该是没有优化导致, 总体的压力应该是不大的。
SELECT TOP 10 OBJECT_NAME(qt.objectid, qt.dbId)  AS procName,
       DB_NAME(qt.dbId)                   AS [db_name],
       qt.text                            AS SQL_Full,
       SUBSTRING(
           qt.text,
           (qs.statement_start_offset / 2) + 1,
           (
               (
                   CASE statement_end_offset
                        WHEN -1 THEN DATALENGTH(qt.text)
                        ELSE qs.statement_end_offset
                   END 
                   - qs.statement_start_offset
               ) / 2
           ) + 1
       )                                  AS SQL_Part --统计对应的部分语句
       ,
       qs.creation_time,
       qs.last_execution_time,
       qs.execution_count,
       qs.last_elapsed_time / 1000000     AS lastElapsedSeconds,
       qs.last_worker_time / 1000000      AS lastCpuSeconds,
       CAST(
           qs.total_elapsed_time / 1000000.0 / (
               CASE 
                    WHEN qs.execution_count = 0 THEN -1
                    ELSE qs.execution_count
               END
           ) AS DECIMAL(28, 2)
       )                                  AS avgDurationSeconds,
       CAST(qs.last_logical_reads AS BIGINT) * 1.0 / (1024 * 1024) * 8060 AS 
       lastLogicReadsMB,
       qs.last_logical_reads,
       qs.plan_handle
FROM   sys.dm_exec_query_stats qs
       CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS p
WHERE  qs.last_execution_time >= CONVERT(CHAR(10),GETDATE(),120)+' 08:00'	--今天8点之后的慢SQL
       AND qs.last_elapsed_time >= 3 * 1000 * 1000							--只取执行时间大于 3 秒的记录
       AND qt.[text] NOT LIKE '%Proc_DBA%'
ORDER BY
       qs.last_worker_time DESC
上面的sql, 在服务器执行, 看下结果。
SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 (6 行受影响) 表 'Worktable'。扫描计数 0,逻辑读取 9 次,物理读取 0 次,预读 0 次,lob 逻辑读取 4478 次,lob 物理读取 0 次,lob 预读 450 次。 SQL Server 执行时间: CPU 时间 = 578 毫秒,占用时间 = 608 毫秒。 SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 这有什么问题不?
morliz子轩 2018-12-29
  • 打赏
  • 举报
回复
引用 9 楼 吉普赛的歌 的回复:
一般最好不要在别人的贴子里问问题, 不太礼貌。 再者整个过程也描述不太清楚, 建议你另开一贴, 描述完整的过程再说吧。
好,我不问你就是。你可以不回答。以后我也不会再问你。。。您放心。
jackyleo119 2018-12-28
  • 打赏
  • 举报
回复
俺的sql也是
xiaoxiangqing 2018-12-28
  • 打赏
  • 举报
回复
看执行计划,看哪个语句占用过高
Q315054403 2018-12-27
  • 打赏
  • 举报
回复
若磁盘读写高的话,可能限制了最大内存使用 没法猜到原因
薛定谔的DBA 2018-12-25
  • 打赏
  • 举报
回复
计算太多,或者小操作频繁,要么就是cpu性能不好。
吉普赛的歌 2018-12-24
  • 打赏
  • 举报
回复
应该是没有优化导致, 总体的压力应该是不大的。
SELECT TOP 10 OBJECT_NAME(qt.objectid, qt.dbId)  AS procName,
       DB_NAME(qt.dbId)                   AS [db_name],
       qt.text                            AS SQL_Full,
       SUBSTRING(
           qt.text,
           (qs.statement_start_offset / 2) + 1,
           (
               (
                   CASE statement_end_offset
                        WHEN -1 THEN DATALENGTH(qt.text)
                        ELSE qs.statement_end_offset
                   END 
                   - qs.statement_start_offset
               ) / 2
           ) + 1
       )                                  AS SQL_Part --统计对应的部分语句
       ,
       qs.creation_time,
       qs.last_execution_time,
       qs.execution_count,
       qs.last_elapsed_time / 1000000     AS lastElapsedSeconds,
       qs.last_worker_time / 1000000      AS lastCpuSeconds,
       CAST(
           qs.total_elapsed_time / 1000000.0 / (
               CASE 
                    WHEN qs.execution_count = 0 THEN -1
                    ELSE qs.execution_count
               END
           ) AS DECIMAL(28, 2)
       )                                  AS avgDurationSeconds,
       CAST(qs.last_logical_reads AS BIGINT) * 1.0 / (1024 * 1024) * 8060 AS 
       lastLogicReadsMB,
       qs.last_logical_reads,
       qs.plan_handle
FROM   sys.dm_exec_query_stats qs
       CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS p
WHERE  qs.last_execution_time >= CONVERT(CHAR(10),GETDATE(),120)+' 08:00'	--今天8点之后的慢SQL
       AND qs.last_elapsed_time >= 3 * 1000 * 1000							--只取执行时间大于 3 秒的记录
       AND qt.[text] NOT LIKE '%Proc_DBA%'
ORDER BY
       qs.last_worker_time DESC
上面的sql, 在服务器执行, 看下结果。
Dear SQL(燊) 2018-12-24
  • 打赏
  • 举报
回复
cpu 60-70% 是平均值?还是峰值?
Dear SQL(燊) 2018-12-24
  • 打赏
  • 举报
回复
想问什么问题?

22,210

社区成员

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

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