
Aktuelles Setup:
Wir haben eine sehr große Tabelle mit einem Bigint-PK und einem nvarchar(1025)-Feld. Der einzige Index ist der PK. Wir haben eine weitere Tabelle, die ein Bigint_fk zur ersten Tabelle mit einer Prüfsumme des String-Felds ist.
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
)
);
Ihre Abfrage könnte also etwa wie folgt lauten:
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>'
Der Tisch istsehrgroß.
Wir haben einen sehr teuren Server mit 1,9 TB RAM bei Amazon, auf dem das alles läuft. Version:
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)
Wenn wir jedoch mehr als 900 GB RAM hinzufügen, bricht die Leistung plötzlich zusammen. Und die obige Abfrage beginnt, riesige Datenmengen zu lesen. Ich weiß, dass beim Ändern des maximalen Speichers der Cache geleert wird, aber er erholt sich nie, bis wir den maximalen RAM verringern und neu starten.
Auf diesem Server befindet sich nichts anderes.
Soweit ich das beurteilen kann, sind die Abfragepläne dieselben, aber das lässt sich nur schwer bestätigen, da wir es nicht zu oft in diesen nicht funktionierenden Zustand versetzen können, was zu Ausfällen bei den Kunden führen würde.
Was ich nicht verstehe, ist, wie das Hinzufügen von RAM die Leistung beeinträchtigt.
Antwort1
Versuchen Sie vielleicht, keine Funktion auf die Dinge anzuwenden und ziehen Sie eine Partitionierung nach einem nützlichen Schlüssel in Betracht, falls Sie dies nicht bereits getan haben.
Was sagt eine Erklärung?
Hoffe, das hilft oder bringt Ideen. Übrigens: Meine Güte, das muss bei AWS teuer sein. Das ist eine wahnsinnige Menge an RAM.