PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Скрити характеристики на PostgreSQL

Тъй като postgres е много по-разумен от MySQL, няма толкова много "трикове", за които да докладвате;-)

Ръководството съдържа някои хубави съвети за ефективност.

Няколко други неща, свързани с производителността, които трябва да имате предвид:

  • Уверете се, че автоматичното вакуумиране е включено
  • Уверете се, че сте преминали през вашия postgres.conf (ефективен размер на кеша, споделени буфери, работна памет ... много опции за настройка).
  • Използвайте pgpool или pgbouncer, за да поддържате вашите „истински“ връзки с база данни до минимум
  • Научете как работят EXPLAIN и EXPLAIN ANALYZE. Научете се да четете изхода.
  • CLUSTER сортира данните на диска според индекс. Може драстично да подобри производителността на големи (предимно) таблици само за четене. Групирането е еднократна операция:когато таблицата се актуализира впоследствие, промените не се групират.

Ето няколко неща, които намерих за полезни, които сами по себе си не са свързани с конфигурацията или производителността.

За да видите какво се случва в момента:

select * from pg_stat_activity;

Търсене на различни функции:

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

Намерете размера на базата данни:

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

Намерете размера на всички бази данни:

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

Намерете размера на таблиците и индексите:

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

Или, за да изброите всички таблици и индекси (вероятно по-лесно да направите изглед на това):

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;

О, и можете да вложите транзакции, да отмените частични транзакции++

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. Postgres не използва индекс, когато сканирането на индекса е много по-добър вариант

  2. Механизми за физическа репликация в PostgreSQL

  3. Как да напиша ограничение относно максимален брой редове в postgresql?

  4. объркване на postgresql порт 5433 или 5432?

  5. Създаване на студен режим на готовност за PostgreSQL с помощта на Amazon AWS