sql >> Databáze >  >> RDS >> PostgreSQL

Několik oblastí vylepšení v PostgreSQL 9.4

S beta verzí PostgreSQL 9.4 získaly DBA některé skvělé funkce, jako je pg_prewarm, JSONB, ALTER SYSTEM, replikační sloty a mnoho dalších. Z mnoha funkcí na architektonické úrovni prezentovaných v této verzi existuje také několik dalších drobných vylepšení, která jsem se pokusil pokrýt v tomto blogu.

Pohled pg_stat_activity obsahoval dva nové sloupce (backend_xid/backend_min) pro sledování informací o ID transakce. Sloupec pg_stat_activity.backend_xid pokrývá id aktuálně zahájené transakce nejvyšší úrovně a sloupec pg_stat_activity.backend_xmin pokrývá informace o minimálním běžícím XID. Podívejte se níže na dva výstupy dotazu provedené ve dvou různých situacích, první zobrazuje hierarchické informace o ID transakce ve sloupci backend_xmin relací, které se snaží získat zámek (tabulka/řádek) na stejném řádku, zatímco druhý pouze nezávislé transakce probíhají bez rušení stejný řádek. Tento druh informací pomáhá uživateli dozvědět se více o transakcích při čekání na dotazy nalezené v databázi.

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)

Nové klauzule v CREATE TABLESPACE/ALTER TABLESPACE jako možnosti „s“ a „přesunout“. Podobně meta příkaz db+ poskytuje podrobné informace o parametrech nastavených pro konkrétní TABLESPACE pomocí volby „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)

Nové systémové funkce poskytující informace o typu regclass, regproc, regprocedure, regoper, regoperator a regtype. Pro všechny typy jsou nové funkce to_regclass(), to_regproc(), to_regprocedure(), to_regoper(), to_regoperator() a 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)

Nová volba „-g“ v obslužném programu příkazového řádku CREATEUSER k určení členství v roli.

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

pohled pg_stat_all_tables má nový sloupec „n_mod_since_analyze“, který zdůrazňuje, že počet řádků byl od poslední analýzy tabulky upraven. Níže uvedené výstupy stručně o změnách ve sloupci „n_mod_since_analyze“, poprvé provedené manuální analýze a po určitém vyvolání autovakua na stole, během této doby můžeme zjistit, kolik řádků bylo ovlivněno různými voláními aktualizace katalogu.

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, je to nový pohled představený ke sledování všech vygenerovaných WAL a také zachycuje počet neúspěšných WAL. Pokud jste z Oracle, pak tento je jako „SEZNAM ARCHIVNÍCH LOGŮ“.

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, rozšiřující modul má nový sloupec queryid pro sledování interního hash kódu, vypočítaný ze stromu analýzy příkazu.

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

Děkuji.


  1. Výkon serveru SQL – testování v cloudu

  2. Připojte se k serveru SQL prostřednictvím PDO pomocí ovladače SQL Server Driver

  3. OMEZENÍ pro kontrolu hodnot ze vzdáleně související tabulky (přes spojení atd.)

  4. Jak vytvořit hierarchický rekurzivní dotaz MySQL?