Depuis postgres est beaucoup plus sain d'esprit que MySQL, il n'y a pas que de nombreux "trucs" à faire rapport sur ;-)
Le manuel a quelques belles performances de conseils.
Quelques autres liées à la performance de choses à garder à l'esprit:
- Assurez-vous que autovacuum est allumé
- Assurez-vous que vous avez traversé votre postgres.conf (à compter de la taille du cache, partagée, de tampons, de travail mem ... beaucoup d'options à régler).
- Utilisation pgpool ou pgbouncer de garder votre "vrai" connexions de base de données à un minimum
- Apprenez comment EXPLIQUER et EXPLIQUER ANALYSER des oeuvres. Apprendre à lire la sortie.
-
CLUSTER sortes de données sur le disque en fonction d'un indice. Peut considérablement améliorer les performances de large (pour la plupart) tables en lecture seule. Le Clustering est un temps de fonctionnement: lorsque la table est par la suite mis à jour, les modifications ne sont pas regroupés.
Voici quelques choses que j'ai trouvé utiles qui ne sont pas la configuration ou lié à la performance en soi.
Pour voir ce qui est le cas actuellement:
select * from pg_stat_activity;
Recherche divers fonctions:
select * from pg_proc WHERE proname ~* '^pg_.*'
Trouver la taille de la base de données:
select pg_database_size('postgres');
select pg_size_pretty(pg_database_size('postgres'));
Trouver la taille de toutes les bases de données:
select datname, pg_size_pretty(pg_database_size(datname)) as size
from pg_database;
Trouver la taille des tables et des index:
select pg_size_pretty(pg_relation_size('public.customer'));
Ou, à la liste de toutes les tables et les index (probablement plus facile de faire une vue de ceci):
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, et vous pouvez imbriquer des transactions, la restauration partielle des transactions++
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)