AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 254158
Accepted
Frederik Vanderhaegen
Frederik Vanderhaegen
Asked: 2019-11-27 05:10:38 +0800 CST2019-11-27 05:10:38 +0800 CST 2019-11-27 05:10:38 +0800 CST

处理器队列长度,但 CPU 使用率不是很高

  • 772

我有一个运行 SQL Server 2016(4 个 vcore)的虚拟服务器,其中大多数时候处理器队列长度为 4(有时它会上升到 15),但 CPU 平均使用 25%。大约有3000批次/秒。

使用SQLSkills.com 上 Glenn Berry 的一篇文章中的查询,我发现有avg_task_count15 个和avg_runnable_task_count2 个(但不是经常):

SELECT AVG(current_tasks_count) AS [Avg Task Count], 
AVG(work_queue_count) AS [Avg Work Queue Count],
AVG(runnable_tasks_count) AS [Avg Runnable Task Count],
AVG(pending_disk_io_count) AS [Avg Pending DiskIO Count]
FROM sys.dm_os_schedulers WITH (NOLOCK)
WHERE scheduler_id < 255 OPTION (RECOMPILE);

说处理器队列长度和avg_task_count表示有很多请求并且服务器在处理它们时遇到问题是否正确?但我不明白的是为什么cpu使用率不高?

物理主机有 25% 的 CPU 使用率,没有内存预留,但主机上没有内存过度使用。

sql-server performance
  • 1 1 个回答
  • 1775 Views

1 个回答

  • Voted
  1. Best Answer
    Hannah Vernon
    2019-11-30T06:31:56+08:002019-11-30T06:31:56+08:00

    虽然下面的建议可能不会专门将 4-CPU VM 上的处理器队列长度减少到 4 以下,但它们将有助于提高整体性能,这大概就是您提出问题的原因。

    VMware 和 Microsoft 发布的最佳实践明确建议您应该为任何运行 SQL Server 的 VM 设置 CPU 预留和内存预留。

    有关如何使 SQL Server 以最佳性能可靠运行的所有详细信息,请参阅VMware在 vSphere 上构建 Microsoft SQL Server - 最佳实践指南。

    我知道您没有使用 Microsoft 的 Hyper-V 产品,但是对于可能会看到这篇文章的未来用户,请参阅使用 Hyper-V 动态内存运行 SQL Server 以获得他们的建议。

    从 SQL Server 中获得最佳性能的具体建议包括:

    1. 将“最大服务器内存”配置为对您的环境有意义的设置。 这篇文章可以帮助您确定应该设置什么。

    2. 确保将“最小服务器内存”设置为有意义的值。对于生产 SQL Server,“典型”是将其设置为与“最大服务器内存”相同的值,或者设置为比最大服务器内存低 1 或 2 GB 的值,以防 O/S 遇到极大的内存压力。

    3. 使用“Lock Pages in Memory”权限配置 SQL Server 使用的服务帐户。有关详细信息,请参阅此帖子。

    4. 确保您至少为 VM 配置了 2 个内核。您可能需要多于 2 个,但使用单核设置 VM 会导致灾难。对于生产 SQL Server 安装,我建议至少8 个内核。

    5. 在 Hyper-V 中,将 VM 配置为支持 NUMA,并禁用“动态内存”。许多服务器人员会拒绝这个建议,因为它减少了可以在任何单个主机服务器上运行的 VM 数量;但是,对于始终需要大量内存的任何服务(例如数据库管理系统)而言,这对于良好的性能至关重要。在 VMWare 中,为 VM 配置与分配给 VM 的内存总量相匹配的内存预留。这可以防止 VMware气球驱动程序消耗 VM 中的内存,这反过来会减少 SQL Server 可用的内存,从而降低性能。

    6. 确保使用高队列 SCSI 接口和网络接口配置 VM - 阅读上面链接的最佳实践文档以获取具体建议。

    正如@SqlWorldWide 在对您的问题的评论中提到的那样,您应该看看这个。取自该新闻组的帖子:

    首先,对于 perfmon 中的处理器队列长度计数器,低于 10 是正常的(根据 perfmon 的文档)

    其次,如果您有多个处理器,则必须将队列长度除以处理器的数量。因为在 SMP 系统中也只有一个调度器。

    最后,队列长度是一个瞬时计数器。它显示了现在就绪线程的数量,这是一种用词不当,因为恕我直言,它只考虑最高优先级的队列(请注意,每个优先级都有一个队列)。这些线程最终会阻塞在 I/O 或同步机制之类的东西上。

    现在 CPU 使用计数器不同了:它是通过测量空闲线程在采样 间隔内处于活动状态的持续时间来计算的,并且从间隔持续时间中减去该时间空闲线程只有在没有更高优先级的就绪线程时才会运行。这本质上是任何抢占式系统的基本假设。我可以有单线程(除了空闲线程),但如果它运行这样的代码:

    while ( true );

    CPU 使用计数器将显示 100%。请注意,在这种假设情况下,队列长度为 1 :o)

    • 2

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve