<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Wolne działanie pomiędzy dwoma wirtualnymi maszynami]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=2304&amp;type=atom"/>
	<updated>2015-09-13T17:26:05Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=2304</id>
		<entry>
			<title type="html"><![CDATA[Odp: Wolne działanie pomiędzy dwoma wirtualnymi maszynami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5544#p5544"/>
			<content type="html"><![CDATA[Co do partycjionowania, to tutaj masz bardzo dobry opis depesza [url]http://www.depesz.com/2015/06/07/partitioning-what-why-how/.[/url]
Co do małej wydajności insertów to nadal bardzo trudno mi Ci pomóc, podejrzewam, że po każdym insercie idzie commit, a to mocno zwolni bazę. Dodatkowo musisz pamiętać, że postgresql jest systemem wieloprocesorowym ale tak naprawdę to jeśli wykonujesz wszystkie inserty za pomocą jednego połączenia to postgres naraz wykonuje tylko jednego inserta. (podziel to zadanie na tyle procesorów ile masz na serwerze, wtedy mocno wzrośnie Ci wydajność). Innym sposobem jest przygotowanie pliku z poleceniem COPY i wykonanie go bezpośrednio na bazie, możesz też przygotować plik Csv i podpiąć go za pomocą rozszerzenia file_fdw, są też możliwości bezpośredniego podpięcia tabel z innego postgresa lub oracle).]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2015-09-13T17:26:05Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5544#p5544</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wolne działanie pomiędzy dwoma wirtualnymi maszynami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5543#p5543"/>
			<content type="html"><![CDATA[Michał dzięki za odpowiedź.
Tak jak napisałem do ładowania używam narzędzia ETL pentaho, czytam plik po drodze wykonuję kilka transformacji na danych i ładuję do tabeli. Na razie doszedłem do tego, że jeżeli zapisuje do jednej tabeli to już idzie te 3000 r/s ale jak zapisuje do dwóch(w drugiej mam rekordy których nie udało się z jakiegoś powodu załadować) to wtedy spada do tych 200 r/s - być może wina leży jednak po stronie procesu pentaho to musze jeszcze potestować.

Ale jeśli można to przy okazji chciałem zapytać o kolejną  rzecz, mianowicie partycjonowanie, które dajeo mi w kość od paru dni.
Mam dane załadowane do tabeli(tabela ma 70GB) i te dane chce załadować do innej tabeli która jest popartycjonowana(365 partycji po 1 na każdy dzień) - z tej tabeli będą tworzone raporty - głównie dzienne.
Zrobiłem triggera na tabeli głównej + funkcję rozrzucającą po partycjach tak jak jest w dokumentacji - wydajność tego jest tragiczna po 20 godzinach przerwałem zapytanie. Z tego co sprawdziłem na mniejszej ilości danych procedura działa szybciej niż ten trigger więc napisałem procedurę, która kursorem czyta tą dużą tabelę i rozrzuca dane bezpośrednio do tabel partycji ale już na tej dużej tabeli też przerwałem po 20 godzinach...
Ciekawe jest to, że podczas wykonywania tych zapytań zasoby sprzętowe są mało wykorzystywane(procesor dochodzi do 70%, RAM do 70%, macierz prawie w ogóle nie wykorzystana) - o co chodzi ?]]></content>
			<author>
				<name><![CDATA[kostek]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=2549</uri>
			</author>
			<updated>2015-09-11T06:35:33Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5543#p5543</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wolne działanie pomiędzy dwoma wirtualnymi maszynami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5541#p5541"/>
			<content type="html"><![CDATA[Napisz coś więcej, w jaki sposób ładujesz plik, używasz polecenia copy, podłączasz CSV-ła za pomocą fdw.
Jeśli generujesz inserty to czy wykorzystujesz polecenie prepare, a może wykorzystujesz pg_ctl.
A może rozważ replikacje?]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2015-09-02T13:48:08Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5541#p5541</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Wolne działanie pomiędzy dwoma wirtualnymi maszynami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5540#p5540"/>
			<content type="html"><![CDATA[Witam wszystkich

Bardzo proszę o pomoc, mam problem z wydajnością - insertowanie rekordów do PostgreSQL(9.2.7). Przesyłanie danych odbywa się miedzy dwoma maszynami wirtualnymi(fizycznie jest to ta sama maszyna). Do ładowania danych używam narzędzia Pentaho - czytanie danych z pliku(maszyna A) i ładowanie do bazy danych(maszyna B) - niestety maksymalny rate to 200 rekordów/s i wąskim gardłem na 100% jest ładowanie do bazy bo robiłem kilka testów:

A -> A(z pliku do pliku) - 12 000 r/s
A -> B(z pliku do ORACLE) - 5000 r/s
B -> B(z pliku do postgres, plik i baza na tej samej VM) - 3000 r/s
A -> B(z pliku do postgres) - [b][color=red]200 r/s[/color][/b]
 
Nie jest to też na 100% problem połączenia sieciowego ponieważ transfer plików pomiędzy A i B spokojnie osiąga 50Mb - transmisja i tak nie powinna iść poprzez sieć bo VMware wykrywa, że jest to połączenie wewnątrz tej samej fizycznej maszyny.
Bardzo prosze o jakieś wskazówki ew. co jeszcze mógłbym przetestować.


pozdrawiam]]></content>
			<author>
				<name><![CDATA[kostek]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=2549</uri>
			</author>
			<updated>2015-09-02T10:27:13Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5540#p5540</id>
		</entry>
</feed>
