PostgreSQL 13.0 wurde am 24.09.2020 veröffentlicht, daher werde ich es installieren.
Die Umgebung ist wie folgt.
--CentOS 7.5 (Firewall deaktiviert)
Der Installationsvorgang ist fast der gleiche wie für PostgreSQL 12 unten.
Ab 12.3 sind LLVM-bezogene Bibliotheken erforderlich, um postgresXX-devel zu installieren. postgresXX-devel wird beim Kompilieren von Erweiterungen verwendet. Wenn Sie nur PostgreSQL ausführen möchten, müssen Sie es nicht installieren.
# yum -y install epel-release centos-release-scl
Installieren Sie das PostgreSQL-Repository-Paket für CentOS. Eine Liste der URLs für Repository-Pakete für jedes Betriebssystem finden Sie auf den folgenden Websites.
https://yum.postgresql.org/repopackages.php
# yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
~ Ausgelassen ~
Running transaction
Installing : pgdg-redhat-repo-42.0-13.noarch 1/1
Verifying : pgdg-redhat-repo-42.0-13.noarch 1/1
Installed:
pgdg-redhat-repo.noarch 0:42.0-13
Complete!
Installieren Sie PostgreSQL.
# yum -y install postgresql13-contrib postgresql13-devel
~ Ausgelassen ~
Installed:
postgresql13-contrib.x86_64 0:13.0-1PGDG.rhel7 postgresql13-devel.x86_64 0:13.0-1PGDG.rhel7
Dependency Installed:
audit-libs-python.x86_64 0:2.8.5-4.el7 checkpolicy.x86_64 0:2.5-8.el7 devtoolset-7-binutils.x86_64 0:2.28-11.el7
devtoolset-7-gcc.x86_64 0:7.3.1-5.16.el7 devtoolset-7-gcc-c++.x86_64 0:7.3.1-5.16.el7 devtoolset-7-libstdc++-devel.x86_64 0:7.3.1-5.16.el7
devtoolset-7-runtime.x86_64 0:7.1-4.el7 libcgroup.x86_64 0:0.41-21.el7 libedit-devel.x86_64 0:3.0-12.20121213cvs.el7
libicu.x86_64 0:50.2-4.el7_7 libicu-devel.x86_64 0:50.2-4.el7_7 libsemanage-python.x86_64 0:2.5-14.el7
libxslt.x86_64 0:1.1.28-5.el7 llvm-toolset-7-clang.x86_64 0:5.0.1-4.el7 llvm-toolset-7-clang-libs.x86_64 0:5.0.1-4.el7
llvm-toolset-7-compiler-rt.x86_64 0:5.0.1-2.el7 llvm-toolset-7-libomp.x86_64 0:5.0.1-2.el7 llvm-toolset-7-llvm-libs.x86_64 0:5.0.1-8.el7
llvm-toolset-7-runtime.x86_64 0:5.0.1-4.el7 llvm5.0.x86_64 0:5.0.1-7.el7 llvm5.0-devel.x86_64 0:5.0.1-7.el7
llvm5.0-libs.x86_64 0:5.0.1-7.el7 ncurses-devel.x86_64 0:5.9-14.20130511.el7_4 policycoreutils-python.x86_64 0:2.5-34.el7
postgresql13.x86_64 0:13.0-1PGDG.rhel7 postgresql13-libs.x86_64 0:13.0-1PGDG.rhel7 postgresql13-server.x86_64 0:13.0-1PGDG.rhel7
python-IPy.noarch 0:0.75-6.el7 scl-utils.x86_64 0:20130529-19.el7 setools-libs.x86_64 0:3.3.8-4.el7
Dependency Updated:
audit.x86_64 0:2.8.5-4.el7 audit-libs.x86_64 0:2.8.5-4.el7 libselinux.x86_64 0:2.5-15.el7 libselinux-python.x86_64 0:2.5-15.el7
libselinux-utils.x86_64 0:2.5-15.el7 libsemanage.x86_64 0:2.5-14.el7 libsepol.x86_64 0:2.5-10.el7 policycoreutils.x86_64 0:2.5-34.el7
Complete!
PostgreSQL wird unter "/ usr / pgsql-13 /" installiert.
# ls -l /usr/pgsql-13/
total 20
drwxr-xr-x. 2 root root 4096 Sep 25 23:11 bin
drwxr-xr-x. 3 root root 23 Sep 25 23:11 doc
drwxr-xr-x. 6 root root 4096 Sep 25 23:11 include
drwxr-xr-x. 5 root root 4096 Sep 25 23:11 lib
drwxr-xr-x. 8 root root 4096 Sep 25 23:11 share
Führen Sie den folgenden Befehl aus, um PostgreSQL automatisch zu starten.
# systemctl enable postgresql-13.service
Erstellen Sie einen Datenbankcluster. Ich laufe als Root-Benutzer. Die Datenbankdatei wird standardmäßig in "/ var / lib / pgsql / 13 / data /" erstellt, diesmal jedoch in "/ data /" und darunter geändert. Sie kann durch die Umgebungsvariable "PGDATA" in der Datei postgresql-13.service angegeben werden.
# vi /usr/lib/systemd/system/postgresql-13.service
Vorher ändern)
Environment=PGDATA=/var/lib/pgsql/13/data/
Nach der veränderung)
Environment=PGDATA=/data/
# systemctl daemon-reload
Führen Sie dann den folgenden Befehl aus, um den Datenbankcluster zu erstellen.
# PGSETUP_INITDB_OPTIONS="-E UTF8 --no-locale" /usr/pgsql-13/bin/postgresql-13-setup initdb
Initializing database ... OK
Bestätigen Sie, dass es unter "/ data /" generiert wird.
# cat /data/PG_VERSION
13
Fügen Sie vor dem Booten das PostgreSQL-Bin-Verzeichnis zum Pfad hinzu.
# su - postgres
/var/lib/pgsql/.pgsql_Fügen Sie den Pfad zu Ihrem Profil hinzu.
# vi /var/lib/pgsql/.pgsql_profile
PATH=/usr/pgsql-13/bin:$PATH
export PATH
Ändern Sie PGDATA.
# vi /var/lib/pgsql/.bash_profile
#PGDATA=/var/lib/pgsql/12/data
PGDATA=/data
# source ~/.bash_profile
Starten Sie PostgreSQL mit "pg_ctl start".
$ pg_ctl start
2020-09-25 23:16:08.611 CEST [12910] HINT: Future log output will appear in directory "log".
done
server started
Lassen Sie uns den erstellten Datenbankcluster überprüfen. Lassen Sie uns eine Liste der Versionen und Datenbanken anzeigen.
$ psql -V
psql (PostgreSQL) 13.0
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
Erstellen Sie einen Benutzer ("testuser") und eine Datenbank ("testdb").
$ createuser --login --pwprompt testuser
Enter password for new role:
Enter it again:
$ createdb --owner=testuser testdb
PostgreSQL erlaubt standardmäßig keine Remoteverbindung. Ändern Sie daher die Einstellungen.
# vi /data/postgresql.conf
* Standardmäßig, "/var/lib/pgsql/13/data/postgresql.conf」
Vorher ändern)
#listen_addresses = 'localhost'
Nach der veränderung)
listen_addresses = '*'
Ändern Sie dann pg_hba.conf.
# vi /data/pg_hba.conf
* Standardmäßig, "/var/lib/pgsql/13/data/pg_hba.conf」
# "local" is for Unix domain socket connections only
local testdb testuser md5
→ Eine Zeile hinzugefügt, damit der Testbenutzer eine Verbindung zu testdb von local zu md5 herstellen kann.
local all all peer
# IPv4 local connections:
host all all 192.168.10.0/24 md5
→192.168.10.0/Es wurde eine Zeile hinzugefügt, damit Sie von 24 (dieser Serverumgebung) aus eine Verbindung herstellen können.
host all all 127.0.0.1/32 ident
Laden Sie die Konfigurationsänderungen neu.
$ pg_ctl reload
* Oder systemctl postgresql neu laden-13 sollte in Ordnung sein.
Ändern Sie das Passwort des Postgres-Benutzers (obwohl Sie es nicht müssen).
$ psql
alter role postgres with password 'postgres';
Überprüfen Sie die Verbindung aus der Ferne (A5: Ich habe die Verbindung über SQL überprüft, aber die Erklärung wird weggelassen.)
Führen Sie die folgenden Schritte aus, um die lokale Verbindung zu überprüfen.
$ psql testdb testuser
Password for user testuser:
psql (13.0)
Type "help" for help.
testdb=>
Erstellen Sie eine Tabelle und füllen Sie sie mit Daten.
testdb=> create table test (id int, value text);
CREATE TABLE
testdb=> insert into test (id, value) values (1, 'test text');
INSERT 0 1
testdb=> select * from test;
id | value
----+-----------
1 | test text
(1 row)
"\ D" zeigt eine Liste von Tabellen an und "\ du" zeigt eine Liste von Rollen an.
testdb=> \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | test | table | testuser
(1 row)
testdb=> \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
testuser | | {}
Es scheint, dass PostgreSQL verschiedene Parameter auf kleine Werte als Ganzes eingestellt hat. Ich habe nur den gemeinsam genutzten Puffer von 128 MB auf 512 MB geändert (20% bis 40% des gesamten Speichers scheinen gut zu sein). Es gibt viele andere Parameter, die geändert werden sollten, aber da sie systemabhängig sind, einschließlich des gemeinsam genutzten Puffers, werden wir sie diesmal nicht ändern.
Hier erfahren Sie, wie Sie den gemeinsam genutzten Puffer ändern.
# vi /data/postgresql.conf
* Standardmäßig, "/var/lib/pgsql/13/data/postgresql.conf」
Vorher ändern)
shared_buffers = 128MB
Nach der veränderung)
shared_buffers = 512MB
Sie müssen lediglich PostgreSQL neu starten.
Ich habe die Protokolleinstellungen wie folgt geändert.
$ vi /data/postgresql.conf
Vor der Änderung ist es wie folgt.
log_filename = 'postgresql-%a.log'
log_rotation_size = 0
#log_min_duration_statement = -1
#log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_lock_waits = off
Nach der Änderung ist es wie folgt.
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_size = 1GB
log_min_duration_statement = 500ms
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
In PostgreSQL ist das Benchmark-Tool pgbench standardmäßig enthalten. Erstellen Sie zunächst mit pgbench eine Benchmark-Tabelle und Daten.
$ pgbench -i -s 10 testdb
dropping old tables...
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
creating tables...
generating data (client-side)...
1000000 of 1000000 tuples (100%) done (elapsed 9.02 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 12.99 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 9.12 s, vacuum 0.87 s, primary keys 3.00 s).
Sobald die Daten fertig sind, ist es Zeit, den Benchmark auszuführen.
$ pgbench -c 10 -j 10 -t 2000 -N testdb
starting vacuum...end.
transaction type: <builtin: simple update>
scaling factor: 10
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 2000
number of transactions actually processed: 20000/20000
latency average = 4.910 ms
tps = 2036.732154 (including connections establishing)
tps = 2039.124174 (excluding connections establishing)
"-c 10" steht für die Anzahl der Clients "10" und "-t 1000" für die Anzahl der Transaktionen pro Client.
Die Cache-Trefferquote nach dem Ausführen des Benchmarks kann wie folgt angezeigt werden.
select relname,
round(heap_blks_hit * 100 / (heap_blks_hit+heap_blks_read), 2)
as cache_hit_ratio from pg_statio_user_tables
where heap_blks_read > 0 order by cache_hit_ratio;
relname | cache_hit_ratio
------------------+-----------------
test | 50.00
pgbench_accounts | 63.00
pgbench_branches | 82.00
pgbench_tellers | 95.00
pgbench_history | 99.00
(5 rows)
Die Cache-Trefferquote des Index ist wie folgt.
select relname, indexrelname,
round(idx_blks_hit * 100 / (idx_blks_hit + idx_blks_read), 2)
as cache_hit_ratio from pg_statio_user_indexes
where idx_blks_read > 0 order by cache_hit_ratio;
relname | indexrelname | cache_hit_ratio
------------------+-----------------------+-----------------
pgbench_tellers | pgbench_tellers_pkey | 33.00
pgbench_branches | pgbench_branches_pkey | 50.00
pgbench_accounts | pgbench_accounts_pkey | 98.00
(3 rows)
Recommended Posts