Mam dwa identyczne serwery (pod względem sprzętowym), oba są standardowymi instalacjami Windows Server 2008 R2 z minimalnym zainstalowanym oprogramowaniem (w zasadzie mój kod i wymagane rzeczy, takie jak JVM itp.).
Na jednym serwerze działam na serwerze SQL 2005, na drugim serwerze postgresql 9.1. Różnica w wydajności między tymi dwoma serwerami jest oszałamiająca, jest tak zły na postgresql, że żałuję mojej początkowej wypowiedzi „użyjmy postgresql zamiast płacić za licencję serwera SQL” mojemu szefowi. Mówimy o różnicach 30 sekund vs 15 minut dla tego samego polecenia i nie jest to tylko jedno polecenie, to dowolne zapytanie lub polecenie, które na niego rzucam. Oba mają prawie takie same dane (rekordy zostały wstawione w innej kolejności), a obie bazy danych mają dokładnie taką samą strukturę / indeksy itp.
Ale mam nadzieję, że to tylko kwestia strojenia wydajności. Chodzi o to, że serwer sql używa prawie 32 koncertów pamięci RAM na serwerze, podczas gdy postgresl nie używa niczego, zdecydowanie mniej niż koncert, chociaż tak naprawdę tego nie rozgryzłem.
Jak uzyskać postgresql do korzystania z ponad 20 koncertów pamięci RAM? Serwery te zostały zbudowane specjalnie dla tego rodzaju bazy danych, więc moim zdaniem RAM nieużywany przez bazę danych i procesy wspierające.
SET effective_cache_size=18G;
(ustawienie domyślne jest bardzo niskie) BTW: zakładając, że jest to maszyna 64-bitowa (bez PTE)