向 SQL 服务器添加 RAM 会降低性能

向 SQL 服务器添加 RAM 会降低性能

当前设置:

我们有一张非常大的表,其中包含一个 bigint pk 和一个 nvarchar(1025) 字段。唯一的索引是 PK。我们还有另一张表,它是第一个表的 bigint_fk,带有字符串字段的校验和。

create table BigStringTable (
  id bigint identity(1,1) not null,
  dataString nvarchar(1025) not null,
  primary key clustered (id));
);

create table BigStringTableHashes(
 id bigint  not null,
  dataStringHash int not null,
      CONSTRAINT [PK_dataStringHash] PRIMARY KEY NONCLUSTERED 
      (
      [claid] dataStringHash
       )
    );

因此你可能会查询类似这样的内容:

SELECT datastring FROM BigStringTable AS bst
JOIN BigStringTableHashes AS hashes ON bst.id = hashes.id
WHERE hashes.dataStringHash = checksum(<Whatever String>) AND bst.dataString = '<Whatever String>'

该表格是非常大的。

我们在亚马逊上有一台非常昂贵的服务器,配备 1.9 TB 的 RAM,用于运行所有这些功能。版本:

Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64)   Nov 30 2018 12:57:58   Copyright (C) 2017 Microsoft Corporation  Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2019 Datacenter 10.0 <X64> (Build 17763: ) (Hypervisor) 

但是,如果我们添加超过 900 GB 的 RAM,性能就会突然下降。上面的查询开始读取大量数据。我知道更改最大内存时会清除缓存,但除非我们降低最大 RAM 并重新启动,否则它永远不会恢复。

该服务器上没有其他内容。

据我所知,查询计划是相同的,但很难确认,因为我们不能频繁地将其置于这种不执行状态,从而导致客户中断。

我不明白的是添加 RAM 怎么会破坏性能。

答案1

也许尝试不要对事物运行某个函数,如果还没有的话,可以考虑通过有用的键进行分区。

解释一下什么?

希望这能有所帮助或激发灵感。顺便说一句:天哪。对于 AWS 来说这一定很贵。这真是大量的 RAM。

相关内容