[pgsql] Bardzo powolny zapis do bazy
Adrian - 04-01-2006 09:33
[pgsql] Bardzo powolny zapis do bazy
Witam, przeszukałem pobieżnie archiwum, ale nie znalazłem podobnego problemu wieć zdecydowałem się napisać. Na wstępnie nadmienię tylko, że jestem laikiem w dziedzinie baz danych, dlatego rozwiązanie tego problemu sprawia mi niemałą trudność. Chodzi o to, że jest sobie działające forum oprarte na phpBB i bazie PostgreSQL. Problem jest w zapisie do bazy (dodawnia postów, usuwanie postów, przenosznie postów na inne fora/wątki, itp.) Trwa to okropnie długo, a czas uzależniony jest od ilości tekstu (tekst złożony z nieco ponad 1600 wyrazów wrzuca się kilka minut). Troszeczkę mnie dziwi ten fakt, tym bardziej, że kiedyś to forum stało na MySQL (była przeprowadzka - dump na mysql i \i na postgresie) i tam takie elaboraty wrzucały się błyskawicznie. Odczyt z bazy czyli wyświetlanie wątków robi się błyskawicznie - problem jest tylko przy zapisie. Podejrzewam, że chodzi tutaj o mały tuning samego postgresa, ale jak już wspominałem to nie moja domena i zanim zacznę eksperymentować prosiłbym jednak o skierowanie na dobre tory. PostgreSQL jest w wersji 8.0, działa na PLD Linux. Jakieś sugestie??
Pozdrawiam -- Adrian
HERAKLES - 04-01-2006 09:33
Adrian wrote:
> Witam, > przeszukałem pobieżnie archiwum, ale nie znalazłem podobnego problemu > wieć zdecydowałem się napisać. Na wstępnie nadmienię tylko, że jestem > laikiem w dziedzinie baz danych, dlatego rozwiązanie tego problemu > sprawia mi niemałą trudność. > Chodzi o to, że jest sobie działające forum oprarte na phpBB i bazie > PostgreSQL. Problem jest w zapisie do bazy (dodawnia postów, usuwanie > postów, przenosznie postów na inne fora/wątki, itp.) Trwa to okropnie > długo, a czas uzależniony jest od ilości tekstu (tekst złożony z nieco > ponad 1600 wyrazów wrzuca się kilka minut). Troszeczkę mnie dziwi ten > fakt, tym bardziej, że kiedyś to forum stało na MySQL (była > przeprowadzka - dump na mysql i \i na postgresie) i tam takie elaboraty > wrzucały się błyskawicznie. Odczyt z bazy czyli wyświetlanie wątków robi > się błyskawicznie - problem jest tylko przy zapisie. Podejrzewam, że > chodzi tutaj o mały tuning samego postgresa, ale jak już wspominałem to > nie moja domena i zanim zacznę eksperymentować prosiłbym jednak o > skierowanie na dobre tory. > PostgreSQL jest w wersji 8.0, działa na PLD Linux. > Jakieś sugestie?? > > Pozdrawiam
VACUUM poczytaj deż o demonie autovacuum zrób też: du -h --max-depth=1 /var/lib/postgres/data/base/ możesz też zainstalować coś w stylu oid2name pomoże to Ci rozszyfrować co oznaczają te liczby, zabacz jak wygląda pojemność tych katalogów przed i po vacuum. Do tego pologuj sobie zapytania poeksplainuj i pozakładaj indeksy tam gdzie trzeba. Podejżewam, że podczas dodawania posta jest gdzieś jakieś wyszukiwanie w dużej tabeli bez indeksu, postgres kiepsko radzi sobie z wyszukiwaniem po tabelach, gdzie są pola z dużą ilością danych (np. posty) bez indeksów, ba nawet bardzo kiepsko, ale po założeniu indeksu problem znika. Aha i postaraj się zaktualizować postgresa do najnowszej wersji. Popatrz też na top'a ogranicz wyniki do usera postgresa przełącz klawiszem c i będziesz wiedział co on aktualnie robi.
Mikolaj Rydzewski - 04-01-2006 09:33
Adrian wrote:
> postów, przenosznie postów na inne fora/wątki, itp.) Trwa to okropnie > długo, a czas uzależniony jest od ilości tekstu (tekst złożony z nieco > ponad 1600 wyrazów wrzuca się kilka minut). Troszeczkę mnie dziwi ten
Swego czasu uzywalem w jednej aplikacji modulu do wyszukiwania pelnotekstowego - trigger aktualizowal indeks slow po zmianach w tabeli. Wtedy wszelkie inserty/update/delete tez szly bardzo dlugo. Nie sadze jednak abys mial ten sam problem, chyba, ze ostro ktos zmienil instalacje forum. Odpal vacuum (z crona), zaloz indeks i sprawdz jeszcze raz.
-- Mikolaj Rydzewski
Adrian - 05-01-2006 08:05
HERAKLES napisał(a): > VACUUM > poczytaj deż o demonie autovacuum > zrób też: du -h --max-depth=1 /var/lib/postgres/data/base/ > możesz też zainstalować coś w stylu oid2name pomoże to Ci rozszyfrować co > oznaczają te liczby, zabacz jak wygląda pojemność tych katalogów przed i po > vacuum.
Idąc za radą - przed vacuum:
-bash-3.00# du -h --max-depth=1 /var/lib/pgsql/base/ 4,7M /var/lib/pgsql/base/1 4,7M /var/lib/pgsql/base/17229 276M /var/lib/pgsql/base/17230 5,4M /var/lib/pgsql/base/17231 27M /var/lib/pgsql/base/1266448 318M /var/lib/pgsql/base/
następnie:
-bash-3.00# vacuumdb -U postgres -vaf
to wypluło dość sporo enigmatycznych dla mnie znaczków (pewnie dzięki opcji -v), niemniej jednak:
-bash-3.00# du -h --max-depth=1 /var/lib/pgsql/base/ 4,6M /var/lib/pgsql/base/1 4,7M /var/lib/pgsql/base/17229 199M /var/lib/pgsql/base/17230 5,2M /var/lib/pgsql/base/17231 15M /var/lib/pgsql/base/1266448 228M /var/lib/pgsql/base/
Co jak widać dość sporo wyczyściło bo bazy skurczyły się o jakieś 30%. Wydajność forum wzrosła kilku lub nawet kilkunastokrotnie, wiec cieszymy się.
> Do tego pologuj sobie zapytania poeksplainuj i pozakładaj indeksy tam gdzie > trzeba.
No i tutaj rodzi się problem. O ile pologować zapytania to jest coś co jeszcze byłbym w stanie zrobić posiłkując się manualem, to analiza tych logów i późniejsze zakładanie indeksów "gdzie trzeba" to już przerasta moje możliwości. Niemniej jednak zastanawiam się nad taką rzeczą. phpBB ma wsparcie dla postgresa, przy instalacji forum automat generuje schemat bazy danych taki, jak zaprojektowali developerzy phpBB. Indeksy "gdzie trzeba" powinny być na mój laicki rozum zakładane już na tym etapie. Nie sądze by tak zaawansowany projekt jak phpBB, rozwijany od X lat nadal borykał się z problemem niezbyt dobrze zaprojektowanego schematu bazy danych dla postgresa. Nie wiem czy moje rozumowanie jest poprawne czy nie - jak napisałem w pierwszym poście bazy danych to nie jest to w czym czuje się pewnie, ba - nawet średnio. Reasumując, krótki przewodnik na temat tego jak na podstawie zalogowanych zapytań wywnioskować "gdzie trzeba" pozakładać indeksy byłby mi bardzo pomocny.
Za dotychczasową pomoc rzecz jasna dziękuję obu panom - forum już dostało dość mocnego kopa.
Pozdrawiam -- Adrian
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?iso-8859-2?Q?=5BMySQL=5D_Wy=B6wietlenie_wszystkich_rekordow _zawierajacy?==?iso-8859-2?Q?ch_duplikat_a__moze_inna_struktura_bazy_danych ?=
Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8
=?iso-8859-2?Q?=5BSQL_Server_2000=5D_uprawnienienia_do_u=BFyw ania_widoku_?==?iso-8859-2?Q?opartego_na_tabeli_z_innej_bazy?=
Dwie bazy czy dwie tabele?
[PHP i MySQL] Wstawianie =?ISO-8859-2?Q?rekord=F3w_do_bazy_?==?ISO-8859-2?Q?a_z=B3e_kodowanie?=
=?ISO-8859-2?Q?=5Bmysql=5D_synchronizacja_struktury_bazy_?==? ISO-8859-2?Q?lokalnej_ze_zdaln=B1?=
[Oracle] Co do tworzenia aplikacji dla bazy Oracle
narzedzie do transferu bazy mysql - mysql
narzedzie do transferu bazy odbc - odbc
Połączenie bazy danych z wykonaniem polaczenia telefonicznego
zanotowane.pldoc.pisz.plpdf.pisz.plautwywalczyl.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|