PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Einige Verbesserungsbereiche in PostgreSQL 9.4

Mit der Betaversion von PostgreSQL 9.4 haben DBAs einige coole Funktionen wie pg_prewarm, JSONB, ALTER SYSTEM, Replication Slots und viele mehr erhalten. Von den zahlreichen Features auf architektonischer Ebene, die in dieser Version vorgestellt werden, gibt es ebenso einige kleinere Verbesserungen, die ich in diesem Blog zu behandeln versucht habe.

Die pg_stat_activity-Ansicht enthielt zwei neue Spalten (backend_xid/backend_min), um die Transaktions-ID-Informationen zu verfolgen. Die Spalte pg_stat_activity.backend_xid enthält die ID der Transaktion auf oberster Ebene, die derzeit ausgeführt wird, und die Spalte pg_stat_activity.backend_xmin enthält die Informationen der minimal ausgeführten XID. Sehen Sie sich unten zwei Abfrageausgaben an, die in zwei verschiedenen Situationen ausgeführt werden. Die erste zeigt die hierarchischen Informationen der Transaktions-ID in der Spalte backend_xmin der Sitzungen, die versuchen, eine Sperre (Tabelle/Zeile) für dieselbe Zeile zu erwerben, während die andere nur eine unabhängige Transaktion ist, die ohne Störung stattfindet dieselbe Reihe. Diese Art von Informationen helfen dem Benutzer, mehr über die Transaktionen zu erfahren, wenn in der Datenbank gefundene Abfragen warten.

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)

Neue Klauseln in CREATE TABLESPACE/ALTER TABLESPACE als „with“- bzw. „move“-Optionen. In ähnlicher Weise liefert der Metabefehl db+ detaillierte Informationen über die Parameter, die für einen bestimmten TABLESPACE mit der Option „with“ festgelegt wurden.

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)

Neue Systemfunktionen, um Informationen zu den Typen regclass, regproc, regprocedure, regoper, regoperator und regtype bereitzustellen. Für alle Typen sind die neuen Funktionen to_regclass(), to_regproc(), to_regprocedure(), to_regoper(), to_regoperator() und 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)

Neue „-g“-Option im Befehlszeilendienstprogramm CREATEUSER zur Angabe der Rollenmitgliedschaft.

-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}

Die pg_stat_all_tables-Ansicht hat eine neue Spalte „n_mod_since_analyze“, die hervorhebt, wie viele Zeilen seit der letzten Analyse der Tabelle geändert wurden. Unten wird kurz über die Spaltenänderungen „n_mod_since_analyze“ ausgegeben, die erstmalige manuelle Analyse wurde ausgeführt und nach einiger Zeit wurde die Tabelle autovacuum aufgerufen. In dieser Zeit können wir herausfinden, wie viele Zeilen von verschiedenen Katalogaktualisierungsaufrufen betroffen sind.

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, eine neue Ansicht, die eingeführt wurde, um alle generierten WALs zu verfolgen, und die auch die Anzahl der fehlgeschlagenen WALs erfasst. Wenn Sie von Oracle sind, dann ist dies wie „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, Erweiterungsmodul hat eine neue Spalte queryid, um den internen Hash-Code zu verfolgen, der aus dem Analysebaum der Anweisung berechnet wird.

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

Danke.