ďťż
 
[pgsql] Bardzo powolny zapis do bazy ďťż
 
[pgsql] Bardzo powolny zapis do bazy
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    =?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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • autwywalczyl.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com