Ludzie powtarzają mi, że aby poprawić wydajność serwera SQL, kup najszybsze dyski twarde z RAID 5 itp.
Pomyślałem więc, że zamiast wydawać wszystkie pieniądze na RAID 5 i superduperowalne szybkie dyski twarde (które nie są tanie), dlaczego po prostu nie dostać ton pamięci RAM? Wiemy, że serwer SQL ładuje bazę danych do pamięci. Pamięć jest znacznie szybsza niż jakiekolwiek dyski twarde.
Dlaczego nie wpakować na serwer 100 GB pamięci RAM? Następnie użyj zwykłego dysku twardego SCSI z RAID 1. Czy nie byłoby to o wiele tańsze i szybsze?
performance
raid
sql
memory
hard-drive
użytkownik1034912
źródło
źródło
Odpowiedzi:
Twoja analiza jest w porządku - do tego stopnia - że absolutnie przyspieszy. Nadal jednak musisz wziąć pod uwagę kilka innych problemów:
Nie wszyscy mogą sobie pozwolić na wystarczającą pamięć; gdy masz wiele terabajtów danych, musisz na jakiś czas umieścić je na dysku. Jeśli nie masz dużo danych, wszystko jest wystarczająco szybkie.
Wydajność zapisu w bazie danych będzie nadal ograniczona przez dyski, abyś mógł dotrzymać obietnicy, że dane zostały faktycznie zapisane.
Jeśli masz mały zestaw danych lub nie musisz go przechowywać na dysku, nie ma nic złego w tym pomyśle. Narzędzia takie jak VoltDB działają w celu zmniejszenia kosztów ogólnych, które zostały wykonane przez starsze założenia w implementacjach RDBMS, które ograniczają czystą wydajność w pamięci.
(Nawiasem mówiąc, ludzie mówiąc ci, aby używać RAID-5 do wydajności bazy danych, prawdopodobnie nie są świetnymi ludźmi do słuchania na ten temat, ponieważ prawie nigdy nie jest to najlepszy wybór - ma dobrą wydajność odczytu, ale słabą wydajność zapisu i pisze są prawie zawsze ograniczeniem produkcyjnym - ponieważ można wrzucić pamięć RAM do pamięci podręcznej, aby rozwiązać większość problemów z wydajnością po stronie odczytu).
źródło
Wersja skrócona: rozważ rozmiar zestawu roboczego. Wersja długa: jak duże są twoje dane? Jeśli może zmieścić się w pamięci nowoczesnego serwera, tak, masz absolutną rację. Niestety, największy Xeon może teraz zająć 2 TB pamięci RAM i nie jest to już tak duży zestaw danych. Jeśli nie możesz kupić maszyny wystarczająco dużej, aby pomieścić cały zestaw roboczy w pamięci RAM, musisz rozwiązać problemy z mózgiem, a nie z portfelem.
źródło
Jeśli chcesz prędkości:
Wykonaj te kroki, a SQL Server poleci.
Następnie, jeśli chcesz, dodaj więcej pamięci RAM ... ale najpierw wykonaj powyższe czynności, a być może skończysz.
źródło
W http://www.tbray.org/ongoing/When/200x/2006/05/24/On-Grids . Zauważ, że to było sześć lat temu. Tak, mamy systemy baz danych, które starają się (i starają się) utrzymać cały zestaw danych w pamięci RAM i raczej oddzielić do wielu komputerów niż używać dysku, ponieważ dysk jest wolniejszy. Musisz zapisać zestaw danych na dysk, ale jak w powyższym motto, bardziej przypomina to wykonywanie kopii zapasowej w tle niż operację online. Trwałość osiąga się poprzez dołączanie tylko dzienników z tymi bazami danych (myślę, że MongoDB i Redis, ale jest ich o wiele więcej).
źródło
To pytanie jest podobne do podstawowego, które w ciągu ostatnich 5-10 lat doprowadziło do wielu badań i rozwoju architektury baz danych. Teraz, gdy możliwe jest przechowywanie całej bazy danych w pamięci RAM dla wielu przypadków użycia, baza danych musi być zaprojektowana wokół pracy w pamięci RAM, zamiast po prostu zastosować starsze odziedziczone architektury do pamięci RAM.
Tak jak wiele mniejszych i bardziej specjalistycznych języków zostało powszechnie przyjętych w ostatnich latach, wkraczamy w erę, że potrzebne będą specjalne bazy danych.
W celu dalszej lektury na ten temat polecam artykuł naukowy The End of a Architectural Era (Nadszedł czas na całkowite przepisanie) . To nie jest trudna lektura.
Nie jest jasne, czy to pytanie dotyczyło konkretnie programu SQL Server. Oryginalny plakat powinien to wyjaśnić.
Daniel Pittman napisał:
Zmniejszenie kosztów ogólnych ze starszych założeń w implementacjach RDBMS było dokładnie celem projektowym VoltDB , ale skaluje się w poziomie bez ograniczeń architektonicznych co do wielkości danych i może utrzymywać się na dysku dla pełnej trwałości przy użyciu migawek i rejestrowania poleceń.
źródło
Jeśli uda ci się uzyskać serwer z wystarczającą ilością pamięci RAM, aby pomieścić przynajmniej gorącą część zestawu danych, nic ci nie będzie. Ponadto RAID 1 i 5 nie są najszybszym sposobem na uporządkowanie danych - RAID 0 jest szybszy, ale wtedy będziesz musiał wziąć pod uwagę większe prawdopodobieństwo awarii systemu plików, która zniszczy bazę danych - nie jest to miłe zdarzenie . Możesz RAID 1 lub RAID 5 macierz RAID 0, pod warunkiem, że masz wystarczającą liczbę napędów i kontrolerów.
Możesz nawet grać tutaj z replikacją - zapisuj na obciążonym dysku serwerze, który replikuje się na jeden lub więcej serwerów obciążonych pamięcią, gdzie wykonujesz skomplikowane zapytania.
Niestety, RDBMS wydają się być w sferę wielkiego żelaza - nie są tak łatwe w uprawie poziomej.
źródło
Jest to przypadek „zależy od tego, co robisz”. Być może „właściwą” radą jest całkowite uniknięcie SQL i użycie memcache / redis / etc!
Zgadzam się z tobą, że dodatkowa pamięć RAM bardzo pomoże, zwłaszcza jeśli jesteś w stanie odczytać cały zestaw roboczy do pamięci RAM. Tak, nadal będzie musiał zapisywać dane, ale jeśli przeważnie czytasz, zapisy nie będą miały wpływu na dyskowe operacje we / wy.
Jednak wydajność dysku jest często wąskim gardłem na serwerach SQL i trudniejsza niż inne rzeczy, takie jak pamięć RAM do aktualizacji później (jeśli masz serwer, który nie jest w pełni zapełniony modułami DIMM).
Było wiele komentarzy na temat powolności RAID5, ale powiedziałbym, że nie zawsze tak jest, więc bądź ostrożny przed wypowiedzeniem oświadczeń. Naprawdę wysokiej klasy serwery z szybkimi kartami RAID i dużą ilością BBWC czasami działają znacznie szybciej w RAID5 (lub RAID50 z> 4 dyskami) niż w RAID10 ...
Przez lata osobiście doświadczyłem powolnych macierzy RAID5, ale po przeprowadzeniu testów porównawczych DL360 G5 z 4 dyskami SAS 146G w ~ 2009 roku, musieliśmy dwukrotnie sprawdzić nasze testy. Rzeczywiście, tablica szła szybciej z RAID5 niż RAID10 w prawie każdym teście. BBWC i szybkie obliczenia parzystości pozwoliły serwerowi na wykorzystanie 4 dysków znacznie efektywniej jako macierzy RAID5 niż RAID10. Niektóre testy wykazały 50% lepszą przepustowość z RAID5 i prawie żaden nie był wolniejszy. Wolniejsze testy były tylko o 5-10% niższe.
Ostrzegam ludzi, którzy składają ogólne oświadczenia, że RAID5 działa wolno, wszyscy mówią to online, ale nie zawsze jest to prawda.
źródło
Masz do wyboru mieszankę cukierków i naprawdę zależy od tego, jaki smak chcesz.
Po prostu zainwestuj w wiedzę (bezpłatnie) przed wypłatą gotówki. 1. Naucz się konfiguracji dla swojej bazy danych i spójrz na aktualną konfigurację, aby ją zoptymalizować. 2. Spójrz na instrukcje programowania i SQL, test jednostkowy za pomocą prostych skryptów, które naśladują związane z tym operacje, może nawet nie być tym, co twoim zdaniem jest problemem. JEŻELI proste skrypty zajmują czas przy użyciu sprzężeń SQL, podziel je i zrób to samo z zaprogramowaną pętlą, aby zrobić to samo. To jest pamięć może pomóc 3. Spójrz na plan hostingowy i serwer. Użyj ps aux w konsoli Linux i sprawdź, czy coś zasysa twoją pamięć i procesor.
Absolutny dysk twardy poprawia prędkość, ale nie zależy od ciebie na przestrzeni wirtualnego serwera. Pamięć nie poprawia szybkości, chyba że skonfigurujesz dla niej usługi, kropka. Pomaga to w paski RAID (0,5), RPM i synchroniczny odczyt / zapis z szybką magistralą. Procesor rdzeniowy z dobrą pamięcią podręczną l1, l2, l3 pomoże w przetwarzaniu wąskiego gardła. czy słyszę to dla Xeona!
źródło
Ogólnie rzecz biorąc, należy pamiętać o rozmiarze i skalowalności. Choć wydaje się, że zaczynasz od małych potrzeb w zakresie pamięci, Twoje dane będą rosły bardzo szybko i wykładniczo. DB najlepiej używać danych atomowych, które są danymi w podziale na najmniejszy możliwy rozmiar. Ze względu na mały rozmiar podróżuje szybciej w hurtowni danych. Następnie bierzesz również pod uwagę strukturę DB. W przyszłości możesz tworzyć linki do zewnętrznych baz danych, dlatego też struktura jest tak ważna. W tym scenariuszu zapytanie nie miałoby większego znaczenia, gdyby połowa danych żyła poza martwą bazą danych. W przypadku zapytań o dane nie chodzi o to, aby przechowywać dane w pamięci RAM; raczej zapytanie powinno umożliwiać szybki dostęp do danych i ich zwracanie.
źródło