Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
otóż,
czy zestawiał ktoś kiedys RAID 1 na mdadm z dyskiem SSD i ramdiskiem?
ogółem potrzebuję bardzo szybkiego katalogu o pojemności około 10GB do przechowywani bazy danych
Offline
Co to za baza danych?
Pytam, bo serwery bazodanowe lepiej, żeby bazy trzymały na jakimś trwałym nośniku (czytaj dyzio), natomiast zarówno Mysql jak i Postgres potrafią trzymać w buforach zapytania i całe tabele w razie potrzeby, wystarczy im przydzielić odpowiednie limity pamięci na poszczególne bufory.
Np w Mysql masz takie parametry od ustawienia:
[isamchk] key_buffer = 64M sort_buffer_size = 64M read_buffer = 64M write_buffer = 64M [myisamchk] key_buffer = 64M sort_buffer_size = 64M read_buffer = 64M write_buffer = 64M
i jeżeli chcesz w której pozycji dać np 64GB RAM, to nie ma z tym problemu.
W Postgresie 9.3 mam:
# - Memory - shared_buffers = 128MB # min 128kB # (change requires restart) temp_buffers = 64MB # min 800kB #max_prepared_transactions = 0 # zero disables the feature # (change requires restart) # Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory # per transaction slot, plus lock space (see max_locks_per_transaction). # It is not advisable to set max_prepared_transactions nonzero unless you # actively intend to use prepared transactions. work_mem = 64MB # min 64kB maintenance_work_mem = 128MB # min 1MB max_stack_depth = 1MB # min 100kB
Możliwości są spore, dlatego radziłbym poszukać sposobu na tuning wydajnościowy danego systemu bazodanowego, zamiast próbować wymyślać kolo od nowa. ;)
Sznurki:
https://wiki.postgresql.org/wiki/Performance_Optimization
http://www.debianhelp.co.uk/mysqlperformance.htm
http://www.thomas-krenn.com/pl/wiki/Tuning_wydajno%C5%9Bci_MySQL
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-08-09 04:46:43)
Offline
nie jest to takie proste bo baza jest autorska i używana do indeskowania backupu ;)
pamięć nie jest problemem ale dysk twardy nie wyrabia na zapisie tego
sam ssd powinien wystarczyć ale myślałem czy da się to jeszcze przyspieszyć
oczywiście wiem, że brak prądu to spory problem ale RAID1 SSD(1-2 partycje) z RAMdisk powinien to rozwiązać o upsach nie wspominam ;)
Offline
Baza może być autorska, ale ważny jest silnik, na jakim pracuje.
Bo chyba silnik tej bazy, to jest jakaś znana technologia, prawda?
Offline
wybacz, chodziło mi o silnik,to nie jest sql czy coś innego napisanego specjalnie pod to
tak czy inaczej nie ma możliwości modyfikacji tych parametrów a nawet jeśli to jest to bez sensu
na początku operacji baza jest hashowana do pamięć żeby mieć szybką podstawę ale każda zmiana jest robiona bezpośrednio na dysku twardym
i przy dużych backupach (kilka/naście tysięcy pliczków) macierz raid nie wyrabia
Offline
To już autor silnika powinien wiedzieć, jak się za to zabrać.
Moim zdaniem, jak to pliki, to może zapisywać na dyziu i w pamięci równocześnie, a czytać je z ramdysku, na dyzia zaglądać po plik, jak go nie znajdzie w ramie.
To już jest do zrobienia w każdym silniku, kernel Linux też tak szuka bibliotek na dyziu, żeby nie wczytywać do pamięci tej samej biblioteki 57 razy.
RAID1 - ramdysk+SSD mim zdaniem zbyt wielkiego sensu nie ma.
Ostatnio edytowany przez Jacekalex (2014-08-09 13:46:58)
Offline
gadałem z autorem - mówił, żeby postawić to na SSD ;)
głównie chciałem się dowiedzieć czy ktoś coś takiego testował czy taki RAID zyska cokolwiek z obecności ramdisku przytym
oczywiście takiego raida musiałbym przy każdym reboocie odbudowywać
Offline
Nie bardzo widzę funkcjonalność takiego rozwiązania.
Rozumiem że możesz sobie wykroić 10 GB RAM na zabawy z indeksami (inaczej nie miałoby to sensu).
Strzelam: postawić wszystko na ramdysku, i okresowo synchronizować z dyskiem.
Zaleta: będzie szybko.
Wada: jak strzeli system to indeksowanie pójdzie w diabły... ale w takiej sytuacji pewnie będziesz miał kilka innych ważniejszych problemów ;)
Offline
tylko czas potrzebny do zreindeksowania storage
a funkcjonalność już mówię robimy RAID 1 z dyskiem SSD i RAMdiskiem
prędkość odczytu jest tak szybka jak ram pozwoli, prędkość zapisuj tak wolna jak SSD wyrabia
katalog nie zniknie po restarcie ale raida będzie trzeba stawiać od nowa za każdym restartem
Offline
popraw mnie jeśli się mylę - ale czy RAID1 nie czyta naprzemiennie z wszystkich dysków w macierzy? Bo jeśli tak, to odczyt będziesz miał najwyżej rzędu 2x szybkość SSD... a z zapisem też mogą być sęki (wcale nie jest powiedziane że prędkość zapisu jest taka sama jak prędkość [s]szybszego[/s] wolniejszego dysku).
Do tego zapisanie na tej macierzy nie będzie absolutnie oznaczało zapisanie czegokolwiek na SSD - a chyba zależy Ci na nieulotności danych?
ale jak zaznaczyłem: mogę się mylić, specjalistą w tym zakresie nie jestem.
Ostatnio edytowany przez ethanak (2014-08-09 15:30:43)
Offline
Raz się tak bawiłem z serwerem WWW, brał plik z ramdysku, jak go tam nie znalazł, to skrypt zapięty na error 404 serwował plik z dyzia.
Identycznie można to zrobić z całym systemem operacyjnym:
PATH="/ramdysk/usr/local/bin:/ramdysk/usr/bin:/ramdysk/bin:/usr/local/bin:/usr/bin:/bin:${PATH}"
Dlatego radziłbym pogonić autora, żeby identycznie zakodził to w silniku tej "bazy", zamiast kombinować z RAIDem.
Zakodził, albo po prostu włączył, bo to i tak nie jeden programista projektował MongoDB, CouchDB czy PostgreSQL, tylko prawdopodobnie kawałki kodu przepisał z jakiegoś projektu bazodanowego.
Offline
Reasumując: koledze wątkotwórcy potrzebny jest po prostu filesystem z cache rzędu 10 GB - a tego się raidem nie robi.
Offline
Do tego też jest memcache.
Offline
[quote=ethanak]Reasumując: koledze wątkotwórcy potrzebny jest po prostu filesystem z cache rzędu 10 GB - a tego się raidem nie robi.[/quote]
oj tam nie robi, podążaj tam gdzie nie było nigdy nikogo! ;)
[quote=Jacekalex]Do tego też jest memcache.[/quote]
hm, brzmi interesująco musze się tym pobawić
Offline
Z memcache to musi się pobawić autor silnika bazodanowego.
Inna sprawa, że memcache działa po gniazdach sieciowych i socketach unix, co jest niezłym rozwiązaniem dla skryptów typu php/perl/python, natomiast do silnika serwera bazodanowego już niekoniecznie, tam lepiej by było takie rzeczy pakować na sztywno w kod, jak w Mysql i Postgresie.
Bezpośredni dostęp do pamięci zawsze będzie szybszy, niż połączenie typu TCP czy unix.
Ostatnio edytowany przez Jacekalex (2014-08-09 18:04:26)
Offline
A może odpowiednie ustawienie vm.dirty ?
http://www.thomas-krenn.com/pl/wiki/Podstawowe_informacje_o_Page_Cache_w_Linuksie
http://dug.net.pl/tekst/282/ram__cache_i_dirty_pages/h/dirty
Z tego co widzę to autor potrzebuje szybkiego odczytu a zapisu takiego jak wyrobi dysk SSD.
Offline
Time (s) | Query |
---|---|
0.00068 | SET CHARSET latin2 |
0.00006 | SET NAMES latin2 |
0.00084 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.133.124.23' WHERE u.id=1 |
0.00065 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.133.124.23', 1733043924) |
0.00041 | SELECT * FROM punbb_online WHERE logged<1733043624 |
0.00044 | SELECT topic_id FROM punbb_posts WHERE id=272875 |
0.00006 | SELECT id FROM punbb_posts WHERE topic_id=26231 ORDER BY posted |
0.00061 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26231 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00094 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26231 ORDER BY p.id LIMIT 0,25 |
0.00140 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26231 |
Total query time: 0.00615 s |