![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Witam,
mam bazę na PostgreSQL, która aktualnie zajmuje 77GB. Chcę nieco zmodyfikować jej strukturę (usunąć jeden indeks oraz usunąć kolumnę). Sęk w tym, że usunięcie indeksu uruchomiłem ok. 9 rano i do tej pory (15) nie ma efektu. Indeks usuwam (staram się usunąć) poprzez zapytanie wykonywane za pomocą phpPgAdmin . Moje pytanie jest następujące: jak można przyspieszyć (o ile w ogóle się da) modyfikowanie struktury tak dużej bazy danych? Pozdrawiam, pion |
|
|
![]()
Post
#2
|
|
![]() Administrator serwera Grupa: Developerzy Postów: 521 Pomógł: 13 Dołączył: 2.04.2004 Skąd: 52°24' N 16°56' E Ostrzeżenie: (0%) ![]() ![]() |
Nie da się tego przyspieszyć. Po drugie nie używaj phpPgAdmin'a, no chyba, że nie masz innej możliwości
![]() -------------------- Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..." Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL" |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Dzięki za odpowiedź, w końcu zmiany się naniosły.
Kurde, wszystko się porozpierdzielało :| Po modyfikacjach kluczowe zapytanie przestało używać indeksu. Wczoraj w nocy włączyłem VACUUM ANALYZE. Dziś widzę, że rozmiar bazy się nie zmienił (a chyba powinien się zmniejszyć). Ponadto indeks nadal nie jest używany (a był!). To samo zapytanie u mnie na kompie używa indeksu, a na serwerze już nie. Próbowałem przeindeksować indeks ale bez rezultatu. Może podam szczegóły: Zapytanie: Kod SELECT "auctions"."start_price" AS "price", SUM(biddings.amount) AS sum_amount FROM auctions JOIN "biddings" ON ("biddings"."auction_id" = "auctions"."id") JOIN "auctions_categories" ON ("auctions_categories"."auction_id" = "auctions"."id") WHERE "auctions"."finished_at" >= '2010-01-01 00:00:00' AND "auctions"."finished_at" <= '2010-02-28 23:59:59' AND title_keywords @@ to_tsquery('public.polish', 'nike') AND "auctions"."is_new" = 't' AND "auctions_categories"."category_id" = 15583 GROUP BY "auctions"."start_price" ORDER BY "auctions"."start_price" ASC EXPLAIN u mnie: Kod "Sort (cost=36.15..36.15 rows=1 width=9)" " Sort Key: auctions.start_price" " -> HashAggregate (cost=36.13..36.14 rows=1 width=9)" " -> Nested Loop (cost=0.00..36.11 rows=4 width=9)" " -> Nested Loop (cost=0.00..16.64 rows=1 width=15)" " -> Index Scan using i_auction_finished_at on auctions (cost=0.00..8.30 rows=1 width=11)" " Index Cond: ((finished_at >= '2010-01-01 00:00:00'::timestamp without time zone) AND (finished_at <= '2010-02-28 23:59:59'::timestamp without time zone))" " Filter: (is_new AND (title_keywords @@ '''nike'''::tsquery))" " -> Index Scan using pk_auction_category_auction_id_category_id on auctions_categories (cost=0.00..8.33 rows=1 width=4)" " Index Cond: ((auctions_categories.auction_id = auctions.id) AND (auctions_categories.category_id = 15583))" " -> Index Scan using pk_bidding_auction_id_bought_at_position on biddings (cost=0.00..19.42 rows=4 width=10)" " Index Cond: (biddings.auction_id = auctions.id)" EXPLAIN na serwerze: Kod Sort (cost=92338.41..92338.41 rows=1 width=9) Sort Key: auctions.start_price -> HashAggregate (cost=92338.39..92338.40 rows=1 width=9) -> Nested Loop (cost=6740.93..92338.35 rows=7 width=9) -> Nested Loop (cost=6740.93..88763.08 rows=4 width=15) -> Bitmap Heap Scan on auctions (cost=6740.93..55169.01 rows=2062 width=11) Filter: (is_new AND (finished_at >= '2010-01-01 00:00:00'::timestamp without time zone) AND (finished_at <= '2010-02-28 23:59:59'::timestamp without time zone) AND (title_keywords @@ '''nike'''::tsquery)) -> Bitmap Index Scan on i_auction_title_keywords_description_keywords (cost=0.00..6740.41 rows=12587 width=0) Index Cond: (title_keywords @@ '''nike'''::tsquery) -> Index Scan using pk_auction_category_auction_id_category_id on auctions_categories (cost=0.00..16.28 rows=1 width=4) Index Cond: ((auctions_categories.auction_id = auctions.id) AND (auctions_categories.category_id = 15583)) -> Index Scan using pk_bidding_auction_id_bought_at_position on biddings (cost=0.00..888.08 rows=459 width=10) Index Cond: (biddings.auction_id = auctions.id) Jak widać na serwerze olewany jest indeks i_auction_finished_at pomimo, że istnieje. O co tutaj chodzi? Jak to naprawić? // Edit: Wywaliłem indeks i_auction_title_keywords_description_keywords, który teoretycznie przeszkadza (jest używany zamiast tego, który chcę), ale i to nie pomogło. Sprawdziłem również banalne zapytanie: Kod select * from auctions where finished_at >= '2010-01-01 00:00:00' and finished_at <= '2010-01-31 23:59:59'; Na lokalu używa indeksu, na serwerze nie. Na serwerze używany jest indeks tylko dla warunku równości czyli np. Kod select * from auctions where finished_at = '2010-01-01 00:00:00'; Jeszcze w piątek wszystko było OK, teraz mam takie hocki-klocki :/ Z góry pięknie dziękuję za pomoc! Ten post edytował phpion 4.04.2010, 14:02:49 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 08:56 |