본문 바로가기
프로N잡러/프로그래밍&자격증

[GPDB] 7. Data Manipulation Language(DML)

by 뮤지구 2024. 1. 9.

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