ablog

不器用で落着きのない技術者のメモ

PostgreSQL

PostgreSQL の timestamp without timezone の最大値

PostgreSQL 12.4 の timestamp without timezone の最大値は AD 294276 年。 $ psql "host=aurora-postgres124.cluster-********.ap-northeast-1.rds.amazonaws.com user=awsuser dbname=postgres port=5432" psql (13.4, server 12.4) SSL connection (prot…

PostgreSQL のシーケンスのキャッシュサイズによる tps を比較

PostgreSQL のシーケンスのキャッシュサイズによる tps を比較してみた。pgbench で同時多重(500)でシーケンスにアクセスし、キャッシュサイズが 1 だと 9,601、20 だと 12,714 とキャッシュサイズが大きいほうがスループットは高い。とりあえず流してみた…

postgresql.conf で設定可能なパラメータ一覧を確認する方法

PostgreSQLの設定は多くの異なる方法で設定することができます。 しかし普通はpostgresql.confファイルで設定することになるでしょう。 固有のオプションはリリースごとに異なります。 使用中のPostgreSQLのsrc/backend/utils/misc/guc.cというソースコード…

PostgreSQL で PARTITION の ATTACH/DETACH 時のロック

ATTACH 親テーブルは SHARE UPDATE EXCLUSIVE lock、子テーブルは ACCESS EXCLUSIVE lock が取得される。 DETACH 外部キーでパーティションテーブルを参照しているテーブルに SHARE lock が獲得される。 参考 ALTER TABLE changes the definition of an exis…

PostgreSQL でのパーティションメンテナンス

PostgreSQL の宣言的パーティションでパーティションのメンテナンスを行う。 pgbench(PostgreSQL 13) でパーティションテーブルを作成して、データをロードする。 $ /usr/pgsql-13/bin/pgbench -i -s 100 -U awsuser -h aurora-postgres124.cluster-********…

pgbench でパーティションを使う

Amazon Linux 2 に PostgreSQL 13 をインストールする - ablog データをロードする $ /usr/pgsql-13/bin/pgbench -i -s 100 -U awsuser -h aurora-postgres124.cluster-********.ap-northeast-1.rds.amazonaws.com -d postgres --partitions=10 --partition-…

postgresql12-devel をインストールしていても psycopg2 をインストールしようとすると "pg_config executable not found" と怒られる

事象 Amazon Linux 2 に psycopg2 をインストールしようとすると "Error: pg_config executable not found." というエラーが発生する。 通常、postgresql-devel パッケージをインストールすると解決するが、PostgreSQL 12 ではインストール(yum install pos…

Amazon Linux 2 に postgresql12-devel をインストールしようとするとエラーになる

事象 $ yum install postgresql12-devel (中略) Error: Package: postgresql12-devel-12.3-1PGDG.rhel7.x86_64 (pgdg12) Requires: llvm-toolset-7-clang >= 4.0.1 Error: Package: postgresql12-devel-12.3-1PGDG.rhel7.x86_64 (pgdg12) Requires: llvm5.0-…

Amazon Linux 2 に PostgreSQL 12 をインストールする

Yum リポジトリをインストール $ sudo rpm -ivh --nodeps https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm pgdg-redhat-all.repo の $releasever を 7 に置換 $ cd /etc/yum.repos.d $ sudo per…

pg8000 を使って RDS Proxy 経由で Aurora PostgreSQL にクエリを発行するとタイムアウトする

事象サマリ pg8000 を使って Python スクリプトから RDS Proxy 経由で Aurora PostgreSQL にクエリを発行しようとするとタイムアウトする pg8000 から直接 Aurora PostfreSQL へ接続するとクエリの発行に成功する psycopg2 を使うと RDS Proxy 経由でもクエ…

Amazon Linux 2 に PostgreSQL をインストール・起動・接続する

インストール $ sudo yum -y install postgresql-server postgresql-devel postgresql-contrib 初期セットアップ $ sudo postgresql-setup initdb 起動 $ sudo systemctl start postgresql.service ステータスを確認する $ sudo systemctl status postgresql…

PostgreSQL メモ

テーブルのオブジェクトIDを調べる postgres=> SELECT 'public.pgbench_accounts'::regclass::oid; oid ------- 16566

VACUUM FULL 実行中のロックのとりかた

Aurora PostgreSQL で VACUUM FULL 実行中のロックのとりかたを確認したメモ。 Writer で VACUUM FULL 実行 postgres=> vacuum full pgbench_accounts; Writer で VACUUM FULL 実行中のテーブルを参照 postgres=> select count(*) from pgbench_accounts; # …

RDS PostgreSQL から Aurora PostgreSQL に論理レプリケーションする

RDS PostgreSQL から Aurora PostgreSQL に論理レプリケーションでレプリケーションしたメモ。 手順 設定 RDS PostgreSQL のパラメータグループで rds.logical_replication=1 に設定して、再起動する。 rds.logical_replication=1(on) に設定されているこ…

PostgreSQL ログにクエリログを出力し、CSV ログは出力しない設定

log_destination=stderr に設定すると CSV ログは出力されない。 設定例 DBパラメータグループで以下を設定 log_destination=stderr # postgresql.log に出力するが、csv には出力しない log_statement=all # DDL、DML など全てを記録 log_min_duration_stat…

一定間隔で pg_stat_statements を tsv に出力

一定間隔で pg_stat_statements を取得して tsv に出力する。 PostgreSQL に接続する。 $ export LANG=C $ psql "host=aurora-postgres117.cluster-******.ap-northeast-1.rds.amazonaws.com dbname=mydb port=5432 user=awsuser" 10 秒間隔で pg_stat_state…

psql で PostgreSQL にクエリを定期実行する

書式 クエリ \watch 秒数 例 select b.usename, trunc(a.total_time) "total_time(s)", a.calls, trunc(cast(a.total_time as numeric) / a.calls, 6) "avg_time(s)", a.query from pg_stat_statements a join pg_user b on a.userid = b.usesysid where b.u…

psql で PostgreSQL にクエリを定期実行する

書式 クエリ \watch 秒数 例 select b.usename, trunc(a.total_time) "total_time(s)", a.calls, trunc(cast(a.total_time as numeric) / a.calls, 6) "avg_time(s)", a.query from pg_stat_statements a join pg_user b on a.userid = b.usesysid where b.u…

PostgreSQL の性能分析ツール

qiita.com pgstatsinfo.sourceforge.net

Postgresのdouble precision型を四捨五入したい

メモ qiita.com

PostgreSQL で nextval() のスループットを検証する

準備 PostgreSQL に接続する。 $ psql "host=aurora-postgres117.cluster-******.ap-northeast-1.rds.amazonaws.com dbname=writer port=5432 user=awsuser" シーケンスを作成する。 create sequence seqtest1 start with 1 increment by 1 cache 1; create …

PostgreSQL の pg_stat_statements で総実行時間の長いクエリランキングを取得する

PostgreSQL の pg_stat_statements で総実行時間(1回の実行時間 * 実行回数)の長いクエリランキングを取得するクエリ。累積値のため、スループットなどを見ようとすると定期的に取得して差分を計算する必要がある。 クエリ select b.usename, trunc(a.tota…

PostgreSQL で QPS を確認する

PostgreSQL で QPS(Queries per second) を確認したい場合、イコールではないが以下で TPS(Transactions per second) を確認することができる。 SELECT sum(xact_commit+xact_rollback) FROM pg_stat_database; RDS PostgreSQL や Aurora PostgreSQL だと、P…

Pgpool-II のログ出力設定

Pgpool-II のログ出力設定メモ。 設定 /etc/pgpool-II/pgpool.conf の設定 # - Where to log - log_destination = 'syslog' # Where to log # Valid values are combinations of stderr, # and syslog. Default to stderr. # - What to log - log_line_prefi…

Aurora PostgreSQL で pg_stat_statements ビューを参照できるようにする

Aurora PostgreSQL で pg_stat_statements ビューを参照できるようにする手順。 設定手順 RDS でパラメータグループを作成 パラメータグループファミリー: aurora-postgresql11 タイプ: DB Parameter Group 作成したパラメータグループで以下の通り設定 パラ…

pcp_node_info 実行時に "username and/or password does not match" と怒られる

事象 $ pcp_node_info -v -h localhost -U pgpool -n 1 -w FATAL: authentication failed for user "pgpool" DETAIL: username and/or password does not match 原因 ~/.pcppass のパーミッションが適切でない場合も上記エラーになる。 解決策 パーミッショ…

Amazon Linux 2 に PostgreSQL 11 をインストールする

Yum リポジトリをインストール $ sudo rpm -ivh --nodeps https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm pgdg-redhat-all.repo の $releasever を 7 に置換 $ cd /etc/yum.repos.d $ sudo per…

Pgpool で PCP コマンドを使えるようにする

設定 PCP のパスワード設定 # echo 'pgpool:'`pg_md5 pgpool` >> /etc/pgpool-II/pcp.conf # echo 'localhost:9898:pgpool:pgpool' > ~/.pcppass # root ユーザー用 # chmod 600 ~/.pcppass $ echo 'localhost:9898:pgpool:pgpool' > ~/.pcppass # 一般ユー…

pgbench で参照ワークロードを実行する

$ pgbench -Sn -c 4 -j 4 -t 1000 -U awsuser -h localhost -d mydb -p 9999 参考 1.4. 負荷分散を試してみる Pgpool-IIでは、参照クエリの負荷分散が可能です。 デフォルトでこの機能は有効です。 その効果を確かめるために、pgbench -Sコマンドを使ってみ…

PostgreSQL で接続先 DB サーバの IP アドレスを確認する

PostgreSQL でサーバのIPアドレスを確認する select inet_server_addr(); 参考 https://www.postgresql.jp/document/8.0/html/functions-info.html