본문 바로가기

분류 전체보기

(PostgreSQL) Lock 경합 상태 확인하기 Block된 SQL 프로세스 조회 SQL SELECT blocked_locks.pid AS blocked_pid, blocked_activity.usename AS blocked_user, blocking_locks.pid AS blocking_pid, blocking_activity.usename AS blocking_user, blocked_activity.query AS blocked_statement, blocking_activity.query AS current_statement_in_blocking_process FROM pg_catalog.pg_locks blocked_locks JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_ac..
(PostgreSQL) DB Lock을 줄이는 7가지 팁 해당 글은 When Postgres blocks: 7 tips for dealing with locks을 보고 정리한 글입니다 1. Default 값이 있는 필드를 추가하면 안된다 PostgreSQL 10버전 이하를 쓰고 있다면, Default 값이 있는 필드를 추가하면, 테이블 락이 걸릴 수 있다. 그리고 엄청 느리다. 그래서 이런 쿼리를 날리면 안된다. ALTER TABLE items ADD COLUMN updated_at timestamptz DEFAULT now();기본값이 없는 필드를 추가한 후, UPDATE를 날리거나 ALTER TABLE items ADD COLUMN updated_at timestamptz; UPDATE items SET updated_at = now();이렇게 쪼개서, U..
(PotgreSQL) ROW SHARE Lock이란? ROW SHARE Lock이란? Table Level Lock의 일종이다. Row라는 이름이 들어간다고 Row Lock이 아니다. SELECT FOR UPDATE, SELECT FOR SHARE 명령문을 날릴 때, 대상이 되는 테이블에 락을 잡는다. UPDATE, DELETE 명령문을 날릴 때, RowShareLock이 잡히는 경우도 있다. UPDATE / DELETE 명령문을 날릴 때, RowShareLock이 잡히는 케이스는 다음과 같다. aurthor의 id를 참조하고 있는 content 테이블이 있다고 가정해보자. CREATE TABLE authors ( id serial NOT NULL PRIMARY KEY, name text NOT NULL ); CREATE TABLE contents ( id..
(Django) Django ORM에서 Row Lock 잡기 - select_for_update Row Lock과 SELECT * FOR UPDATE UPDATE / DELETE 없이, SELECT 만으로 Row Lock을 잡고 싶을 때는, "SELECT * FOR UPDATE" 쿼리를 사용하면 된다. 이렇게 Row Lock을 잡고있는 도중에는 다른 트랜잭션에서 해당 Row를 변경 / 삭제할 수 없다. select_for_update Django에서 SELECT * FOR UPDATE 쿼리를 사용할 때는, Django ORM select_for_update 함수를 사용하면 된다. 이 함수는 항상 transaction과 함께 사용된다. Lock을 잡으려는데, 이미 Lock이 잡혀있는 경우 일반적으로는, 락이 풀릴 때까지 기다린다. ( 이 경우, DB Connection이 무한정 쌓이고 밀릴 수 있다...
(Travis CI) GitHub에 테스트 CI 연동하기 Travis CI테스트코드 돌리는 CI 툴이다. 도커 컨테이너 기반으로 돌리는거여서, 테스트 서버 환경 구성 필요없이 온라인상에서 테스트 코드를 돌릴 수 있다.간단하게 테스트 CI를 설정할 수 있고, 오픈소스에서는 무료이기 때문에, 많은 오픈소스에서 Travis CI를 사용하고 있다. ( django-oscar, aws-codedeploy-agent 등등.. )But. 프라이빗은 유료다. gitlab은 지원하지 않는다. 😧 GitHub Repository 연결하는 방법1. 트레비스에 가입한다. 그 다음, 트레비스에 github 레파지토리 권한을 준다. 2. 레파지토리에 .travis.yml 파일을 추가해준다. 3. 연결되고 나면 github commit마다 테스트 결과가 뜬다. 아래에 뜬 check 박스..
(PostgreSQL) 슬로우쿼리를 잡아내는 3가지 방법 해당 글은 Weekly Postgres에서 보내준 3 WAYS TO DETECT SLOW QUERIES IN POSTGRESQL을 보고 정리한 글입니다 😀 슬로우쿼리를 잡아내는 3가지 방법PostgreSQL에서 슬로우쿼리를 잡아내는 방법은 크게 3가지가 있다.1. 슬로우 쿼리가 발생하면 로그 남기기2. 쿼리 실행계획 로그에 남기기3. 쿼리 실행 통계 보기 1. 슬로우 쿼리가 발생하면 로그 남기기어느정도 느려지면, 쿼리 실행문을 로그에 남길건지 postgresql.conf에 설정값을 추가해줘야한다.1log_min_duration_statement = 5000 그리고 config를 reload 해주면 된다.12345postgres=# SELECT pg_reload_conf(); pg_reload_conf -..
TDD Coding Dojo - 테스트코드 작성 연습 방법 이번달에 유닛테스트 작성방법 관련 스터디를 시작했다 ㅎㅅㅎ. 진행방식을 조사하다가, TDD KATA, Coding Dojo 라는 학습 방식을 알게되어 정리해보고자 한다. Coding Dojo 란? dojo는 일본말이다. 한국말로는 도장이다. 태권도 도장의 도장. Coding Dojo란, 코딩 배우는 도장을 말한다. 함께 모여서, 실무가 아닌 연습 문제를 풀어보면서, 여러가지 프로그래밍 스킬을 학습하는 방법론을 의미한다. Coding Dojo로 기대하는 바는?좋은 코딩 습관 익히기그룹 단위로 학습하기 의도적으로, 기존과는 다른 스킬들을 익히기 재밌게 학습하기 Coding Dojo로 얻을 수 있는 스킬은? 단순한 코딩 스킬 뿐만 아니라 공동 학습을 통해 여러가지 스킬을 학습하는게 목표다.페어프로그래밍 방식P..
유닛테스트를 작성하는 3가지 접근방법 - Test First VS Test Last VS Test Driven 해당 글은 Unit Testing with Python: Why and When Should You Write Unit Tests? 세션의 요약본입니다 ㅎㅂㅎ. 개발할 때, 테스트 코드를 작성하는 접근 방식은 크게 3가지가 있다. Test Last 개발 다 하고, 오류가 없는지 검증하기 위한 목적으로 회귀 테스트를 작성하는 방식이다. Test Last 방식도 개발 중간에 테스트를 한다. 중간 중간에 수동테스트를 하면서, 기대한대로 코드가 동작하는지 확인한다. 테스트 케이스를 개발 이후, 마지막에 작성하는걸 선호하는 사람들이 많다. 나도 수동테스트를 할 때는, 개발을 다 하고나서 작성하는 편이다. ( 회귀 테스트란? 회귀 테스트는 한 모듈의 수정이 다른 부분에 영향을 끼칠 수도 있다고 생각하여 수정된 모듈..