Temat: BD w RAM pytanie

Witam, czy podczas odczytywania,na st.klienckiej, danych/rekordów z BD (bez znaczenia jaki silnik) - zapytania SQL, pobierana/wczytywana jest do pamięci serwera BD cała baza danych czy tylko część danych?
Marek Januszkiewicz

Marek Januszkiewicz Specjalista ds.
Business
Intelligence

Temat: BD w RAM pytanie

W skrócie: tylko część danych jest wczytywana do pamięci.

Różnica tylko jest, jak zapytanie jest przechowywane w pamięci. W przypadku MySQL do pamięci trafia zapytanie (query) oraz jego wynik. Jeśli chodzi o MS SQL do pamięci trafia tylko strona(y), która przechowuje dane z wyniku zapytania. Zapytania (queries) nie są cachowane.

konto usunięte

Temat: BD w RAM pytanie

MySQL też operuje na stronach. One trafiają do pamięci. Nie zapominałbym o indeksach, które też wczytywane są do pamięci. W sumie to najdziwniej ma DB2. No, ale... zawsze jest tak, że dane wyczytywane są z dysku. PostgreSQL ma trochę inaczej, bo sam nie zarządza cache, zleca to do systemu. Sam zapisuje log transakcji, żeby nie stracić danych, a kiedy system zrzuci dane na dysk jest mniej istotne.

Temat: BD w RAM pytanie

Dzięki Panwie, docelowo staram się rozkminić optymalny rozmiar paska dla RAID 5 lub 10 - dla serwera BD, eh droga przez mękę...jedni piszą im większy tym lepiej, drudzy że max 64K. Nie mam jak tego przetestować, nie mam/nie wiem też czym i w tym cały ból:( Obecnie mam 256K (ustawione było jako default) Raid5.Ten post został edytowany przez Autora dnia 04.05.14 o godzinie 21:18

konto usunięte

Temat: BD w RAM pytanie

Nie używaj raid 5 do baz danych.
Raid 10 na 4,8,16 dyskach. Jak chcesz raid 1 - też zwykle lepiej sprawdza się ilość dysków będąca potęgą 2.
Jak już musisz - zrób stronę taką jak strona w bazie danych. Dla mnie - to może być problem z tym systemem. Do tego bufor ustawiony na jakieś małe coś - żeby w koło rezało po dysku - każdy komp uziemi.

Jak się bierzesz za rzeczy, których nie znasz, nie masz możliwości potestowania - jakich efektów oczekujesz?

Temat: BD w RAM pytanie

Uważam, że Raid5 nie jest aż taki zły do małych BD, a szczegółnie tych z duża ilością odczytów. Jeśli postawię na raid5 to z max 7 dyskami, jednak raczej pójdę w kierunku 10. Moje pytanie było o optymalne, z doświadczenia, stripe size, który w opinii XXXXXXXXX 'ekspertów' z PL i całego świata, waha się od 16K do 1M i tutaj jest problem. Ja wiem, że to temat rzeka i filozoficzny, ale dla mnie jest to temat do którego nigdy nie podchodziłem poważnie, i czas najwyższy rozkminić i ten element w całej tej mieszaninie IT. Z BD miałem mało do czynienia, z optymalizacją rónież, ale chętnie poznam i ten temat. Jeśłi chodzi o przetestowanie to mam, ale tylko na VM więc nie jest to dobry pomysł na testowanie poźniejszej wydajności na produkcji...a od czegoś trzeba zacząć. Strony w BD, bufor ok, ale teraz chciałbym ustalić optymalny pasek dla BD dla raid 10 i 5 (5 dla dobra nauki). Pytanie też czy stripe size ma az takie znaczenie dla wydajności? i tutaj znó jest XXXXXXX ekspertów i opinii.Ten post został edytowany przez Autora dnia 04.05.14 o godzinie 22:49
Marek Januszkiewicz

Marek Januszkiewicz Specjalista ds.
Business
Intelligence

Temat: BD w RAM pytanie

Michał dobrze prawi. Stripe wielkości takiej samej jak wielkość strony bazy danych.

Dodatkowo istnieje zjawisko wyrównania partycji. Tutaj http://www.thomas-krenn.com/en/wiki/Partition_Alignment w drugim akapicie jest to wyjaśnione (A History of Partitions).Ten post został edytowany przez Autora dnia 04.05.14 o godzinie 23:15

Temat: BD w RAM pytanie

Dzięki za link, poczytam. Sorki, nie zrozumiałem Michała, strona odczytałem jako strona, a nie stripe/pasek, mój bład... Nadal rozkminiam zapis "Do tego bufor ustawiony na jakieś małe coś - żeby w koło rezało po dysku - każdy komp uziemi":) na co ustawić ten bufor?Ten post został edytowany przez Autora dnia 04.05.14 o godzinie 23:21

konto usunięte

Temat: BD w RAM pytanie

Baza danych ma bufor w pamięci. Czasem jest zarządzany przez silnik, czasem nie. No, ale jest. Potem jest bufor systemu na odczyt / zapis danych z dysku. Jak zapiszesz plik w Wordzie i wyciągniesz kabel z gniazdka jest spora szansa, że plik się nie zapisze, mimo, że Word twierdził, że zapisał. Dane trafiły do pamięci i potem miały trafić na dysk... Jak ustawisz mały bufor dla bazy danych - w koło będzie czytać / zapisywać. W prostym przypadku dane trafiają z dysku do pamięci i tam są przetwarzane. No, ale każda z sesji ma swój obszar podręczny. Jak on będzie za mały - dane będą odkładane na dysk. Co powoduje dramatyczny spadek wydajności. Dzieje się tak przez dużą ilość zapisów / odczytów. Jak strona w macierzy jest 256k, a baza operuje na stronach 8k... Mały bufor oznacza, że te strony latają w tę i we w tę. Jeżeli są blisko siebie - jest zysk, bo jeden strzał zapisuje 32 takie strony, ale jeżeli nie - jest nadmiar. Niby nic, ale przy raid 5 kontroler musi liczyć sumy kontrolne tego całego bałaganu.
MySQL, innodb ma strony 16k, jak jest w Sybase nie mam pojęcia.

Temat: BD w RAM pytanie

Dzięki za obszerne info. Sprawdziłem, mam 8k page size w DB, czy pisząc "Jak strona w macierzy jest 256k" masz na myśli stripe ? cache mam ustawiony na 512M przy bazie 820MB i RAM 3GB - RAID5.Ten post został edytowany przez Autora dnia 05.05.14 o godzinie 20:01

konto usunięte

Temat: BD w RAM pytanie

Mateusz K.:
Witam, czy podczas odczytywania,na st.klienckiej, danych/rekordów z BD (bez znaczenia jaki silnik) - zapytania SQL, pobierana/wczytywana jest do pamięci serwera BD cała baza danych czy tylko część danych?

Oczywiście, że część danych, chociażby dlatego, że RAMu może być za mało. Poza tym jaki jest sens wczytywać wszystko, jak np. potrzebuję kilka MB, a baza ma kilka TB?

Temat: BD w RAM pytanie

dokłądnie tak samo myślimy (logika), zapytałem bo ktoś na forum napisał "taka mała baza to w całości zmieści się w RAMie" nie pamietam kto, ale zastanowiło mnie to...Fajnie napisał Michał,ale dla osoby która nie jest prof z BD to trochę niejasne...Moje pytanie czy te param. co podałem wystarczą do określenia czy dla takiej wielkości bazy są wystarczające. Zapewne głupie pytanie, ale zaryzykowałem;) Chciałbym określić bottleneck.

Temat: BD w RAM pytanie

Pytanie, dla usystematyzowania wiedzy, czy odczyt/zapis danych z BD jest losowy, a odczyt/zapis do logów jest sekwencyjny?

konto usunięte

Temat: BD w RAM pytanie

"Taka mała baza zmieści się w ramie" to skrót myślowy. Mogę powiedzieć jak to działa w przypadku Postgresa, ale pewnie inne bazy działają podobnie. Pliki mogą być duże, dlatego dzieli się je na strony, które mają swoje numerki, dzięki temu wyciągnięcie strony o konkretnym numerze jest proste. Jak baza chce stronę z pliku, to o nią prosi system operacyjny, który prosi to z dysku, po drodze może być macierz jakaś. Te wszystkie poziomy jakoś cachują sobie te dane, bo jak ktoś poprosi o ten sam kawałek pliku za chwilę, a wiadomo, że się nie zmienił, to można go dać z pamięci, a nie z kosmicznie wolnego dysku.

W przypadku postgresa uznano, że system operacyjny cachuje pliki znacznie lepiej, niż baza i większość pracy z tym związanej zrzucono na system.

Natomiast w praktyce polega to na tym, że bazy robią najczęściej o wiele więcej odczytów, niż zapisów, dlatego odczytanie strony z pliku raz, zamiast za każdym razem, bardzo te zapytania przyspiesza.

Jak baza jest niewielka, powiedzmy 1GB, a w systemie jest np. 5GB wolnego ramu, to prośba o odczytanie każdej strony z pliku po kolei sprawi, że system może całą bazę wczytać do pamięci, więc po wstępnym rozgrzaniu bazy, wszystkie dane są ramie. Oczywiście zapis do pliku oznacza zapis strony na dysk i ewentualna próba dostępu oznacza wczytanie jej z dysku, ale to i tak nic w porównaniu ze wzrostem szybkości, jaki uzyskuje się trzymając te dane w pamięci.

Jak baza jest większa, niż dostępny na cachowanie plików ram, to w ramie trzymana jest ostatnio używana część plików. Co też potrafi przyspieszyć bazę. Niestety oznacza to też, że czasami odczytanie pliku z dysku będzie wolniejsze, bo trzeba odczytać plik z dysku, oraz zrobić dla niego miejsce w pamięci, czyli znaleźć i zwolnić najdawniej używane strony.

Pewnie w tym co napisałem też są skróty myślowe, jakby co to pytaj.

konto usunięte

Temat: BD w RAM pytanie

Mateusz K.:
Pytanie, dla usystematyzowania wiedzy, czy odczyt/zapis danych z BD jest losowy, a odczyt/zapis do logów jest sekwencyjny?

Odczyt i zapis plików z danymi jest oczywiście losowy, zapisuje się i odczytuje losowe strony, a jak baza dłużej pochodzi i nie pliki nie są kompaktowane (to chyba odpowiednie słowo, nie jestem pewien) to część nowych danych zapisywana jest np. na początku takiego pliku.

Pliki z logami oczywiście są sekwencyjnie zmieniane, bo dane są do nich dopisywane, nikt nie będzie zmieniał wcześniej zapisywanych danych. Ale już odczyt takich plików to różnie, bo czasami trzeba czytać je od początku do końca, żeby odtworzyć z nich dane, a czasami potrzeba wyciągnąć kilka losowych wpisów.

konto usunięte

Temat: BD w RAM pytanie

MySQL na innodb ma własny bufor. Trzeba powiedzieć ile ma wziąć. Robią tak, żeby mieć pełną kontrolę nad tym, co jest na dysku, a co w buforach. Przydaje się przy shared-storage.
Ja bym dał +/- tyle ile jest całej bazy. No, ale 512MB jest w zasadzie równie dobrym pomysłem. Czyli wygląda, że problem raczej po stronie dysku? Dziwnie to wygląda. Jak trzyma większość danych w pamięci - nie powinien latać na dysk za często. No, ewentualnie log transakcji może być obciążony - 250 użytkowników? Dobrze pamiętam? No ale to dalej nie wyjaśnia wolnego działania. Pewnie coś więcej jest źle zrobione. Dalej uważam, że zmiana na raid-1, albo 10 to dobry pomysł, ale nie rozwiąże problemu. Pewnie w systemie jest tabela z dużą ilością wierszy, która jest przeglądana sekwencyjnie. Może jakiś katalog spraw przeglądany przez pracowników co chwilę, żeby znaleźć nową sprawę... To im wolno działa i po temacie. No, albo ten MySQL jest nie na innodb, tylko na myisam - każdy lock jest na całej tabeli, a przy takiej liczbie użytkowników... Działa wolno. Nie mówiąc już o tym, że dane zostają w pamięci i nie ma flusha na dysk. Teoretycznie działa szybko, ale zanik zasilania - historia jak z dokumentem worda. A to baza danych jest - niby. No i problem może być z tym sybase. Może trzeba zrobić jakieś standardowe zadanie administratora - przebudować indeksy, wywalić śmieci...
Grzegorz Stolecki

Grzegorz Stolecki konsultant Business
Intelligence, SQL
Server, MVP

Temat: BD w RAM pytanie

Marek J.:
W skrócie: tylko część danych jest wczytywana do pamięci.

Różnica tylko jest, jak zapytanie jest przechowywane w pamięci. W przypadku MySQL do pamięci trafia zapytanie (query) oraz jego wynik. Jeśli chodzi o MS SQL do pamięci trafia tylko strona(y), która przechowuje dane z wyniku zapytania. Zapytania (queries) nie są cachowane.

Mała popraweczka - MS SQL buforuje drzewa zalgebraizowane oraz plany zapytań. Ponowne wykonywanie tego samego zapytania jest szybsze - nie trzeba budować planu - jest już w cache.

pozdrawiam
Grzegorz
Marek Januszkiewicz

Marek Januszkiewicz Specjalista ds.
Business
Intelligence

Temat: BD w RAM pytanie

Niestety informacja o drzewach zalgrebraizowanych i planach zapytań mi uciekła, ale jestem pewien, że była na Pana szkoleniu "Strojenie bazy danych i optymalizacja zapytań SQL" w grudniu, w siedzibie Comarch w Warszawie :)

Jeśli ktoś natrafi na to szkolenie, to szczerze polecam!

Temat: BD w RAM pytanie

"Natomiast w praktyce polega to na tym, że bazy robią najczęściej o wiele więcej odczytów, niż zapisów, dlatego odczytanie strony z pliku raz, zamiast za każdym razem, bardzo te zapytania przyspiesza." czy znacie jakiś soft, sposób na sprawdzenie ile jest zapisów i odczytów z BD?
Grzegorz Stolecki

Grzegorz Stolecki konsultant Business
Intelligence, SQL
Server, MVP

Temat: BD w RAM pytanie

MS SQL sam sobie zapisuje takie rzeczy. Info jest dostępne poprzez widoki zarządcze, czyli DMV, np.
sys.dm_exec_query_stats dla zapytań
sys.dm_io_virtual_file_stats - to akurat funkcja, która zwraca takie statystyki dla poszczególnych plików baz danych.

Pozdrawiam
Grzegorz



Wyślij zaproszenie do