PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Peu de domaines d'améliorations dans PostgreSQL 9.4

Avec la version bêta de PostgreSQL 9.4, les DBA ont reçu des fonctionnalités intéressantes comme pg_prewarm, JSONB, ALTER SYSTEM, Replication Slots et bien d'autres. Parmi les nombreuses fonctionnalités de niveau architectural présentées dans cette version, il existe également quelques autres améliorations mineures que j'ai tenté de couvrir dans ce blog.

La vue pg_stat_activity inclut deux nouvelles colonnes (backend_xid/backend_min) pour suivre les informations d'identification de la transaction. La colonne pg_stat_activity.backend_xid couvre l'identifiant de la transaction de niveau supérieur qui commence actuellement à être exécutée et la colonne pg_stat_activity.backend_xmin couvre les informations du XID minimal en cours d'exécution. Découvrez ci-dessous deux sorties de requête exécutées dans deux situations différentes, la première affiche les informations hiérarchiques de l'identifiant de transaction dans la colonne backend_xmin des sessions essayant d'acquérir un verrou (table/ligne) sur la même ligne, tandis que l'autre se contente d'une transaction indépendante se déroulant sans déranger la même rangée. Ce type d'informations aide l'utilisateur à en savoir plus sur les transactions en attente de requêtes trouvées dans la base de données.

postgres=# select pid,backend_xid,backend_xmin,query from pg_stat_activity where pid<>pg_backend_pid();
pid | backend_xid | backend_xmin | query
-------+-------------+--------------+---------------------------
22351 | 1905 | 1904 | insert into a values (1);
785 | 1904 | | insert into a values (1);
12796 | | 1904 | truncate a;
12905 | | 1904 | delete from a ;

postgres=# select pid,backend_xid,backend_xmin,query from pg_stat_activity where pid<>pg_backend_pid();
pid | backend_xid | backend_xmin | query
-------+-------------+--------------+-----------------------------
22351 | | | insert into foo values (1);
785 | 1900 | | insert into foo values (1);
(2 rows)

Nouvelles clauses dans CREATE TABLESPACE/ALTER TABLESPACE comme options "with" et "move" respectivement. De même, la méta-commande db+ donne des informations détaillées sur les paramètres définis pour un TABLESPACE particulier à l'aide de l'option "with".

postgres=# h create tablespace
Command: CREATE TABLESPACE
Description: define a new tablespace
Syntax:
CREATE TABLESPACE tablespace_name
[ OWNER user_name ]
LOCATION 'directory'
[ WITH ( tablespace_option = value [, ... ] ) ]

Example:

postgres=# create tablespace t1 location '/usr/local/pgpatch/pg/ts' with (seq_page_cost=1,random_page_cost=3);
CREATE TABLESPACE

postgres=# db+
List of tablespaces
Name | Owner | Location | Access privileges | Options | Description
------------+----------+--------------------------+-------------------+--------------------------------------+-------------
pg_default | postgres | | | |
pg_global | postgres | | | |
t1 | postgres | /usr/local/pgpatch/pg/ts | | {seq_page_cost=1,random_page_cost=3} |
(3 rows)

Nouvelles fonctions système pour donner des informations sur le type regclass, regproc, regprocedure, regoper, regoperator et regtype. Pour tous les types, les nouvelles fonctions sont to_regclass(), to_regproc(), to_regprocedure(), to_regoper(), to_regoperator() et to_regtype().

Example:
select to_regclass('pg_catalog.pg_class'),to_regtype('pg_catalog.int4'),to_regprocedure('pg_catalog.abs(numeric)'),to_regproc('pg_catalog.now'),to_regoper('pg_catalog.||/');
to_regclass | to_regtype | to_regprocedure | to_regproc | to_regoper
-------------+------------+-----------------+------------+------------
pg_class | integer | abs(numeric) | now | ||/
(1 row)

Nouvelle option "-g" dans l'utilitaire de ligne de commande CREATEUSER pour spécifier l'appartenance au rôle.

-bash-4.1$ createuser -g rw -p 10407 r1 
-bash-4.1$ psql -p 10407
psql (9.4beta1) Type "help" for help.

postgres=# dg
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication | {}
r1 | | {rw}

La vue pg_stat_all_tables, a une nouvelle colonne "n_mod_since_analyze", qui met en évidence le nombre de lignes a été modifié depuis la dernière analyse de la table. Ci-dessous, un bref aperçu des modifications de la colonne "n_mod_since_analyze", de la première analyse manuelle exécutée et après un certain temps d'autovacuum invoqué sur la table, pendant cette durée, nous pouvons déterminer le nombre de lignes affectées par différents appels de mise à jour du catalogue.

postgres=# analyze a;
ANALYZE
postgres=# select relname,last_autoanalyze,last_analyze,n_mod_since_analyze from pg_stat_all_tables where relname='a';
relname | last_autoanalyze | last_analyze | n_mod_since_analyze
---------+------------------+-------------------------------+---------------------
a | | 2014-05-03 02:09:51.002006-07 | 0
(1 row)

postgres=# insert into a values(generate_series(1,100));
INSERT 0 100
postgres=# select relname,last_autoanalyze,last_analyze,n_mod_since_analyze from pg_stat_all_tables where relname='a';
relname | last_autoanalyze | last_analyze | n_mod_since_analyze
---------+------------------+-------------------------------+---------------------
a | | 2014-05-03 02:09:51.002006-07 | 100
(1 row)

postgres=# truncate a;
TRUNCATE TABLE
postgres=# select relname,last_autoanalyze,last_analyze,n_mod_since_analyze from pg_stat_all_tables where relname='a';
relname | last_autoanalyze | last_analyze | n_mod_since_analyze
---------+------------------+-------------------------------+---------------------
a | | 2014-05-03 02:09:51.002006-07 | 100
(1 row)

postgres=# select relname,last_autoanalyze,last_analyze,n_mod_since_analyze from pg_stat_all_tables where relname='a';
relname | last_autoanalyze | last_analyze | n_mod_since_analyze
---------+-------------------------------+-------------------------------+---------------------
a | 2014-05-03 02:14:21.806912-07 | 2014-05-03 02:09:51.002006-07 | 0
(1 row)

pg_stat_archiver, c'est une nouvelle vue introduite pour suivre tous les WAL générés et il capture également le nombre de WAL en échec. Si vous êtes d'Oracle, celui-ci ressemble à "ARCHIVE LOG LIST".

postgres=# select * from pg_stat_archiver ;
-[ RECORD 1 ]------+------------------------------
archived_count | 167
last_archived_wal | 00000001000000000000009B
last_archived_time | 2014-05-02 20:42:36.230998-07
failed_count | 75
last_failed_wal | 000000010000000000000012
last_failed_time | 2014-05-01 12:09:57.087644-07
stats_reset | 2014-04-30 19:02:01.288521-07

pg_stat_statements, le module d'extension a une nouvelle colonne queryid pour suivre le code de hachage interne, calculé à partir de l'arbre d'analyse de l'instruction.

postgres=# select queryid,query from pg_stat_statements;
queryid | query
------------+------------------------------------
1144716789 | select * from pg_stat_statements ;
(1 row)

Merci.