sysadmin:postgresql
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
sysadmin:postgresql [2014/10/28 11:28] – modifica esterna 127.0.0.1 | sysadmin:postgresql [2015/02/12 09:01] – Indice su espressione feroda | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== PostgreSQL - Basi di configurazione ====== | ||
+ | |||
+ | - eseguire ''/ | ||
+ | - installare '' | ||
+ | - eseguire '' | ||
+ | - abilitare i log su stderr seguendo la documentazione di [[http:// | ||
+ | - NOTA LOG: attualmente su befair2 i log sono in ''/ | ||
+ | ====== Performance ====== | ||
+ | |||
* Performance Tuning: http:// | * Performance Tuning: http:// | ||
* Ottimo articolo segnalato da AndreaF http:// | * Ottimo articolo segnalato da AndreaF http:// | ||
+ | * Index Maintenance https:// | ||
+ | |||
+ | |||
+ | ===== Query utili su indici e loro utilizzo | ||
+ | |||
+ | Indici presenti | ||
+ | |||
+ | [0] SELECT * FROM pg_indexes; | ||
+ | |||
+ | ==== Ricerca indici doppi ==== | ||
+ | |||
+ | Query " | ||
+ | |||
+ | acs_service=# | ||
+ | | ||
+ | Query appropriata da http:// | ||
+ | |||
+ | [1] select indrelid:: | ||
+ | |||
+ | Nota: richiede di definire l' | ||
+ | |||
+ | ==== Utilizzo degli indici ==== | ||
+ | |||
+ | Utilizzo degli indici | ||
+ | | ||
+ | SELECT relid, | ||
+ | |||
+ | Filtra solo quelli utilizzati almeno una volta | ||
+ | | ||
+ | SELECT * from pg_stat_all_indexes WHERE relname=' | ||
+ | | ||
+ | Filtra solo quelli che sono stati efficaci almeno una volta | ||
+ | |||
+ | SELECT * from pg_stat_all_indexes WHERE schemaname=' | ||
+ | | ||
+ | Query più appropriata, | ||
+ | |||
+ | [2] select indexrelid:: | ||
+ | |||
+ | Ho modificato la query per trovare gli indici che sono stati efficaci almeno una volta: | ||
+ | |||
+ | [3] select indexrelid:: | ||
+ | |||
+ | Invece questa la query per indici usati senza essere efficaci | ||
+ | |||
+ | [4] select indexrelid:: | ||
+ | |||
+ | ===== Query per tabelle ===== | ||
+ | |||
+ | Tabelle vuote (stima. Per una risposta esaustiva vedere http:// | ||
+ | |||
+ | [5] SELECT schemaname, | ||
+ | |||
+ | ===== Esecuzione query al ... ===== | ||
+ | |||
+ | * [0] = ... indici totali | ||
+ | * [1] = ... indici doppi | ||
+ | * [2] = ... indici non usati | ||
+ | * [3] = ... indici che sono stati efficaci | ||
+ | * [4] = ... indici usati ma non efficaci | ||
+ | * [5] = ... tabelle vuote | ||
+ | |||
+ | ====== CREAZIONE E USO INDICI ======= | ||
+ | |||
+ | postgres# \d+ acs_service.connection_session; | ||
+ | | ||
+ | ------------+--------------------------+-----------------------------------------------------------------------------+---------+------------------------------------------------------------------------------------------------------------------ | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Indexes: | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | Foreign-key constraints: | ||
+ | " | ||
+ | Has OIDs: no | ||
+ | |||
+ | postgres# REINDEX TABLE " | ||
+ | REINDEX | ||
+ | postgres# EXPLAIN ANALYZE SELECT bcs.id, bcs.duration FROM acs_service.connection_session bcs WHERE bcs.duration IS NULL; | ||
+ | QUERY PLAN | ||
+ | ------------------------------------------------------------------------------------------------------------------------------------------ | ||
+ | Bitmap Heap Scan on connection_session bcs (cost=4.82..234.49 rows=70 width=20) (actual time=0.117..0.180 rows=67 loops=1) | ||
+ | | ||
+ | | ||
+ | Index Cond: (duration IS NULL) | ||
+ | Total runtime: 0.208 ms (5 rows) | ||
+ | |||
+ | postgres=# EXPLAIN ANALYZE SELECT bcs.id, bcs.duration FROM acs_service.connection_session bcs WHERE bcs.duration IS NOT NULL; | ||
+ | QUERY PLAN | ||
+ | ------------------------------------------------------------------------------------------------------------------------------- | ||
+ | Seq Scan on connection_session bcs (cost=0.00..2829.78 rows=149208 width=20) (actual time=0.008..36.858 rows=149211 loops=1) | ||
+ | | ||
+ | Total runtime: 46.523 ms (3 rows) | ||
+ | | ||
+ | ===== Se creo indice sull' | ||
+ | |||
+ | Niente .... :( | ||
+ | |||
+ | postgres=# CREATE INDEX ON " | ||
+ | CREATE INDEX | ||
+ | postgres=# REINDEX TABLE " | ||
+ | REINDEX | ||
+ | postgres=# EXPLAIN ANALYZE SELECT bcs.id, bcs.duration FROM acs_service.connection_session bcs WHERE bcs.duration IS NOT NULL; | ||
+ | QUERY PLAN | ||
+ | ------------------------------------------------------------------------------------------------------------------------------- | ||
+ | Seq Scan on connection_session bcs (cost=0.00..2829.90 rows=149220 width=20) (actual time=0.011..38.323 rows=149226 loops=1) | ||
+ | | ||
+ | Total runtime: 48.491 ms | ||
+ | (3 rows) | ||
+ | |||
+ | postgres=# EXPLAIN ANALYZE SELECT bcs.id, bcs.duration FROM acs_service.connection_session bcs WHERE bcs.duration IS NULL; | ||
+ | QUERY PLAN | ||
+ | ------------------------------------------------------------------------------------------------------------------------------------------ | ||
+ | | ||
+ | | ||
+ | | ||
+ | Index Cond: (duration IS NULL) | ||
+ | Total runtime: 0.148 ms | ||
+ | (5 rows) | ||
+ | |||
+ | |||
+ | ====== Occupazione disco ====== | ||
+ | |||
+ | ===== Database ===== | ||
+ | |||
+ | Lo restituisce pure in formato carino :) | ||
+ | |||
+ | # select (pg_database_size(current_database())/ | ||
+ | |||
+ | ===== Tabelle ===== | ||
+ | |||
+ | Restituisce un elenco ordinato in modo discendente di: | ||
+ | |||
+ | * schema (aka " | ||
+ | * tabella | ||
+ | * occupazione su disco | ||
+ | * occupazione totale compresi indici | ||
+ | * numero stimato di righe | ||
+ | |||
+ | SELECT table_schema, | ||
+ | (size/ | ||
+ | (total_size/ | ||
+ | (CASE WHEN pg_class.reltuples > 0 THEN | ||
+ | basic_infos.size/ | ||
+ | ELSE 0 | ||
+ | END | ||
+ | )::bigint AS estimated_row_count | ||
+ | FROM ( | ||
+ | SELECT table_schema, | ||
+ | pg_relation_size('"' | ||
+ | pg_total_relation_size('"' | ||
+ | FROM information_schema.tables | ||
+ | WHERE table_schema NOT IN (' | ||
+ | ORDER BY size DESC, total_size DESC | ||
+ | ) AS basic_infos | ||
+ | JOIN pg_class | ||
+ | ON ('"' | ||
+ | |||
+ | Questa query funziona su PostgreSQL 8.4. E credo valga anche per PostgreSQL >= 9.0. Potrebbe essere interessante pubblicarla da qualche parte. | ||
+ | |||
+ | |||
+ | ====== Informazioni varie... ====== | ||
===== Query comode x debug ===== | ===== Query comode x debug ===== | ||
* Processi attivi: '' | * Processi attivi: '' | ||
- | * Indici presenti: '' | ||
- | * Utilizzo degli indici: '' | ||
* Utilizzo delle tabelle: '' | * Utilizzo delle tabelle: '' | ||
* Lock da https:// | * Lock da https:// |