PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Kilka obszarów ulepszeń w PostgreSQL 9.4

Wraz z wydaniem beta PostgreSQL 9.4 administratorzy baz danych otrzymali kilka fajnych funkcji, takich jak pg_prewarm, JSONB, ALTER SYSTEM, sloty replikacji i wiele innych. Spośród wielu funkcji na poziomie architektonicznym prezentowanych w tej wersji, istnieje również kilka innych drobnych ulepszeń, które próbowałem omówić na tym blogu.

Widok pg_stat_activity zawierał dwie nowe kolumny (backend_xid/backend_min) do śledzenia informacji o identyfikatorze transakcji. Kolumna pg_stat_activity.backend_xid zawiera identyfikator transakcji najwyższego poziomu, która jest aktualnie wykonywana, a kolumna pg_stat_activity.backend_xmin zawiera informacje o minimalnym uruchomionym XID. Sprawdź poniżej dwa wyjścia zapytań wykonywane w dwóch różnych sytuacjach, pierwszy pokazuje hierarchiczne informacje o identyfikatorze transakcji w kolumnie backend_xmin sesji próbujących uzyskać lock(table/row) w tym samym wierszu, podczas gdy drugi to tylko niezależne transakcje odbywające się bez przeszkadzania w tym samym rzędzie. Tego rodzaju informacje pomagają użytkownikowi dowiedzieć się więcej o transakcjach podczas oczekiwania na zapytania znalezione w bazie danych.

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)

Nowe klauzule w CREATE TABLESPACE/ALTER TABLESPACE jako odpowiednio opcje „with” i „move”. Podobnie metapolecenie db+ daje szczegółowe informacje o parametrach ustawionych dla konkretnego TABLESPACE za pomocą opcji „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)

Nowe funkcje systemowe dostarczające informacji o typie regclass,regproc,regprocedure,regoper,regoperator i regtype. Dla wszystkich typów nowe funkcje to to_regclass(), to_regproc(), to_regprocedure(), to_regoper(), to_regoperator() i 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)

Nowa opcja „-g” w narzędziu wiersza poleceń CREATEUSER do określania członkostwa w 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}

Widok pg_stat_all_tables ma nową kolumnę „n_mod_since_analyze”, która podświetla liczbę wierszy, która została zmodyfikowana od ostatniej analizy tabeli. Poniżej informacje wyjściowe na temat zmian w kolumnie „n_mod_since_analyze”, wykonania pierwszej ręcznej analizy i po pewnym czasie wywołania autovacuum na tabeli, w tym czasie możemy obliczyć, ile wierszy zostało wykonanych z różnymi wywołaniami aktualizacji 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, to nowy widok wprowadzony do śledzenia wszystkich wygenerowanych plików WAL, a także przechwytuje liczbę nieudanych plików WAL. Jeśli jesteś z Oracle, to jest jak „LISTA DZIENNIKA ARCHIWUM”.

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, moduł rozszerzenia ma nowy identyfikator zapytania kolumny do śledzenia wewnętrznego kodu skrótu, obliczonego z drzewa analizy instrukcji.

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

Dziękuję.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. domyślna strefa czasowa postgres

  2. Funkcja SQL jest bardzo powolna w porównaniu z zapytaniem bez opakowania funkcji

  3. Jak mogę użyć zapytania z symbolem zastępczym w cudzysłowie? (perl / postgresql)

  4. Adapter Postgresql (pg):nie można połączyć się z serwerem

  5. Zarządzanie wysoką dostępnością w PostgreSQL – Część III:Patroni