Це ВЕЛИКЕ запитання, і я вважаю, що відповіді є захоплюючими. Я буду коментувати це як DBA Oracle, і мої відповіді є СПЕЦИФІЧНИми для бази даних Oracle. Це основна помилка, яку багато людей роблять під час роботи з Oracle. Я не впевнений, чи це стосується і інших програм. Це не повинно бути поза темою, а означає спеціалізовану відповідь.
Коли ви налаштовуєте продуктивність за допомогою Oracle, ви дійсно прагнете усунути вузькі місця. Хоча більшість із нас цього не каже, вона базується на Теорії обмежень: https://en.wikipedia.org/wiki/Theory_of_constraints
Пам'ять може не бути вашим вузьким місцем. Oracle має складні механізми управління пам’яттю, а просто збільшення пам’яті насправді може уповільнити ситуацію, якщо в інших місцях є вузьке місце. Дозвольте навести один приклад, який ДУЖЕ поширений.
Запитання здаються повільними. Консенсус полягає в тому, що якщо ми збільшуємо оперативну пам’ять, ми повинні збільшити час відповіді на запити, оскільки пам'ять швидше, ніж диск. Ну ... Ось як Oracle обробляє управління пам'яттю для даних. Oracle має різноманітні місця пам'яті, які розподіляються під конкретні обов'язки. Так ви зможете збільшити ці спогади. Область, яка використовується для даних, називається "кеш-пам'яттю". Це низка пов’язаних списків (кількість їх, як правило, збільшується з кожною версією). Кожен раз, коли під час запиту на диску виявляється блок на диску, на ньому запускається хеш-алгоритм, щоб визначити, у який список його слід вставити. Де розмістити його в списку, заснований на алгоритмі підрахунку дотиків (пояснено на веб-сайті підтримки Oracle, тому вам доведеться платити, щоб отримати його ... це не дуже важливо).
ЗАРАЗ, коли ви запускаєте запит, Oracle виймає засувку в ланцюзі буфера, яку ви шукаєте в той час. Цей затвор (зауважте: це не замок. Google "фіксатор", якщо ви не знаєте різниці) блокує всі інші операції в цьому ланцюзі протягом тривалості вашого читання. Таким чином, він блокує читання AND записи (це зовсім інше, ніж Oracle, який стверджує, що блокування не блокує читання).
Це необхідно, оскільки, читаючи блок у ланцюжку, Oracle переміщує його навколо того, як часто його "запитують". Більш часто запитувані блоки переміщуються до верху, а рідше запитувані блоки залишаються внизу та старіють. Ви не можете провести 2 сеанси, читаючи пов'язаний список і переміщуючи блоки навколо, або ви натиснете на покажчики, які вказують на неіснуючі місця.
Коли ви збільшуєте об'єм пам'яті, ви збільшуєте розмір кожного пов'язаного списку. Це збільшує час, необхідний для читання списку. Один поганий запит або складний запит можуть робити десятки тисяч або навіть мільйони зчитування зв'язаних списків. Кожне зчитування швидко, але кількість їх призводить до знятих засувок, і вони блокують інші сеанси. Oracle називає це "логічним IO" (або отриманням буфера чи іншим матеріалом. Цей мов є специфічним для Oracle і може означати щось інше в інших частинах ІТ).
Отже, якщо список довший і у вас дійсно поганий SQL, тоді оператори SQL будуть тримати свої засувки довше. Збільшення пам’яті може час від часу знижувати продуктивність. Здебільшого цього не відбудеться. Люди витратять багато грошей і не бачать користі. Незважаючи на це, бувають випадки, коли в кеш-пам'яті буфера потрібно більше пам’яті, але ви повинні правильно визначити вузьке місце, щоб знати, чи підходить це. Я не можу обговорити, як проаналізувати це в цій публікації. Дивіться форуми DBA. Деякі люди там обговорюють це. Він досить складний.
Хтось має конкретні приклади з іншими програмами, де це може статися? Існує приголомшлива ділова книга під назвою «Мета», в якій обговорюється можливість зменшення обмежень на заводі. Цей процес дуже схожий на те, що роблять Oracle DBA при оцінці проблем продуктивності. Це часто стандартне читання в програмах MBA. Це дуже цінно читати для ІТ-професій.
https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt