这个问题基本上是这个问题的后续问题:
SQL Server 2016 的奇怪的性能问题
我们现在使用这个系统提高了效率。虽然自从我上一篇文章以来,另一个应用程序数据库被添加到这个 SQL Server 中。
这些是系统统计信息:
我们的系统现在存在重大的性能问题。非常高的 CPU 使用率和线程数:

等待活动监视器的统计数据(我知道它不是很可靠)
sp_blitzfirst 的结果:
sp_configure 的结果:
高级服务器设置(不幸的是只有德语)
MAXDOP …
几天前,我将 RDS 实例 (db.t2.medium) 从 Postgres 9.5 升级到 9.6。升级后,CPU 使用率一直几乎是 100%。这导致我的申请失败。假设问题出在9.6版本上,我又升级到10.6。它变得更好,但仍然比原始 9.5 版本的 CPU 使用率高得多。
我在升级过程中没有更改应用程序代码。如何检查 CPU 使用率增加的原因并可能修复它?
我有一个支持 .NET Core API 应用程序的 Azure SQL 数据库。浏览 Azure 门户中的性能概览报告表明,我的数据库服务器上的大部分负载(DTU 使用情况)来自 CPU,特别是一个查询:
正如我们所见,查询 3780 负责几乎所有服务器上的 CPU 使用率。
这在某种程度上是有道理的,因为查询 3780(见下文)基本上是整个应用程序的关键,并且经常被用户调用。这也是一个相当复杂的查询,需要许多连接才能获得所需的正确数据集。查询来自一个最终看起来像这样的 sproc:
-- @UserId UNIQUEIDENTIFIER
SELECT
C.[Id],
C.[UserId],
C.[OrganizationId],
C.[Type],
C.[Data],
C.[Attachments],
C.[CreationDate],
C.[RevisionDate],
CASE
WHEN
@UserId IS NULL
OR C.[Favorites] IS NULL
OR JSON_VALUE(C.[Favorites], CONCAT('$."', @UserId, '"')) IS NULL
THEN 0
ELSE 1
END [Favorite],
CASE
WHEN
@UserId IS NULL
OR C.[Folders] IS NULL
THEN NULL
ELSE TRY_CONVERT(UNIQUEIDENTIFIER, JSON_VALUE(C.[Folders], CONCAT('$."', @UserId, '"')))
END [FolderId],
CASE
WHEN C.[UserId] IS NOT NULL OR …Run Code Online (Sandbox Code Playgroud) performance sql-server execution-plan azure-sql-database cpu query-performance
我正在考虑以下场景:
*----------- Physical Processor 0
-*---------- Physical Processor 1
--*--------- Physical Processor 2
---*-------- Physical Processor 3
----*------- Physical Processor 4
-----*------ Physical Processor 5
------*----- Physical Processor 6
-------*---- Physical Processor 7
--------*--- Physical Processor 8
---------*-- Physical Processor 9
----------*- Physical Processor 10
-----------* Physical Processor 11
Logical Processor to …Run Code Online (Sandbox Code Playgroud) I've been running a function on the database that is going into each table, ALTER COLUMN on all columns of a certain data type, and CAST to remove trailing zeros. About 115 tables varying from a few thousand records to a few hundred thousand records. It has been running for almost 24 hours and my approximate calculation until time of completion is about 58 hours.
I have htop up and checking on it regularly.
I should mention this is a …
我正在使用 Postgres 容器来运行一些小型的非关键应用程序和站点。它已经稳定了一段时间,但是现在容器在运行了很短的一段时间后开始消耗一些严重的 CPU。我已经删除了所有其他使用 Postgres 容器的容器,即使在启动一个新实例后,CPU 使用率仍然过高。在我的主机 ( docker stats) 中,我看到:
CONTAINER ID NAME
CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS cd553249727d data_postgresql.1.ft2gof5jci25xs5w5uqw6eezi
814.52% 22.11MiB / 46.95GiB 0.05% 129kB / 116kB 0B / 692kB 23
Run Code Online (Sandbox Code Playgroud)
还有这个(top):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28923 70 20 0 633580 19664 488 S 696.7 0.0 2408:51 Dp2N
Run Code Online (Sandbox Code Playgroud)
在容器 ( top) 中,我看到:
Mem: 42042244K used, 7183656K free, 3622600K …Run Code Online (Sandbox Code Playgroud) 当我从Glenn Berry运行以下查询时
-- Hardware information from SQL Server 2016 (Query 18) (Hardware Info)
SELECT cpu_count AS [Logical CPU Count], scheduler_count, hyperthread_ratio AS [Hyperthread Ratio],
cpu_count/hyperthread_ratio AS [Physical CPU Count],
physical_memory_kb/1024 AS [Physical Memory (MB)], committed_kb/1024 AS [Committed Memory (MB)],
committed_target_kb/1024 AS [Committed Target Memory (MB)],
max_workers_count AS [Max Workers Count], affinity_type_desc AS [Affinity Type],
sqlserver_start_time AS [SQL Server Start Time], virtual_machine_type_desc AS [Virtual Machine Type],
softnuma_configuration_desc AS [Soft NUMA Configuration],
sql_memory_model_desc -- New in SQL Server 2016 SP1 …Run Code Online (Sandbox Code Playgroud) 我们有一个带有 16 个 CPU 内核的 SQL Server 2012 实例。当查看 sys.dm_os_schedulers 时,我们看到预期的 16 行是“VISIBLE ONLINE”,每个核心一个。错误日志在启动时显示以下标准条目:
SQL Server 检测到 2 个插槽,每个插槽 8 个内核,每个插槽 8 个逻辑处理器,总共 16 个逻辑处理器;使用基于 SQL Server 许可的 16 个逻辑处理器。这是一条情报信息; 无需用户操作。
然而 sys.dm_os_schedulers 也包含大约。1200 行是“HIDDEN ONLINE”。
服务器未使用可用性组或镜像,并且未启用资源调控器。
问题是每个隐藏的调度器似乎都被分配了一个工作线程,所以我们的监控软件不断提醒服务器线程用完,即使查询运行得非常愉快并且似乎对性能没有任何实际影响.
我知道隐藏的调度程序只对内部系统进程可用,但你知道是什么导致显示这么多吗?
CPU 利用率会定期达到 100%,当我检查 SP_who2 时,它显示大约 20000 个会话,其中大多数都在睡眠(也在使用 CPU)。
我认为 CPU 负载与睡眠会话有关
应用程序名称显示为 Microsoft JDBC。
大多数会话都将“SOS_SCHEDULER_YIELD”显示为 last_wait_type。重新启动 Windows Server 后,CPU 利用率已下降,但会话计数正在增加。
服务器有 32 个内核。
应用程序团队告诉他们正在使用一些“连接池”进行连接管理。
如何调查或解决睡眠会话的数量?
performance sql-server sql-server-2014 cpu performance-tuning
我有一台带有 40 个 CPU(超线程)和 2 个 NUMA 节点的物理服务器。在这台服务器上,我安装了 20 个 SQL Server 实例,我需要确保每个实例都分配了一些专用的 CPU。
问题是有时一个或多个实例正在使用所有 CPU,然后大约 4 或 5 个实例因 CPU 资源不足而出现故障。
在所有实例之间分配 CPU 以便每个实例至少有一些 CPU 的最佳方法是什么?
cpu ×10
sql-server ×7
performance ×3
postgresql ×3
amazon-rds ×1
centos ×1
docker ×1
memory ×1
optimization ×1
powershell ×1
vmware ×1