Karena postgres jauh lebih waras daripada MySQL, tidak banyak "trik" untuk dilaporkan;-)
Manual ini memiliki beberapa kiat kinerja yang bagus.
Beberapa hal terkait kinerja lainnya yang perlu diingat:
- Pastikan vakum otomatis diaktifkan
- Pastikan Anda telah membaca postgres.conf Anda (ukuran cache efektif, buffer bersama, memori kerja ... banyak opsi yang dapat disesuaikan).
- Gunakan pgpool atau pgbouncer untuk menjaga koneksi database "asli" Anda seminimal mungkin
- Pelajari cara kerja EXPLAIN dan EXPLAIN ANALYZE. Belajar membaca hasilnya.
- CLUSTER mengurutkan data pada disk berdasarkan indeks. Dapat secara dramatis meningkatkan kinerja tabel hanya-baca yang besar (kebanyakan). Pengelompokan adalah operasi satu kali:ketika tabel kemudian diperbarui, perubahan tidak dikelompokkan.
Berikut adalah beberapa hal yang menurut saya berguna yang tidak terkait dengan konfigurasi atau kinerja.
Untuk melihat apa yang sedang terjadi:
select * from pg_stat_activity;
Cari fungsi lain-lain:
select * from pg_proc WHERE proname ~* '^pg_.*'
Temukan ukuran basis data:
select pg_database_size('postgres');
select pg_size_pretty(pg_database_size('postgres'));
Temukan ukuran semua database:
select datname, pg_size_pretty(pg_database_size(datname)) as size
from pg_database;
Temukan ukuran tabel dan indeks:
select pg_size_pretty(pg_relation_size('public.customer'));
Atau, untuk membuat daftar semua tabel dan indeks (mungkin lebih mudah untuk melihat ini):
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, dan Anda dapat menyarangkan transaksi, mengembalikan sebagian transaksi++
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)