konto usunięte
Temat: PostreSQL - problem z indexami
Krzysztof Magosa:[...]
Nie powinien, ale walczył, bo nie było go gdzie przenieść...Na chwilę obecną CPU - postgres zarzyna 2 cory w 100%, a na pozostałych 2 corach pracuje aplikacja, która wrzuca dane do tej bazy. Docelowo z pewnością wyniosę aplikację na osobną maszynę, bo walczy z bazą o CPU.Serwer www nie powinien walczyć z bazą o cpu. Zależy jeszcze
co tam konkretnie się dzieje...
Ale odpaliłem właśnie 2 dodatkowe maszynki, gdzie przerzuciłem aplikację, więc serwer odpocznie.
Aktualnie postgres wykorzystuje 3 core z 4, więc pojawił się nieduży zapas CPU.
Niestety z tego co widzę, teraz I/O będzie stanowić wąskie gardło, którego na chwilę obecną nie poszerzę.
Cache może trochę pomóc, ale raczej przy odczycie. No i jak się
inserty skończą, będzie lepiej.
[...]
W rekordach są pola TEXT, które postgres i tak wywala na zewnątrz.Nie. varchar(10) od text - z tymi samymi danymi różni się tym,
że baza musi sprawdzić długość dla varchara. Jak rekord nie
mieści się w stronie - wtedy coś trzeba trzymać gdzieś obok.
Inne bazy trzymają rekord na kilku stronach. PG ma mniej
wydajne rozwiązanie - i delikatnie mówiąc - gołym okiem widać
różnicę.
W planach mam przebudowanie struktury, by oddzielić ciężkie rzadko używane dane od reszty lekkich kolumn. Co do monitoringu - mam porobione wykresy itd.
Na szybko - zrobiłbym tak, żeby te pola text były na końcu. Wtedy
dostęp do małych pól będzie relatywnie szybki. Przenoszenie do
nowej tabeli ma sens, jeżeli uda się rozbić te pola - jak to jest
fragment strony / cały plik / czy tam inne coś - nie ma sensu.
Zastanowiłbym się tylko, czy nie trzymać tego w inny sposób.
W sensie jakiś nosql zorientowany na dokumenty.
To jest do przemyślenia, ale na chwilę obecną wydaje się zbyt czasochłonne.Czy ja wiem... Skoro 1/3 ruchu to selekty, które w dodatkuCały czas rozważam uruchomienie replikacji żeby zapisywać do jednej bazy, a na pozostałych mieć szybki odczyt.Ja tam nie wiem, ale lepiej śpię jak jest replikacja. Z drugiej strony jak system nie jest krytyczny - nie ma się co napinać.Jaka replikacja jest stosowana i jak zachowuje się przy takim obciążeniu?Aktualnie nie ma replikacji i całość pracuje na 1 serwerze.
wykonują się błyskawicznie? Chyba lepiej zwalczyć problem
z insertami. Tu można się zastanowić nad partycjonowaniem.
Chyba Daniel pisał o tym. Nie jest to, co w Oracle, ale - jest.
Partycjonowanie poprawi administrację, zwłaszcza dużymi
tabelami. Co, przy takim przyroście ma sens.
Tak coś mi się wydaje, że zaryzykowałbym z hadoopem,Gdyby architektura aplikacji była przygotowywana od początku do tego co robi teraz, to pewnie to wszystko wyglądałoby inaczej, ale nie ma szans na tak drastyczne zmiany.
zamiast PG...
Tak... to dość częsta przypadłość. :(
Jeżeli to jest jakiś crawler, analizator stron - wtedy operowanie
na zasadzie klucz - wartość sprawdza się bardzo dobrze. Znam
poważne rozwiązania mailingowe, które odeszły od PG właśnie,
bo było za wolno. Dokładniej - jeżeli przepustowość ma większe
znaczenie niż czas odpowiedzi - rozwiązanie bazujące na wielu
węzłach będzie lepsze.
Jeżeli zmiany dotyczą pojedynczego dokumentu - można użyć, w
zasadzie dowolnego rozwiązania - np. taki redis udostępnia dane
jako json. Jak sprawy są bardziej skomplikowane neo4j. Sprawa
dalej jest skomplikowana, ale inne elementy zaczynają mieć
znaczenie. No, ale to już inna bajka.