PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Няколко области на подобрения в PostgreSQL 9.4

С бета версията на PostgreSQL 9.4, DBA получиха някои страхотни функции като pg_prewarm, JSONB, ALTER SYSTEM, слотове за репликация и много други. От многобройните функции на архитектурно ниво, представени в тази версия, има и други няколко дребни подобрения, които се опитах да обхвана в този блог.

Изгледът pg_stat_activity включва две нови колони (backend_xid/backend_min) за проследяване на информацията за идентификатора на транзакцията. Колоната pg_stat_activity.backend_xid покрива идентификатора на транзакцията от най-високо ниво, която в момента започва да се изпълнява, а колоната pg_stat_activity.backend_xmin покрива информацията за минимално изпълнявания XID. Вижте по-долу два изхода на заявка, изпълнени в две различни ситуации, като първият показва йерархичната информация на идентификатора на транзакцията в колоната backend_xmin на сесиите, които се опитват да придобият заключване (таблица/ред) на същия ред, докато другият е само независими транзакции, които се случват без смущаване същия ред. Този вид информация помага на потребителя да научи повече за транзакциите, когато чака заявки, намерени в базата данни.

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)

Нови клаузи в CREATE TABLESPACE/ALTER TABLESPACE като опции „with“ и „move“ съответно. По същия начин метакомандата db+ за предоставяне на подробна информация за параметрите, зададени за конкретно ТАБЛИЧНО ПРОСТРАНСТВО, използвайки опцията „с“.

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)

Нови системни функции за предоставяне на информация за тип regclass, regproc, regprocedure, regoper, regoperator и regtype. За всички типове новите функции са to_regclass(), to_regproc(), to_regprocedure(), to_regoper(), to_regoperator() и 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)

Нова опция „-g“ в помощната програма на командния ред CREATEUSER за определяне на членство в ролята.

-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, има нова колона „n_mod_since_analyze“, която подчертава броя на редовете е променен от последното анализиране на таблицата. По-долу извежда накратко за промените в колоната „n_mod_since_analyze“, за първи път е изпълнен ръчен анализ и след известно време автоматично извикано вакуумиране на таблицата, в тази продължителност можем да разберем колко реда са извършени с различни извиквания за актуализиране на каталог.

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, това е нов изглед, въведен за проследяване на всички генерирани WAL и също така улавя броя на неуспешните WAL. Ако сте от Oracle, тогава това е като „АРХИВЕН СПИСЪК НА РЕГЛАМЕНТ”.

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, модулът за разширение има нов идентификатор на заявка за колона за проследяване на вътрешния хеш код, изчислен от дървото за синтактичен анализ на израза.

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

Благодаря.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Конфигурация на Puma Cluster на Heroku

  2. Как да наблюдавате PostgreSQL с помощта на Nagios

  3. Мога ли да напиша PostgreSQL функции на Ruby on Rails?

  4. Намерете зависими обекти за таблица или изглед

  5. HikariCP Postgresql Driver твърди, че не приема JDBC URL