DB8 [Oracle] APPEND 힌트와 Direct Load Insert APPEND Hint란? 공식 문서의 APPEND Hint 정의 💡 The APPEND hint instructs the optimizer to use direct-path INSERT with the subquery syntax of the INSERT statement. Conventional INSERT is the default in serial mode. In serial mode, direct path can be used only if you include the APPEND hint.Direct-path INSERT is the default in parallel mode. In parallel mode, conventional insert can be used only if you spe.. TIL/DB 2024. 2. 14. [DB] 트랜잭션 격리 수준 & 부정합 이슈 부정합 이슈 Dirty Read: 다른 트랜잭션에서 처리한 작업이 완료되지 않았음에도 불구하고 다른 트랜잭션에서 볼 수 있는 현상 Non-Repeatable Read: 하나의 트랜잭션내에서 동일한 SELECT 쿼리 실행시 항상 같은 결과를 보장해야하는 Reapeatable Read 정합성에 어긋난 것 Phantom Read: 읽을 때 쓰기 잠금을 거는 경우 다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안보였다가 하는 현상 트랜잭션 격리 수준 Read Uncommitted 읽기 트랜잭션이 시작했을 때 다른 트랜잭션이 Update 가능 읽기 트랜잭션이 Update 중(un-commit)인 데이터를 조회할 수 있음 ⇒ 다른 트랜잭션이 중간에 롤백을 해도 읽기 트랜잭션은 롤백 전 데이터를 조회할.. TIL/TIL 2022. 10. 6. [PostgreSQL] error: column "vendor" of relation "user" contains null values (미제) 문제 상황: 유저 테이블에서 유저가 어떤 소셜로그인으로 가입된 것인지 인지하기 위한 컬럼 vendor 를 추가하였음 vendor 는 이상한 값이 아닌 정해진 값들 중 하나가 될 것이기에 아래처럼 'kakao' | 'google' | 'apple' 으로 설정함. 그리고 nullable하지 않게 할 것 이기에, 유저를 생성할 때는 vendor 값을 꼭 넣어주게 코드를 작성하였다 하지만 위의 에러가... vendor가 null값을 갖고있는뎁쇼?? 를 계속 뱉는 상황이였다. 문제 해결 과정: 위의 vendor 값을 넣어주는 코드에서 내가 잘못 구현한 부분이 있을 것이라는 생각에 그 부분을 우선적으로 체크 => 문제 없었음 => 그래도 혹시 모르니깐 DB의 값을 직접 수정하여 null 값이 없게 만들어봄 => 동.. TIL/삽질 기록소 2022. 9. 29. [CS] 데이터베이스 관련 데이터베이스에서 인덱스를 사용하는 이유 및 장단점 검색 성능을 향상시키기 위해 사용 => 별도의 메모리 공간에 인덱스가 된 컬럼들을 기준으로 정렬하여 저장함 => 이미 정렬되어 있기 때문에 특정 조건 검색시 풀 스캔이 아닌 방법으로 더 빠르게 찾을 수 있음, 정렬 필요 없음 인덱스를 사용하는 단점으로는 인덱스를 구성하는 비용 발생 정렬 상태를 유지하기 위한 비용 발생 즉, CRUD시 인덱스를 형성하기 위한 추가적인 연산이 수행됨 인덱스를 사용하는 것이 효율적이기 위해서는 쿼리가 index를 사용하는지, Cardinality, Selectivity 같은 요소들이 고려된 인덱스가 생성되어야 함 트랜잭션(Transaction) 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위 1개의 트랜잭션에서 여러.. TIL/TIL 2022. 9. 25. [DB] soft delete vs hard delete (feat. isDeleted) 의문이 생긴 배경과 의문 유저간의 가족구성을 할 때 한명이 가족을 만든 후, 만료 기한은 있지만 초대 인수는 제한이 없는 가족 초대 코드를 발급하고 나머지 가족 구성원들이 이 초대 코드를 입력하여 가족에 join하는 방식으로 구현하려고 할 때 생긴 의문이다 위의 가족 구성의 경우에는 최초의 한번 혹은 흔하지 않게 사용할 기능이기에 초대 코드에 대한 부분을 DB에 저장해도 크게 문제가 되지 않을 거란 생각이 드는데, 만약 이러한 특정 임시 코드를 발급해주어야하는 일이 수시로 많은 유저가 사용하는 기능이라면 임시코드를 발급한 것을 매번 DB에 저장하고 만료되면 삭제를 하던 isDeleted 컬럼을 업데이트하던 비효율적인 느낌인데 이러한 경우에 어떻게 효율적으로 만들 수 있을까?? 사실 이러한 의문은 이상한 .. TIL/DB 2022. 9. 5. [DB] Delete vs Truncate vs Drop 아마 DB 시스템에 따라 다를 수도 있을 것이라 생각되지만 보편적으로 DELETE 데이터는 지워지지만 테이블 용량이 줄어들지 않음 ( 데이터 적재하던 storage 반납 X) 원하는 데이터만 지울 수 있음 자동 commit이 아니기 때문에 커밋전이면 삭제 후 롤백 가능 TRUNCATE 용량이 줄어들음 ( 최초 할당 storage 남기고, 데이터 적재하던 storage 반납) 인덱스 삭제 테이블은 삭제되지 않고, 데이터만 삭제 자동 commit이기에 삭제 후 롤백 불가 DROP 테이블 전체를 삭제 자동 commit이기에 롤백 불가 TIL/DB 2022. 8. 17. [DB] Postgres 명령어 내가 실제로 써본 명령어를 기록하고자 한다 ( 쓴것은 다시 쓸 확률이 높기에, feat.시간 지역성) sudo -u postgres psql postgres (기본으로 있는 유저)로 psql에 접속하는 명령어 나의 경우 psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432 뜰 때 사용하였다 \du # list of roles \l # list of databases \c # DB이름 데이터베이스 'DB이름' 접속 \dt #list of relations, 테이블들 나옴 select * from 테이블이름 # 테이블 '테이블이름' 전체 조회 truncate table 테이블이름 # 테이블 '테이블이름' truncate .. TIL/DB 2022. 8. 17. [DB] 외래키를 사용해? 말어? 이번 프로젝트에서 DB를 설계하고 구현하면서 외래키를 사용하지 않지만 외래키의 역할을 하는 컬럼을 만들어서 테이블을 구성하였는데, 이에 대한 고민들 적어보고자 한다. 서비스에서 여러 소셜 로그인을 지원하고자 하는데 같은 유저 A가 있을 때 나는 유저의 특정 정보는 유저 엔티티에 두고 카카오 로그인을 사용한다면 카카오 유저를 만들어 유저와 연결하고 구글 로그인을 사용한다면 구글 유저를 만들어 유저와 연결하는 방식으로 DB를 구성하고자 했다. 그 중 유저와 카카오 유저의 케이스를 들고 와서 처음 말했던 외래키에 대한 이야기를 하고자 한다. // 유저 엔티티 @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column({ nullabl.. TIL/DB 2022. 7. 16. 이전 1 다음 반응형