본문 바로가기

🥞 Database5

MySQL에서 `Process`의 의미 : 단일 프로세스의 프로세스를 종료할 수 있다고요? 궁금했던 것 RealMySQL에서 다음과 같은 구절이 나옵니다. (Lock 챕터 중...) 강제 잠금을 해제하려면 KILL 명령을 통해 MySQL 서버의 프로세스를 강제로 종료하면 됩니다. 그런데, Process를 죽인다는 것이 가능한 것일까요? 제가 아는 바로는 MySQL은 단일 프로세스이기 때문에 Process를 죽이면 MySQL이 종료되지 않을까 생각했습니다. 그런데 이것은 `Process`라는 용어가 OS와 MySQL DBMS 내부에서 다르게 쓰인다는 것을 모를 때 생각한 의문이었습니다. 이에 대해서 알아본 바를 간단하게 서술해보려고 합니다. 혹시 잘못된 것이 있다면 꼭 알려주세요 👍 MySQL은 스레드 기반으로 작동합니다. MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동하며, 크게.. 2023. 12. 21.
PostgreSQL에서 Full text search 사용하고 싶다면? pg_bigm 모듈 연관글 MySQL 검색 기능 개선하기 : Full-text search 들어가며 최근 영상에 데이터 라벨링을 하기 위한 REST API와 WAS를 구축하고 있습니다. 이전에 여러번 진행했던 토이 프로젝트들과는 다르게 서비스를 구축하다보니 기술 스택 설정부터 모호한 서비스 요구사항 등등.. 이런저런 새로운 도전들을 하게되었습니다. 가장 새로운 도전 중 하나는 그동안 제 2의 고향과 같았던 🥹 MySQL을 떠나 다른 RDB를 사용하게 된 것인데요. 같은 RDB라 크게 달라질 것이 없다고 생각했지만.. 역시 세상에는 거저 지나가는 것들이 없었습니다. 💡 여담으로 제대로 PostgreSQL의 장점을 사용해보지 못한 상태에서, MySQL과 PostgreSQL의 가장 큰 차이점으로 느끼는 것은 auto_increm.. 2023. 10. 2.
API 성능개선 : 페이징 cursor 방식으로 개선하기 이 글은 당근마켓을 모티브로 한 프로젝트 Secondhand 구현시 이슈 사항을 정리한 글입니다. API 기본 기능을 모두 구현하고 본격적으로 쿼리 튜닝과 성능 개선을 하기 위해 쿼리를 분석하고 개선해보도록 하겠습니다. M1 16GB 메모리 환경에서 테스트되었습니다. 200만건의 데이터를 넣어보자 Dummy data를 넣는 다양한 방식이 있습니다. 하지만 저는 item 테이블을 vertical partitioning 한 상태여서 테이블 3개에 동시에 데이터를 넣어야 했기 때문에 프로시저를 통해 랜덤한 데이터를 넣어주고자 했습니다. 더미 데이터를 넣는 가장 빠른 방법은 csv로 데이터를 만든 후 dump insert하는 것이 가장 빠르겠지만, 랜덤하게 변수를 설정하는 부분이 다른 문서 편집기를 사용하는 것.. 2023. 9. 17.
MySQL 검색 기능 개선하기 : Full-text search 이 글은 당근마켓을 모티브로 한 프로젝트 Secondhand 구현시 이슈 사항을 정리한 글입니다. mysql 8.0 InnoDB 환경에서 테스트 되었습니다. 발단 : 왜 검색 기능 개선이 필요했나? Secondhand는 동네를 검색할 수 있는 기능이 있습니다. 예를 들어 이런거요. [이미지 출처 : https://kikimong.com/7179] 먼저 데이터는 이런식으로 들어가 있습니다. 법정동 코드를 pk 로 하였습니다. 행정동 코드보다 법정동 코드를 선택한 이유는 변동이 더 적기 때문입니다. [참고링크 : 법정동과 행정동의 차이는?] 그리고 검색을 용이하게 하기 위해 일부러 비정규화하였습니다. 그래서 지역 검색을 어떻게 구현하면 좋을까요? 전개 초기 구현 방법 Where ~ like 사실 이 프로젝트.. 2023. 9. 13.
MySQL 에서 외래키가 있으면 어떤 것들을 검증할까? 외래키 제약 조건은 관련 데이터의 일관성을 유지하는 데 사용합니다. 💡 다른 종류의 제약 조건과 마찬가지로 데이터가 일치하지 않을 경우 데이터가 삽입되거나 업데이트되는 것을 방지할 수 있습니다. …… 또는 DML 작업이 수행될 때 제약 조건으로 인해 하위 행 의 데이터가 삭제되거나, 다른 값으로 변경되거나, 외래 키를 생성할 때 지정된 옵션 에 따라 null 로 설정될 수 있습니다. 참고링크 외래키 먼저 공식 문서를 읽어보면… 외래 키는 관련 정보의 빠른 조회를 가능하게 하는 것 외에도 데이터가 삽입, 업데이트 및 삭제될 때 이러한 포인터가 무효화되는 것을 방지하여 참조 무결성을 강화하는 데 도움이 됩니다. 이 강제 메커니즘은 제약 조건 의 한 유형입니다. 연결된 외래 키 값이 다른 테이블에 없으면 다른.. 2023. 9. 12.