sql >> Database teknologi >  >> RDS >> PostgreSQL

Skjulte funktioner i PostgreSQL

Da postgres er meget mere fornuftigt end MySQL, er der ikke så mange "tricks" at rapportere om;-)

Manualen har nogle gode præstationstip.

Et par andre præstationsrelaterede ting at huske på:

  • Sørg for, at autovakuum er slået til
  • Sørg for, at du har gennemgået din postgres.conf (effektiv cachestørrelse, delte buffere, arbejdshukommelse ... masser af muligheder for at tune).
  • Brug pgpool eller pgbouncer for at holde dine "rigtige" databaseforbindelser på et minimum
  • Lær, hvordan EXPLAIN og EXPLAIN ANALYSE virker. Lær at læse outputtet.
  • CLUSTER sorterer data på disk i henhold til et indeks. Kan dramatisk forbedre ydeevnen af ​​store (for det meste) skrivebeskyttede tabeller. Clustering er en engangsoperation:Når tabellen efterfølgende opdateres, klynges ændringerne ikke.

Her er et par ting, jeg har fundet nyttige, som ikke er konfigurations- eller ydeevnerelaterede i sig selv.

For at se, hvad der sker i øjeblikket:

select * from pg_stat_activity;

Søg i diverse funktioner:

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

Find størrelsen på databasen:

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

Find størrelsen på alle databaser:

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

Find størrelsen på tabeller og indekser:

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

Eller for at liste alle tabeller og indekser (sandsynligvis nemmere at få et overblik over dette):

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;

Åh, og du kan indlejre transaktioner, rollback delvise transaktioner++

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. Bedste type indeksering, når der er LIKE-klausul

  2. Dataintegritet og præstationsovervejelser i MySQL semisynkron replikering

  3. Hvilken version af PostgreSQL kører jeg?

  4. Sådan fjerner du de efterfølgende mellemrum efter månedens navn i Oracle