본문 바로가기

DBA55

[DB] Nested Loop Join 부분 범위처리의 핵심 조인2중 반복문으로 구현이 가능한 Nested Loop Join이다.이 조인 방법은 초대량 테이블에서 아주 나쁜 성능을 보이지만 반대로 극적인 결과를 낼수있다.바로 부분 범위처리에 특화된 특징을 가지기 때문이다.부분 범위처리란?소트 머지조인이나 해시조인같은 경우 PGA에서 해시영역등을 할당받고 테이블을 생성하는등의 부가적 비용이 발생한다. 이들은 한번 영역을 할당받고 준비가 끝나면 최종 작업까지 극적인 성능을 보이지만, Nested Loop 조인은 이러한 부가적인 비용이 필요없다.왜냐하면 하나의 레코드 단위로 Join을 시도하며 결과를 도출하기 때문이다.즉 쉽게말해 그냥 무식하게 조인하므로 부가적 비용이 들지않고, 레코드 단위로 작업하므로 사용자가 원하는 범위안에서만 조인이 가능하기.. 2024. 9. 12.
mysqlのSQLをoracleで書く(一覧) concat文字列を結合する。Oracleでは2つしか結合不可。CONCAT(char1, char2)Oracleで3つ以上の文字列を結合する場合は||を使用char1||char2||char3format date_format time_format値を指定のフォーマットで整形した文字列を取得する。FORMAT(string,format)DATE_FORMAT(date,format)TIME_FORMAT(time,format)OracleではTO_CHARを用いる。また、フォーマットに%Yや%hは使えない。(YYYY/MM/DDなどを使用)TO_CHAR(date, 'YYYY/MM/DD')IFNULL値がNULLか判別する。 IFNULL(カラム名, ‘置き換える値’)OracleではNVLを用いる。NVL(カラム名, ‘置き換える値’)coalesceという関数も.. 2024. 5. 10.
[Django] HTTP error code 401, 403, 404, 405, 415, 500 요즘 프로젝트를 진행하면서 정말 자주 접하는 HTTP 에러 코드들이 있습니다. 매번 볼때마다 당황하지 않고 빠르게 해결하기 위해서 다시 한번 머릿속으로 복습해보려고 이 글을 써봅니다. #401 UnAuthorized 인증 문제 : Token을 잘못보낸 케이스 ( JS headers확인, Authorization: Bearer + token) 자주 발생. 주로 JS에서 api의 headers를 확인해보면 오타가 있거나 , token을 올바르지 않은 형식으로 보내고있거나, payload에서 토큰을 정상적으로 가져오고 있지 못할때 발생했었습니다. #403 Forbidden 주로 권한 문제, 현재 열려고 하는 웹페이지 또는 리소스가 액세스 할 수 없는 경우 발생을 합니다. 과거에 한번 발생을 했었는데, 검색을 .. 2024. 4. 3.
DB 모니터링 구축 (PMM) PMM을 사용하여 모니터링 시스템 구축하기 RDS mysql을 사용중인데 기본적인 DB 인스턴스에서 모니터링을 하고 있다. 매번 aws console로 모니터링하기 번거롭기도 하고 좀 더 세부적인 DB 매트릭에 대해 모니터링 하고자 어떤 조합을 사용할지 고민하다가 PMM이라는 DB 모니터링 솔루션으로 구축하기로 함 PMM은 기본적으로 프로메테우스+그라파나 기반이라 PMM 클라이언트가 DB 매트릭을 수집하고 PMM 서버에서 수집한 매트릭을 시각화하여 보여준다. PMM Percona Monitoring and Management = 무료 오픈 소스 Database 통합 모니터링 솔루션 위와 같은 아키텍처이고 PMM 클라이언트가 DB 매트릭을 수집하고 수집한 매트릭을 PMM 서버에서 대시보드화하여 보여주는 방.. 2024. 3. 21.
Real Mysql 8.0 : 옵티마이저 옵티마이저 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하며, 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립한다. 우리들은 실행 계획의 이해해야 실행 계획의 불합리한 부분, 더 최적화된 방법으로 실행 계획을 수립하도록 유도할 수 있습니다. 쿼리 실행 절차 1. SQL 파싱 사용자로부터 요청된 SQL문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리해서 파스 트리가 만들어짐 설명 : SQL문장이 문법적으로 잘못됐다면 이단계에서 걸러짐, MySQL서버는 SQL문장 그자체가 아니라 파스 트리를 이용해 쿼리를 실행 2. 최적화 및 실행 계획 수립 SQL의 파스 트리를 확인하면서 어떤 테이블부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선.. 2024. 3. 11.
MySQL Query Cache은 무조건 좋을까? (Feat. query cache lock) MySQL에서는 한 SELECT 쿼리의 결과를 캐싱해주는 Query Cache 라는 최적화 기능을 제공해주고 있다. (하지만, 5.7.20 버전부터 deprecate되었고, 8.0 버전에서부터는 제거되었다고 한다. - 참고 글) 그렇다면, Query Cache은 항상 사용하면 좋은 것일까? (모든 캐싱이 그러하듯, 당연히 아닐 듯 하다.) 실습과 함께 한번 확인해보자. 실습 준비 MySQL 5.7.20 Docker Container 환경에서 실습하였습니다. 참고로 query_cache_type 의 default 값은 OFF이다. 이 값은 MySQL을 구동한 이후에는 변경할 수 없으므로, 아래와 같이 설정파일을 변경한 후, 한번 재기동해주어야 한다. [mysqld] query_cache_type = 2 #.. 2024. 3. 11.