player11one
player11one
Cześć Mirko #programowanie #sql #debian #linux. Mam postawioną baze w postgresql, i skrypty które odpalają się cyklicznie i wrzucają do bazy jakieś tam dane (troche ważne). Problem w tym, że po niecałych ~~12h działania skryptów muszę restartować baze, bo zapytania wykonują się strasznie długo (właściwie wcale sie nie wykonują). Po restarcie service`u wszystko jest super ok, ale jakoś nie widzi mi się restartowanie bazy co chwila, bo wpłynie to na moje analizy na danych (są one praktycznie cały czas uploadowane do bazy, więc musiałbym się liczyć z utratą niektórych informacji). Ma ktoś z Was pomysł co zrobiłem źle? Jak naprawić ten błąd? Na pierwszy rzut oka wygląda to troche jak nie zamknięcie sesji czy coś w tym stylu, ale nie wydaje mnie sie. Ratujcie proszę!

Dobiero się uczę administrowania bazami, proszę o wyrozumiałość ( ͡° ͜ʖ ͡°)
  • Najlepsze
  • Wszystkie komentarze
G.....n
G.....n
G.....n
G.....n
@player11one: A wszystkie transakcje kończysz?
player11one
player11one
player11one Autor
0
@Ginden: Uzywam pythona, robię po każdej transakcji connection.commit, cursor.close i conn.close, wiec wydaje mi się, że kończę
player11one
player11one
player11one Autor
0
@Ginden: dzięki, poczytam; swoją drogą to nawet jeśli nie zamykam wszystkiego jak trzeba, to po wyjściu ze skryptu nie powinno samo wywalić syfu który zostawiłem?
G.....n
G.....n
@player11one: Szczerze to nie wiem. Chyba zależy od ustawień sterownika.
http://postgresql.nabble.com/Clients-disconnect-but-query-still-runs-td1922521.html
player11one
player11one
player11one Autor
0
@Ginden: Słuchaj, napotykam jeszcze taki problem: próbuje w postgresql.conf włączyć opcje statscommandstring = true tak jak mówią w 1 linku, restartuje bazę, ale po dopisaniu tej funkcji już nie mogę się połączyć, bo serwer odrzuca połączenia (mimo, że lsiten_addresses = "*") i przed dodaniem opcji łączę się normalnie. Gdzie robię błąd?
G.....n
G.....n
@player11one: W PostgreSQL 9 zmieniono nazwę na track_activities
player11one
player11one
player11one Autor
0
@Ginden: dzięki, udało się włączyć statystyki. Zarzuciłem skrypta żeby updateował dane, i wygląda na to, że kończy transakcje (jak działa skrypt w pętli jest ich ok 4-5, z czego 3 zajmuje pgAdmin), czyli można przypuszczać, że skrypt konćzy wszystko tak jak trzeba?
G.....n
G.....n
@player11one: Hm, commituje transakcje, czyli problem nie jest tu.
Co robi ten skrypt? Robi jakiś UPDATE? Zużycie pamięci zostaje w normie?
player11one
player11one
player11one Autor
0
@Ginden: Skrypt insertuje dane do bazy, które zbierze z różnych czeluści internetu, najwięcej czasu zajmuje mu:

INSERT INTO v.abc
(id, stronka)
SELECT 2148,
G.....n
G.....n
@player11one: Hm, ty wstawiasz po jednym wierszu naraz?

Zużycie - chodziło mi o zmianę zużycia gdy serwer zaczyna działać wolno. Zużycie pamięci jest dobre, bo to znaczy, że najczęściej używane dane z dysku są trzymane w RAMie.
player11one
player11one
player11one Autor
0
@Ginden: tak, wstawiam po jednym wierszu, tak łatwiej było skleić skrypt który był mi potrzebny. Cykl jest taki -> odpytuje strone o różne rzeczy które mnie interesują i wrzucam do bazy to, czego się dowiedziałem.
player11one
player11one
player11one Autor
0
@Ginden: Możliwe ze znalazłem błąd, nie commitowałem i nie zamykałem transakcji gdy rzucałem wyjątek. mam nadzieje, że to to, wielkie dzięki za pomoc ( ͡° ͜ʖ ͡°) A z tym wrzucaniem jednego wiersza to dobrze, czy źle, czy jak?
G.....n
G.....n
@player11one: Lepiej wrzucać więcej wierszy naraz, ale to już zależy czy jest to bottleneck rzeczywiście.
player11one
player11one
player11one Autor
0
@Ginden: może spróbuje przerzucić obsługę wczytywania plików conf na pythona, wtedy możliwe będzie wrzucanie po ~~10 wierszy. To "wrzucanie kilku wierszy na raz" to parallel query? Bo zastanawiam się, czy nie będę musiał przebudowywać funkcji. (tak, jestem zielonką z postgresa)
player11one
player11one
player11one Autor
0
@Ginden: Jakby ktoś był zainteresowany co to było:
sprawdzałem czy stronka odpowiada pobierając jej zawartość GETem, ale nie miałem timeoutu. Cron odpalał kolejne skrypty i rura sie zapychała. Ustawienie timeoutu stronki załatwiło problem. ( ͡° ͜ʖ ͡°)