PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Versteckte Funktionen von PostgreSQL

Da Postgres viel vernünftiger ist als MySQL, gibt es nicht so viele "Tricks", über die man berichten könnte;-)

Das Handbuch enthält einige nette Leistungstipps.

Ein paar andere leistungsbezogene Dinge, die Sie beachten sollten:

  • Vergewissern Sie sich, dass die Selbstbereinigung eingeschaltet ist
  • Stellen Sie sicher, dass Sie Ihre postgres.conf durchgegangen sind (effektive Cache-Größe, gemeinsam genutzte Puffer, Arbeitsspeicher ... viele Optionen zum Einstellen).
  • Verwenden Sie pgpool oder pgbouncer, um Ihre "echten" Datenbankverbindungen auf ein Minimum zu beschränken
  • Erfahren Sie, wie EXPLAIN und EXPLAIN ANALYZE funktionieren. Lernen Sie, die Ausgabe zu lesen.
  • CLUSTER sortiert Daten auf der Festplatte nach einem Index. Kann die Leistung großer (meistens) schreibgeschützter Tabellen erheblich verbessern. Clustering ist ein einmaliger Vorgang:Wenn die Tabelle anschließend aktualisiert wird, werden die Änderungen nicht geclustert.

Hier sind ein paar Dinge, die ich als nützlich empfunden habe und die per se nichts mit der Konfiguration oder der Leistung zu tun haben.

So sehen Sie, was gerade passiert:

select * from pg_stat_activity;

Verschiedene Funktionen durchsuchen:

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

Größe der Datenbank ermitteln:

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

Größe aller Datenbanken ermitteln:

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

Finden Sie die Größe von Tabellen und Indizes:

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

Oder, um alle Tabellen und Indizes aufzulisten (wahrscheinlich einfacher, sich das anzusehen):

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;

Oh, und Sie können Transaktionen verschachteln, Teiltransaktionen rückgängig machen++

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)