[TIL] AWS Redshift์์ block์ด ๊ฑธ๋ ค์ ์ฟผ๋ฆฌ๊ฐ ์ง์ฐ๋ ๋ ํ์ธํ๊ณ ๊ฐ์ ์ข ๋ฃํ๋ ๋ฐฉ๋ฒ 221017
๐ก Today I Learned ์์ฝ (26ํ์ฐจ)
- Redshift์์๋ ์ธ์ ๋ณดํธ๋ฅผ ์ํด ํน์ ์ฟผ๋ฆฌ ๋์ ์ค์ ์ถ๊ฐ ์ฟผ๋ฆฌ ๋์์ ์ ๊ธ ์ ์๋ค.
- ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ ๊ธ ์ฒ๋ฆฌ๋ ์ฟผ๋ฆฌ๋ฅผ ํ์ธํ๊ณ ์ข ๋ฃ์์ผ ๋กค๋ฐฑํ ์ ์๋ค.
Redshift์์ ํ์ค์บ ์ฟผ๋ฆฌ๊ฐ ์๋๋ฐ ์ด์ ์์ด ๋๊ณ ์์ ๊ฒฝ์ฐ ์ ๊ธ(block) ์ฒ๋ฆฌ๋ ๊ฒ์ ์์ฌํ ์ ์๋ค. ๋ณดํต์ block์ ์ ๋ฐํ ์ฟผ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด block์ด ํ๋ฆฌ๊ณ ํ์ ์ฟผ๋ฆฌ๊ฐ ์คํ์ด ๋์ง๋ง ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ๋์ค ๋ค๋ฅธ ์ฟผ๋ฆฌ๊ฐ ๋์ํ์ฌ block์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์๊ฐ์ ์ซ๊ธฐ๊ฒ ๋ ์ ์๋ค. ๊ทธ๋ด ๋ ํ์ธ ๋ฐฉ๋ฒ ๋ฐ ์ข ๋ฃ, ์ฟผ๋ฆฌ ํ์ธ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํ๋ค.
redshift ๋ฌธ์์์ ์ ์ํ๋ ์ฟผ๋ฆฌ ์ ๊ธ์ ์ข ๋ฅ๋ ์๋์ ๊ฐ๋ค.
1. AccessExclusiveLock : UNLOAD, SELECT, UPDATE ๋๋ DELETE ์์ ์ค์ ํ๋
2. AccessShareLock : UNLOAD, SELECT, UPDATE ๋๋ DELETE ์์ ์ค์ ํ๋
3. ShareRowExclusiveLock : COPY, INSERT, UPDATE ๋๋ DELETE ์์ ์ค์ ํ๋
block ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ Redhisft์์ ์๋ ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ฅํ์ฌ blocking_pid๋ฅผ ํ์ธํ๋ค.
select a.txn_owner, a.txn_db, a.xid, a.pid, a.txn_start, a.lock_mode, a.relation as table_id,nvl(trim(c."name"),d.relname) as tablename, a.granted,b.pid as blocking_pid ,datediff(s,a.txn_start,getdate())/86400||' days '||datediff(s,a.txn_start,getdate())%86400/3600||' hrs '||datediff(s,a.txn_start,getdate())%3600/60||' mins '||datediff(s,a.txn_start,getdate())%60||' secs' as txn_duration
from svv_transactions a
left join (select pid,relation,granted from pg_locks group by 1,2,3) b
on a.relation=b.relation and a.granted='f' and b.granted='t'
left join (select * from stv_tbl_perm where slice=0) c
on a.relation=c.id
left join pg_class d on a.relation=d.oid
where a.relation is not null;
ํด๋น๋๋ pid๋ฅผ ํ์ธํ์ผ๋ฉด ์๋ ์ฟผ๋ฆฌ๋ก ํด๋น ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃํ ์ ์๋ค. ์๋ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด ๋์์ค์ธ ์ฟผ๋ฆฌ์ ํธ๋์ญ์ ์ ๋กค๋ฐฑ๋๋ค.
select pg_terminate_backend({PID});
ํด๋น PID์ ์ฟผ๋ฆฌ๋ฅผ ํ์ธํ๊ณ ์ถ๋ค๋ฉด ์๋ ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
select query, trim(querytxt) as sqlquery, *
from stl_query where pid = {PID}
order by query desc;
#aws ๊ด๋ จ ๋ฆฌ์์น ๋ด์ญ:
๋๊ธ ์์ญ