sql >> Database >  >> RDS >> PostgreSQL

Weinig verbeterpunten in PostgreSQL 9.4

Met de bètaversie van PostgreSQL 9.4 hebben DBA's een aantal coole functies gekregen, zoals pg_prewarm, JSONB, ALTER SYSTEM, Replication Slots en nog veel meer. Naast de talrijke functies op architecturaal niveau die in deze versie worden gepresenteerd, zijn er ook enkele andere kleine verbeteringen die ik in deze blog heb geprobeerd te bespreken.

pg_stat_activity view bevatte twee nieuwe kolommen (backend_xid/backend_min) om de transactie-ID-informatie bij te houden. De kolom pg_stat_activity.backend_xid dekt de id van de transactie op het hoogste niveau die momenteel wordt uitgevoerd en de kolom pg_stat_activity.backend_xmin dekt de informatie van de minimale actieve XID. Bekijk hieronder twee query-outputs die in twee verschillende situaties zijn uitgevoerd, de eerste toont de hiërarchische informatie van de transactie-ID in de backend_xmin-kolom van sessies die proberen lock (tabel/rij) op dezelfde rij te verkrijgen, terwijl de andere slechts een onafhankelijke transactie is die plaatsvindt zonder te storen dezelfde rij. Dit soort informatie helpt de gebruiker om meer te weten te komen over de transacties bij het wachten op zoekopdrachten die in de database worden gevonden.

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)

Nieuwe clausules in CREATE TABLESPACE/ALTER TABLESPACE als respectievelijk "with" en "move". Evenzo meta-opdracht db+ om gedetailleerde informatie te geven over de parameters die zijn ingesteld voor een bepaalde TABLESPACE met behulp van de optie "met".

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)

Nieuwe systeemfuncties om informatie te geven over het type regclass,regproc,regprocedure,regoper,regoperator en regtype. Voor alle typen zijn nieuwe functies to_regclass(), to_regproc(), to_regprocedure(), to_regoper(), to_regoperator() en 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)

Nieuwe "-g" optie in opdrachtregelhulpprogramma CREATEUSER om rollidmaatschap te specificeren.

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

pg_stat_all_tables view, heeft een nieuwe kolom "n_mod_since_analyze", waarin het aantal rijen wordt gemarkeerd dat is gewijzigd sinds de tabel voor het laatst is geanalyseerd. Hieronder wordt kort weergegeven over de "n_mod_since_analyze"-kolomwijzigingen, de eerste handmatige analyse uitgevoerd en na enige tijd autovacuüm aangeroepen op de tafel, in deze tijdsduur kunnen we uitzoeken hoeveel rijen zijn uitgevoerd met verschillende catalogus-update-aanroepen.

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, het is een nieuwe weergave die is geïntroduceerd om alle gegenereerde WAL's bij te houden en het legt ook het aantal mislukte WAL's vast. Als je van Oracle bent, is dit zoiets als "ARCHIEF LOG LIJST".

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, uitbreidingsmodule heeft een nieuwe kolom query-id om de interne hash-code te volgen, berekend op basis van de ontledingsboom van de instructie.

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

Dank je.


  1. Afstemmen van SQL Server Reporting Services

  2. Hoe REGEXP werkt in MariaDB

  3. Een schemagebonden weergave maken in SQL Server

  4. Haal records op met de hoogste/kleinste <whatever> per groep