Это БОЛЬШОЙ вопрос, и я нахожу ответы увлекательными. Я собираюсь прокомментировать это как администратор базы данных Oracle, и мои ответы являются конкретными для базы данных Oracle. Это большая ошибка, которую делают многие люди при работе с Oracle. Я не уверен, относится ли это и к другим приложениям. Это не предназначено, чтобы быть не по теме, но предназначено как специализированный ответ.
Когда вы настраиваете производительность с Oracle, вы действительно пытаетесь устранить узкие места. Хотя большинство из нас не говорят этого, оно основано на теории ограничений: https://en.wikipedia.org/wiki/Theory_of_constraints
Память не может быть вашим узким местом. У Oracle есть сложные механизмы для управления памятью, и простое увеличение памяти может на самом деле замедлить ситуацию, если в других областях есть узкое место. Позвольте мне привести один пример, который ОЧЕНЬ распространен.
Запросы кажутся медленными. Консенсус в том, что если мы увеличим ОЗУ, нам следует увеличить время ответа на запросы, поскольку память быстрее, чем диск. Хорошо ... Вот как Oracle обрабатывает управление памятью для данных. Oracle имеет множество областей памяти, которые выделены для определенных обязанностей. Таким образом, вы можете увеличить эти воспоминания. Область, используемая для данных, называется «буферным кешем». Это серия связанных списков (количество их увеличивается с каждой версией). Каждый раз, когда блок обнаруживается на диске во время запроса, на нем запускается алгоритм хеширования, чтобы определить, в какой список его вставить. Где разместить его в списке, основывается на алгоритме подсчета касаний (объяснено на сайте поддержки Oracle, так что за это надо платить ... это не особо важно).
ОДНАКО, когда вы запускаете запрос, Oracle снимает блокировку в цепочке буферов, которую вы ищете в данный момент. Этот LATCH (примечание: это не блокировка. Google "latch", если вы не знаете разницу) блокирует все другие операции в этой цепочке на время вашего чтения. Поэтому он блокирует операции чтения и записи (это совершенно отличается от того, что Oracle утверждает, что блокировки не блокируют операции чтения).
Это необходимо, потому что когда вы читаете блок в цепочке, Oracle перемещает его в зависимости от того, как часто он «запрашивается». Более часто запрашиваемые блоки перемещаются вверх, а менее часто запрашиваемые блоки остаются внизу и стареют. У вас не может быть 2 сеансов, читающих связанный список и перемещающих блоки, или вы попадете в указатели, которые указывают на несуществующие местоположения.
Когда вы увеличиваете размер памяти, вы увеличиваете размер каждого связанного списка. Это увеличивает время, необходимое для чтения списка. Один плохой запрос или сложный запрос может сделать десятки тысяч или даже миллионы прочитанных связанных списков. Каждое чтение выполняется быстро, но их количество приводит к выполнению защелок, которые блокируют другие сеансы. Oracle называет это «логическим IO» (или буфером get, или чем-то другим. Этот жаргон специфичен для Oracle и может означать что-то другое в других частях ИТ).
Таким образом, если список длиннее и у вас действительно плохой SQL, операторы SQL будут дольше удерживать свои защелки. Увеличение памяти может иногда УМЕНЬШИТЬ производительность. В большинстве случаев этого не произойдет. Люди будут тратить много денег и не видят никакой выгоды. При этом бывают случаи, когда вам требуется больше памяти в буферном кеше, но вы должны правильно определить узкое место, чтобы знать, подходит ли это. Я не могу обсуждать, как проанализировать это в этом посте. Смотрите форумы DBA. Некоторые люди обсуждают это там. Это довольно сложно.
У кого-нибудь есть конкретные примеры с другими частями программного обеспечения, где это может произойти? Существует потрясающая бизнес-книга под названием «Цель», в которой обсуждаются способы устранения ограничений на фабрике. Этот процесс очень похож на то, что делают администраторы Oracle при оценке проблем с производительностью. Это часто стандартное чтение в программах MBA. Это очень ценно для чтения для ИТ-профессий.
https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt