1

Temat: Problem z czasami wykonywania zapytania

Panowie prosze o rade czy to normalne zachowanie postgres-a 8.1, że jeśli zadam wyszukiwanie tekstowe w dużej (treściowo) tabeli (z kilkoma JOIN-ami) to za pierwszym razem wykonuje je bardzo długo - załóżmy ok. 120 sekund, a za kolejnymi, nawet gdy zmienie fraze ktorej szukam,  to ze 20 razy szybciej, tj. w ciągu 6-7 sekund? czy dziala tu jakis mechanizm cache-owania?

Bo mam taki problem: loguje sie do bazy i szukam słowa np. "warszawa" w tabeli ok. pół miliona rekordow (duzo tekstu, dump ma ok. 1GB)

SELECT *
FROM   archive_tender T
LEFT OUTER JOIN tender_lock TL ON ( TL.tender_id=T.tender_id )
LEFT OUTER JOIN d_user TU ON ( TU.user_id=TL.user_id )
LEFT OUTER JOIN d_user TC ON ( TC.user_id=T.create_user_id )
LEFT OUTER JOIN d_user TI ON ( TI.user_id=T.imp_assign_user_id )
WHERE
   (( T.subject ~* '\\mwarszawa\\M' )) AND T.erased = 0 AND T.rejected = 0
ORDER BY
   tender_id DESC
LIMIT
    10000
   
i na wynik czekam ok. 120 sekund.

nastepnie dokładnie tak samo szukam innego słowa np. "radom" i wynik znajduje w 7/8 sekund. Wszystkie kolejne wyszukiwania też juz potem robia sie szybko.

Ale jesli odczekam około godziny i znów próbuje szukać - to znów trwa to ok. 120 sekund...


Czy to normalne czy nie? i jak to wyeliminować, czy można gdzies 'cacheowac' takie wyszukiwanie zeby user za kazdym razem dostawal wynik  w ciagu kilku sekund?

Ostatnio edytowany przez zbir (2010-07-16 16:10:00)

2

Odp: Problem z czasami wykonywania zapytania

To o czym tu napisałeś to jak już zauważyłeś (prawdopodobnie) efekt cache'owania.
Cache'owania konkretnych zapytań to się raczej nie wymusi.  Za pomocą modułu pg_buffercache możesz zweryfikować jaka tabela ile bloków zajmuje w cache'u i to chyba wszystko co da się z tym zrobić, no ewentualnie możesz zwiększyć rozmiar cache'a.