๐YugabyteDB ๐pgreplay์์ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ
7277 ๋จ์ด replaypostgresyugabytedbrat
PostgreSQL ํธํ ์คํ ์์ค ๋ถ์ฐ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ YugabyteDB๋ postgres ์ฟผ๋ฆฌ ๊ณ์ธต์ ์ฌ์ฉํ๊ณ pgreplay๋ฅผ ๋์ ๋๋ ์์ค๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด PostgreSQL ์ฝ๋ ๋ฒ ์ด์ค์ ๋ถ์ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ์๋ฆ๋ค์์ ๋๋ค. ๋ค์์ ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์คํํ ๋น ๋ฅธ ํ ์คํธ์ ๋๋ค.
๋ ธ๋๊ฐ ํ๋๋ง ์๋ ๋ฉ์์ ์ด ์์ ๋ฅผ ์คํํ๊ฒ ์ต๋๋ค. ๋ก๊ทธ ๋์์
csvlog
๋ก ์ ์ํ๊ณ documentation์์ ๊ถ์ฅํ๋ ๋๋ก ๋ก๊ทธ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค.docker run -v /var/tmp/yb:/var/tmp \
-d --rm --name yb yugabytedb/yugabyte:2.15.2.0-b87 \
bash -c '
cat > tserver.flagfile <<CAT
--ysql_pg_conf_csv=\
log_destination=csvlog,\
log_statement=all,\
log_min_messages=error,\
log_min_error_statement=log,\
log_connections=on,\
log_disconnections=on
CAT
yugabyted start --tserver_flags=flagfile=tserver.flagfile
while true ; do tail -F /root/var/logs/tserver/postgres* ; done
'
/var/tmp
๋ฅผ ์ธ๋ถ ๋ณผ๋ฅจ์ผ๋ก ๋ด๋ณด๋
๋๋ค. ์ฌ๊ธฐ์์ ์ฌ์ํ๋ ค๋ ์ํฌ๋ก๋์ ๋ํ ๋ก๊ทธ๋ฅผ ๋ณต์ฌํฉ๋๋ค. pg_rotate_logfile()
๋ก ๋ก๊ทธ๋ฅผ ํ์ ํ๊ณ pg_current_logfile()
๋ก ํ์ผ ์ด๋ฆ์ ๊ฐ์ ธ์ต๋๋ค. YugabyteDB ์ฟผ๋ฆฌ ๋ ์ด์ด(YSQL)๋ PostgreSQL์ด๋ฏ๋ก ๋์ผํ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.pgbench
๊ฐ์ ํ
์ด๋ธ์ ์ด๊ธฐํํฉ๋๋ค(pgbench
๋ YugabyteDB ๋ฐฐํฌ์์ ysql_bench
์ด๋ฉฐ ๋ช ๊ฐ์ง ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ง๋ง PostgresSQLpgbench
์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค):docker exec -i yb bash -c '
/home/yugabyte/postgres/bin/ysql_bench -i
'
ํฌ์ฐฉ
๋๋ ๊ฐ๋จํ
pgbench
๋ฅผ ์คํํ๊ณ ์ด์ ์ ๋ก๊ทธ ํ์ผ์ ํ์ ํ๋๋ก ์ฃผ์ํ๋ฉฐ ๋ง์ง๋ง์ /var/tmp
์ ๋ณต์ฌํฉ๋๋ค.docker exec -i yb bash -c "
ysqlsh -c \"select pg_rotate_logfile()\"
/home/yugabyte/postgres/bin/ysql_bench -n
ysqlsh -tc \"
select format('cp %L /var/tmp/workload.csv',pg_current_logfile())
\" | sh -x
"
์ด
csvlog
์ํฌ๋ก๋๋ฅผ ๋ค๋ฃจ๋ pgbench
๋ /var/tmp/workload.csv
์ด๋ฉฐ ์ฌ์ํ ์ค๋น๊ฐ ๋์์ต๋๋ค.์ผ๋ฐ์ ์ผ๋ก ์ด๊ธฐ ์ํ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณต์ ๋ณธ(์ฐธ์กฐ) ๋๋
pg_dump
(ysql_dump
๋ YugabyteDB ๋ฒ์ ์)์์ ์ฌ์ํฉ๋๋ค.์ฌ๊ธฐ์๋
pgbench -i
๋ก ๋ค์ ์ด๊ธฐํํ๊ฒ ์ต๋๋ค. ๋ํ ์ฌ์์ ํ์ธํ๊ธฐ ์ํด ํ์ ์ธ๊ณ ํฉ์ฐํฉ๋๋ค(pgbench
๋ ์์์ ์์ ์ฌ์ฉํจ).docker exec -i yb bash -c '
ysqlsh -c "select count(*), sum(abalance) from ysql_bench_accounts;"
/home/yugabyte/postgres/bin/ysql_bench -i
ysqlsh -c "select count(*), sum(abalance) from ysql_bench_accounts;"
'
๋ค์ ํ๋ค
pgreplay
๋ก ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ญ๋๋ค.git clone https://github.com/laurenz/pgreplay.git
cd pgreplay
docker build -t laurenz/pgreplay -f Dockerfile .
csvlog
๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด VisiData๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. pip3 install visidata
์ ํจ๊ป ์ค์นํ๊ฑฐ๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ํจ๊ป ์ฌ์ฉํ์ฌ /var/tmp/yb
๋ณผ๋ฅจ์ ๋ง์ดํธํ ์ ์์ต๋๋ค.docker run --rm -it -w /logs -v /var/tmp/yb:/logs \
jauderho/visidata:latest \
workload.csv
ํค๋๋ ์์ง๋ง ํ์์ https://www.postgresql.org/docs/current/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-CSVLOG์ ์ค๋ช ๋์ด ์์ต๋๋ค.
์์์ ๋น๋ํ ์ด๋ฏธ์ง์ ์ปจํ ์ด๋์์
pgreplay
๋ฅผ ์คํํ๊ณ ๋ณผ๋ฅจ์ ์ก์ธ์คํ์ฌ csvlog
๋ก -v
๋ฅผ ์ฝ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์คํ์ฌ --link
๋ก ๋ช
๋ น๋ฌธ์ ์คํํฉ๋๋ค.docker run --rm -ti -w /logs --link yb:yb \
-v /var/tmp/yb:/logs \
laurenz/pgreplay pgreplay -c -h yb -p 5433 \
/logs/workload.csv
์ฌ์์ ํ์ธํ๊ธฐ ์ํด ๋์ผํ ๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค.
docker exec -i yb bash -c '
ysqlsh -c "select count(*), sum(abalance) from ysql_bench_accounts;"
'
์ด ๋ธ๋ก๊ทธ๋ ๋จ์ง YugabyteDB์ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํ ๊ฒ์ด์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ pgreplay documentation์ ํ์ธํ์ญ์์ค. ๋ชจ๋ YugabyteDB์์ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ธ๋์ ์ฐ๊ฒฐ์์ ์ํฌ๋ก๋๋ฅผ ์บก์ฒํ๋ ค๋ ๊ฒฝ์ฐ ๊ฐ ๋ ธ๋์๋ ๋ก๊ทธ ํ์ผ์ด ์์ต๋๋ค. ๋ณํฉํ ์ ์์ต๋๋ค. ์ธ์ ID(์์ ์๊ฐ ๋ฐ ๋ฐฑ์๋ pid์์ ๋น๋๋
csvlog
์ 6๋ฒ์งธ ํ๋๋ ๋ค๋ฅธ ํ๋์ ์ถฉ๋ํ์ง ์์ ์ ์์ง๋ง ์ํ๋ ๊ฒฝ์ฐ ๋
ธ๋ ๋ฒํธ๋ฅผ ์ฐ๊ฒฐํ์ฌ ๊ณ ์ ํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.) ์ฌ์์ ํ๋์ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ง๋ง HA ํ๋ก์๋ฅผ ํตํด ์ฌ๋ฌ ๋
ธ๋์ ์ฐ๊ฒฐ์ ๋ถ์ฐํ ์ ์์ต๋๋ค. ๋ชจ๋ ์บก์ฒํ๋ ค๋ ํญ๋ชฉ๊ณผ ์ฌ์ํ๋ ค๋ ๋์์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. PostgreSQL์์ ์บก์ฒํ๊ณ YugabyteDB๋ก ์ฌ์ํ๋ ๊ฒ๋ ์ฑ๋ฅ ์ ํ ์์ด ๋ชจ๋ ๋์ผํ๊ฒ ์๋ํ๋์ง ํ์ธํ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐YugabyteDB ๐pgreplay์์ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/yugabyte/real-application-testing-on-yugabytedb-with-pgreplay-4ibmํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค