PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Ukryte funkcje PostgreSQL

Ponieważ postgres jest o wiele bardziej rozsądny niż MySQL, nie ma zbyt wielu "sztuczek" do opisania;-)

Instrukcja zawiera kilka fajnych wskazówek dotyczących wydajności.

Kilka innych rzeczy związanych z wydajnością, o których należy pamiętać:

  • Upewnij się, że automatyczne odkurzanie jest włączone
  • Upewnij się, że przejrzałeś swój postgres.conf (efektywny rozmiar pamięci podręcznej, współdzielone bufory, pamięć robocza... wiele opcji do dostrojenia).
  • Użyj pgpool lub pgbouncer, aby ograniczyć do minimum swoje „prawdziwe” połączenia z bazą danych
  • Dowiedz się, jak działają WYJAŚNIJ i WYJAŚNIJ ANALIZĘ. Naucz się czytać wyniki.
  • CLUSTER sortuje dane na dysku według indeksu. Może znacznie poprawić wydajność dużych (w większości) tabel tylko do odczytu. Klastrowanie jest operacją jednorazową:gdy tabela jest później aktualizowana, zmiany nie są grupowane.

Oto kilka przydatnych rzeczy, które nie są związane z konfiguracją ani wydajnością.

Aby zobaczyć, co się aktualnie dzieje:

select * from pg_stat_activity;

Wyszukaj różne funkcje:

select * from pg_proc WHERE proname ~* '^pg_.*'

Znajdź rozmiar bazy danych:

select pg_database_size('postgres');
select pg_size_pretty(pg_database_size('postgres'));

Znajdź rozmiar wszystkich baz danych:

select datname, pg_size_pretty(pg_database_size(datname)) as size
  from pg_database;

Znajdź rozmiar tabel i indeksów:

select pg_size_pretty(pg_relation_size('public.customer'));

Lub, aby wyświetlić listę wszystkich tabel i indeksów (prawdopodobnie łatwiej jest to zobaczyć):

select schemaname, relname,
    pg_size_pretty(pg_relation_size(schemaname || '.' || relname)) as size
  from (select schemaname, relname, 'table' as type
          from pg_stat_user_tables
        union all
        select schemaname, relname, 'index' as type
          from pg_stat_user_indexes) x;

Aha, i możesz zagnieździć transakcje, wycofać częściowe transakcje++

test=# begin;
BEGIN
test=# select count(*) from customer where name='test';
 count 
-------
     0
(1 row)
test=# insert into customer (name) values ('test');
INSERT 0 1
test=# savepoint foo;
SAVEPOINT
test=# update customer set name='john';
UPDATE 3
test=# rollback to savepoint foo;
ROLLBACK
test=# commit;
COMMIT
test=# select count(*) from customer where name='test';
 count 
-------
     1
(1 row)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Prosta konfiguracja replikacji Slony-I.

  2. Tablice liczb całkowitych Postgres jako parametry?

  3. Średnia ruchoma na podstawie znaczników czasu w PostgreSQL

  4. Co sprawdzić, jeśli wykorzystanie pamięci PostgreSQL jest wysokie?

  5. Jak wykonać zapytanie o wartości null w polu typu json postgresql?