2012-03-21 11 views
5

Pracuję w aplikacji java, używając bazy danych H2 w trybie wbudowanym. Moja aplikacja zużywa 150 MB pamięci sterty.Problemy z wydajnością za pomocą H2 DB w trybie wbudowanym z dużym obciążeniem danych w bazie danych

Problem: Kroki Kiedy ładuję bazę danych H2 z 2 MB danych, dostęp do bazy danych jest szybki i wielkość pamięci sterty 160mb.

Ale Kiedy ładuję bazę danych H2 z 30 MB danych (rozmiar pliku h2 db = 30 MB). Następnie dostęp do bazy danych z mojej aplikacji jest bardzo wolny. Powodem jest to, że mój rozmiar sterty aplikacji jest ogromnie zwiększony do 300mb, co obniża wydajność. Potwierdziłem, używając JConsole.

Tak więc rozumiem, ponieważ baza danych H2 jest tworzona przy użyciu java i ponieważ używam bazy danych H2 w trybie wbudowanym, rozmiar sterty bazy danych H2 jest dodawany do mojej aplikacji, która zrywa aplikację.

Problem polega na tym, że rozmiar bazy danych H2 rośnie, wydajność mojej aplikacji jest obniżona.

Jak rozwiązać problem?

dałem połączenie jak

rurl = "jdbc:h2:file:/" + getDBPath() + dbname + ";CACHE_SIZE=" + (1024 * 1024) + ";PAGE_SIZE=512"; 

aby zwiększyć pamięć podręczną H2.

+0

Rozmiar pamięci podręcznej trwałej, wbudowanej bazy danych H2 wynosi domyślnie 16 MB. Czy używasz bazy danych w pamięci lub wyższego ustawienia pamięci podręcznej? Czy jesteś pewien, że wydajność spada z powodu użycia pamięci sterty (ponieważ jest to bardzo rzadkie) i sprawdziłeś, gdzie występuje problem z wydajnością (na przykład jps -l/jstack -l )? –

+0

Użyłeś innego niż domyślny rozmiaru pamięci podręcznej i rozmiaru strony - z jakiego powodu nie chcesz używać ustawień domyślnych? –

+0

Czy znalazłeś rozwiązanie tego problemu? Mam ten sam problem. Mała baza danych jest w porządku, jeśli wstawię wiele danych do jednej tabeli, wszystkie zapytania zaczną trwać znacznie dłużej. – Gust

Odpowiedz

5

W większości przypadków problemy z wydajnością nie są w rzeczywistości związane z rozmiarem pamięci podręcznej lub rozmiarem strony. Aby analizować problemy z wydajnością, patrz dokumentacja H2, specjalnie:

Jeśli ręcznie ustawisz rozmiar pamięci podręcznej na 1024 * 1024, H2 użyje 1 GB pamięci sterty. To ustawienie powinno być używane tylko wtedy, gdy do JVM masz więcej niż 1 GB pamięci fizycznej (używając java -Xmx2048m lub podobnej). W przeciwnym razie sugeruję zamiast tego używać ustawień domyślnych (rozmiar pamięci podręcznej 16 MB).

Używanie mniejszego rozmiaru strony niż domyślny może obniżyć wydajność. Zależy to od dysku twardego i ewentualnie od wzorca dostępu. Jednak nie ma listy reguł dotyczących korzystania z domyślnego rozmiaru strony - jedynym sposobem sprawdzenia jest wypróbowanie różnych ustawień.

Powiązane problemy