Managing data
Updating data
- 일반적인 db update 문과 유사
- ORCA 를 사용하는 경우에만 distribution key 컬럼 update가 가능함.
- 기존에는 distribution key & partition key로 지정된 컬럼 데이터 update 불가.
- (참고) gpdb 내부에서 사용하는 2가지 optimizer : legacy(postgres) + ORCA(gp customizing)
- update 내부 동작 : delete(삭제 마킹) + insert(새로운 row 추가) # postgres 내부 동작과 동일
Removing data
- Delete
- 내부적으로는 실제 삭제x, 삭제됐다고 마킹 → 이후 vacuum 작업 시 재사용
. vacuum (기본 옵션) : freelist(삭제됐지만 미사용 중인 공간)를 알려주면 재사용. 공간은 그대로.
. vacuum (full 옵션) : freelist 를 삭제하고 공간도 삭제. exclusive lock 걸림.
- Truncate
- Drop
DELETE FROM foo f
USING bar b
WHERE f.foo_id = b.bar_id;
DELETE FROM rank;
----(deletes all
DELETE FROM rank WHERE year='2001’;
TRUNCATE TABLE b2001 ;
Order by - Collate (GPv6 부터 지원)
Recursive query (GPv6 부터 지원)
- 병렬처리에서는 자주 사용되지 않으나, 필요에 따라서는 소량의 데이터에 한정적으로 사용 가능
- 데이터가 많아질 경우 성능이 좋지는 않음.
Data-Modifying Statements in a WITH clause (GPv6 부터 지원)
- 데이터 수정하는 구문을 with 절에 넣을 경우, 한번 실행 후 다음부터는 진행되지 않음
WITH deleted_rows AS (
DELETE FROM
products
WHERE "date" >= '2010-10-01' AND "date" < '2010-11-01'
RETURNING *
)
SELECT * FROM deleted_rows;
[쿼리 작성시 Tip] "with/inline view/union all"
query plan 내에서 slice (작업 단위) 가 많다는 것은 데이터 이동이 많다는 의미.
위 3개 구문을 사용하였을 때 slice 가 많아져 성능에 악영향을 끼침
- slice 가 연속적으로 일어난다면 끝날때 까지 대기하게 됨
-> temp table 사용하는 방식으로 변경하여 개선 가능
ex) (A union all B ) join C : A+B 의 분산키가 다르게 인식될 수 있어 local join 이 일어나지 않을 수 있음.
Transaction
- all or nothing
- 명령어
- Start a transation : BEGIN or START TRANSACTION
- Commit a transaction: END or COMMIT
- Rollback a transaction: ROLLBACK
- MVCC (multi-version concurrency control)
- 여러 사람이 사용할 때 각각의 snapshot 을 가지고 있음
- rollback 시 해당 버전을 지워버리고 끝냄 (속도 빠름)
- GPDB 에서는 "READ COMMITED" & SERIALIZABLE 만 사용
Lock
- 기본 : table lock (update, delete), row lock(insert)
- heap table 의 경우 update, delete 시 row exclusive
- 압축/column base 가 더 중요시되면 append-only
- pk/uk 생성/row level exclusive rk 필요하면 heap table
Quiz
x (ORCA 사용 가능 환경, 5ver 이상이라면 변경 가능), 2 (default level)
'프로N잡러 > 프로그래밍&자격증' 카테고리의 다른 글
[GPDB] 8. Functions (2) | 2024.01.09 |
---|---|
[GPDB] 6. Loading Data (1) | 2024.01.09 |
[SQLD] 자격증 정보 & 기출문제 웹사이트 (0) | 2024.01.09 |
[SQLP] 기출문제 웹사이트 (0) | 2024.01.09 |
[GPDB] 5. Storage Optimization (0) | 2024.01.09 |