To jest WIELKIE pytanie i uważam, że odpowiedzi są fascynujące. Skomentuję to jako Oracle DBA, a moje odpowiedzi są SZCZEGÓLNE dla bazy danych Oracle. Jest to poważny błąd, który wielu ludzi popełnia podczas pracy z Oracle. Nie jestem pewien, czy dotyczy to również innych aplikacji. To nie ma być poza tematem, ale ma być specjalistyczną odpowiedzią.
Kiedy dostrajasz wydajność za pomocą Oracle, naprawdę chcesz usunąć wąskie gardła. Chociaż większość z nas tego nie mówi, opiera się na teorii ograniczeń: https://en.wikipedia.org/wiki/Theory_of_constraints
Pamięć może nie być twoim wąskim gardłem. Oracle ma złożone mechanizmy zarządzania pamięcią, a samo powiększanie pamięci może faktycznie spowolnić proces, jeśli inne obszary znajdują się w wąskim gardle. Dam wam jeden przykład, który jest BARDZO powszechny.
Zapytania wydają się być powolne. Konsensus jest taki, że jeśli zwiększymy pamięć RAM, powinniśmy zwiększyć czas odpowiedzi na zapytania, ponieważ pamięć jest szybsza niż dysk. Cóż ... Tak Oracle zarządza pamięcią danych. Oracle ma różne lokalizacje pamięci przydzielone do określonych zadań. Możesz więc zwiększyć te wspomnienia. Obszar wykorzystywany na dane nazywa się „pamięcią podręczną bufora”. Jest to seria połączonych list (ich liczba zwykle rośnie z każdą wersją). Za każdym razem, gdy blok zostanie znaleziony na dysku podczas zapytania, uruchamiany jest na nim algorytm mieszania, aby określić, na której liście należy go umieścić. Miejsce umieszczenia na liście jest oparte na algorytmie liczenia dotknięć (wyjaśnione na stronie wsparcia Oracle, więc musisz zapłacić, aby go zdobyć ... to nie jest tak naprawdę ważne).
JEDNAK po uruchomieniu zapytania Oracle wyjmuje zatrzask w łańcuchu buforów, który wyszukujesz w tym czasie. ZATRZASK (uwaga: nie jest to blokada. Google „zatrzask”, jeśli nie znasz różnicy) blokuje wszystkie inne operacje w tym łańcuchu na czas odczytu. Więc blokuje odczytywanie ORAZ zapisuje (jest to zupełnie inne niż Oracle, twierdząc, że blokady nie blokują odczytów).
Jest to konieczne, ponieważ podczas odczytywania bloku w łańcuchu Oracle przesuwa go w zależności od częstotliwości „żądania”. Częściej żądane bloki są przenoszone na górę, a rzadziej żądane bloki są pozostawiane na dole i wyszarzone. Nie możesz mieć 2 sesji czytających połączonej listy i przesuwających się bloków, albo uderzysz wskaźniki wskazujące na nieistniejące lokalizacje.
Zwiększając rozmiar pamięci, zwiększasz rozmiar każdej połączonej listy. Zwiększa to czas potrzebny na odczytanie listy. Pojedyncze słabe zapytanie lub złożone zapytanie może wykonać dziesiątki tysięcy, a nawet miliony odczytów połączonych list. Każdy odczyt jest szybki, ale ich liczba prowadzi do zatrzaśnięć, które zablokują inne sesje. Oracle nazywa to „logicznym we / wy” (lub buforowaniem lub innymi rzeczami. To żargon jest specyficzny dla Oracle i może oznaczać coś innego w innych obszarach IT).
Tak więc, jeśli lista jest dłuższa i masz naprawdę zły SQL, to instrukcje SQL dłużej utrzymają swoje zatrzaski. Zwiększenie pamięci może czasami ZMNIEJSZYĆ wydajność. W większości przypadków tak się nie stanie. Ludzie wydają dużo pieniędzy i nie widzą żadnych korzyści. To powiedziawszy, są chwile, kiedy potrzebujesz więcej pamięci w buforze bufora, ale musisz poprawnie zidentyfikować wąskie gardło, aby wiedzieć, czy jest to właściwe. W tym poście nie mogę omówić, jak to przeanalizować. Zobacz fora DBA. Niektórzy dyskutują na ten temat. To raczej skomplikowane.
Czy ktoś ma konkretne przykłady z innymi programami, w których może się to zdarzyć? Istnieje wspaniała książka biznesowa zatytułowana „The Goal”, która omawia łagodzenie ograniczeń w fabryce. Ten proces jest bardzo podobny do tego, co robią Oracle DBA podczas oceny problemów z wydajnością. Często jest to standardowy odczyt w programach MBA. Czytanie zawodów informatycznych jest bardzo cenne.
https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt