
Текущая настройка:
У нас есть очень большая таблица, в которой есть поле bigint pk и поле nvarchar(1025). Единственный индекс — это PK. У нас есть еще одна таблица, которая является bigint_fk для первой таблицы с контрольной суммой поля string.
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 ТБ ОЗУ на Amazon, на котором все это работает. Версия:
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 ГБ оперативной памяти, производительность внезапно падает до нуля. И запрос выше начинает считывать огромные объемы данных. Я знаю, что при изменении максимального объема памяти кэш очищается, но он никогда не восстанавливается, пока мы не уменьшим максимальный объем оперативной памяти и не перезагрузимся.
На этом сервере больше ничего нет.
Насколько я могу судить, планы запросов те же самые, но подтвердить это сложно, поскольку мы не можем слишком часто переводить систему в нерабочее состояние, создавая простои для клиентов.
Чего я не понимаю, так это как добавление оперативной памяти ухудшает производительность.
решение1
Попробуйте, пожалуйста, не запускать функцию для чего-либо и рассмотрите возможность разбиения по полезному ключу, если вы еще этого не сделали.
Что говорится в объяснении?
Надеюсь, это поможет или подтолкнет к идеям. Кстати: Боже мой. Это должно быть дорого с AWS. Это безумный объем оперативной памяти.