У меня два физических сервера баз данных (оба Windows Server 2016):
тестовый сервер (5 лет): DELL PowerEdge R730xd, 1x Intel (R) Xeon (R) CPU E5-2637 v4 @ 3.50GHz (4C / 8T), 192 GB RAM (12x 16GB PC4-17000 - 36ASF2G72PZ-2G1A2) - один узел NUMA
производственный сервер (полугодовалый): DELL PowerEdge R740xd, 2x Intel (R) Xeon (R) Gold 6128 CPU @ 3.40GHz (6C / 12T), 512 GB RAM (16x 32GB PC4-21300 - 36ASF4G72PZ-2G6E1) - два NUMA узлы (256 ГБ ОЗУ на каждом узле NUMA)
Для обоих серверов в BIOS выбран профиль производительности.
Я администратор базы данных Oracle, и я заметил, что мой тестовый сервер быстрее выполняет некоторые запросы, которые используют «только» оперативную память, а не систему хранения. Я очень разочарован, потому что мой 5-летний тестовый сервер быстрее нового. Я думаю, что моя проблема связана с NUMA, потому что тестовый сервер представляет собой систему с одним узлом NUMA, а производственный процесс имеет два узла NUMA.
Я провел много тестов в Oracle, но я также сделал один простой тест вне Oracle, чтобы подтвердить свое предложение. Один простой скрипт PHP, который выделяет в цикле примерно 2 ГБ памяти и снова освобождает ее:
<?php
for($n=0;$n<=10000;$n++){
$start = microtime(true);
for ($i = 0; $i < 50000000; ++$i) {
$arr[] = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
}
//echo (memory_get_usage()/1024/1024).PHP_EOL;
echo (microtime(true) - $start).PHP_EOL;
unset($arr);
}
На моем тестовом сервере одна итерация выполняется около 1,7 секунды. В моем производстве от 2,0 до 2,6 секунды, если я установил привязку процессора к узлу NUMA 1, это будет 1,9 секунды.
Я не специалист по оборудованию, не могли бы вы помочь мне настроить подсистему памяти? Мне приходит в голову - настройки BIOS, чередование узлов, настройка Windows и т. Д. Я не могу поверить, что PC4-21300 медленнее, чем PC4-17000 - может кто-нибудь объяснить мне такое поведение? Я могу предоставить вам дополнительную информацию, если хотите - мои текущие настройки BIOS и т. Д.