데이터아키텍처83 MySQL 힌트(Hint) 종류 및 사용법, 꼭 확인해야 할 주의사항 Oracle에서도 힌트가 있었듯이, MySQL에서도 힌트를 사용할 수 있습니다. 우리가 수행하는 쿼리 성능을 최적화하려면 인덱스 설정, 조인 방식, 데이터베이스 설정 등을 고려해야 합니다. 그러나 가끔은 MySQL 옵티마이저가 제시하는 실행계획이 기대에 미치지 못할 때가 있습니다. 이럴 때 힌트(Hint)를 사용하여 MySQL 옵티마이져에게 내가 원하는 실행 계획을 생성하도록 요청할 수 있습니다. 이글은 김사원이 "MySQL 힌트는 오라클하고 다르네요"라는 말이 화두가 되어 작성하게 됐습니다. 뒷부분에 주의 사항까지 정리했으니 확인하세요. MySQL 힌트 사용법MySQL 힌트는 쿼리에서 특정 실행 계획을 지정하도록 하는 명령어입니다. 쿼리 옵티마이저(Query Optimizer)는 힌트를 참고하여 최적의.. 2024. 8. 13. MySQL 파티션 종류 및 사이즈 설계 전략, 안하면 조회 안되는 테이블? MySQL 데이터베이스가 많은 데이터를 컨트롤하기에는 한계가 있다는 말을 한적 있습니다. 그래서 페이징처리도 MySQL만의 방법으로 처리해야 합니다. 특히, MySQL의 경우 테이블 사이즈에 영향을 많이 받는 특징이 있습니다. 이 부분에 대해서는 “Why MySQL Could Be Slow With Large Tables”라는 링크에 글에서도 언급하고 있고 그 하나의 대안으로 파티션을 제안하고 있습니다. 이 글에서는 어떤 경우에 파티션 테이블로 만들어야 하는지 그 기준을 알아보도록 하겠습니다. 느려진 테이블 파티션이 답이다어느 날 오후, MySQL에서 일부 서비스에서 데이터를 보여주는 게 점점 느려진다는 확인 요청이 들어왔습니다. 특히, 상품의 가입 내역을 저장하는 테이블이 100GB를 넘어서면서 쿼.. 2024. 8. 12. MySQL LIMIT를 사용하여 페이징을 처리하는 방법 MySQL 데이터베이스를 사용하다 보면, 많은 양의 데이터를 처리하는 것이 까다롭다는 생각이 듭니다. 하지만 구글, 링크드인, 아마존, 네플릭스, 트위터 등에서는 잘 사용하고 있습니다. 이유는 하나입니다. 그들은 최적화하는 방법을 알기 때문이라 할 수 있죠. 특히 많은 데이터를 한꺼번에 보여주기보다는 페이징 처리 하는 노하우가 그런 경우입니다. 이번 글에서는 페이징에 MySQL의 LIMIT 절을 효과적으로 사용하여 수천만 개의 행에서도 쿼리가 효율적으로 실행되도록 하는 방법을 알려 들리겠습니다. 기본 LIMIT의 문제점MySQL에는 limit와 offset이라는 기능(?)이 있습니다. 데이터가 많은 테이블에서 간단한 LIMIT 절을 사용하여 특정 데이터 페이지를 가져오도록 하는 옵션입니다. 써보신 .. 2024. 8. 9. MySQL 실행계획 보는법, 성능최적화 튜닝 MySQL에서 SQL을 튜닝하기 위해 실행계획은 보는 방법은 단순히 EXPLAIN을 쿼리문 앞에 넣어 주기만 하면 됩니다. 하지만 실행계획을 보는 방법은 조금 다릅니다. 오라클의 실행계획과 비슷한 듯 다르기 때문이죠. 실행계획 사용법MySQL에서 실행계획 보는 법은 간단합니다. plan_table을 설치해야 하는 번거로움도 없이, 그냥 SQL 앞부분에 explain만 붙여 주면 됩니다. 아래 실행계획 사용법과 출력 형태를 참고하시기 바랍니다. 1. 실행계획을 보기 위한 explain explaindelete t1 from user as t1 JOIN usr_dtl t2 on (t1.uid = t2.usr_id); 2. 실행계획 출력 형태 그러면 출력된 살행계획을 어떻게 해석할까요? 각각의 컬럼의 해석.. 2024. 8. 2. MySQL에서 캐릭터셋의 collation이 있는 이유는? MySQL에서 캐릭터셋을 확인하다 보면 같이 등장하는 collation있습니다. Oracle과 같은 dbms에는 없는 이 개념은 왜 나온 걸까요? 오히려 MySQL 테이블마다, 또는 database마다 다르게 설정된 collation때문에 애를 먹고 나서 더욱더 이상하게 생각됩니다. 사건의 발단Chatrater Set까지 맞는데, collation이 맞지 않아 조인 속가 느리고, 심지어 조인이 안되는 경우가 생긴다는 김시원의 말을 들었습니다. 상황을 파악해 보니, 한쪽은 원래 데이터베이스를 생성할 때 디폴트 collation이었던 utf8mb4_0900_ai_ci 되어 있었고, 다른 쪽은 Tool로 생성되어서 인지 각 컬럼마다 utf8mb4_general_ci 를 적용한 상태였습니다. "아니 컬래.. 2024. 8. 1. MySQL의 S-Lock, X-Lock 그리고 트렌잭션 격리수준까지 알아보자 오라클에서 발생하지 않을 법한 일들이 MySQL에서는 발생합니다. Oracle 신봉자들은 이런 일이 발생할 때마다 "그래서 오라클을 써야 해요"라고 말하지요. 하지만 난 생각이 다릅니다. '어떤 물건이건 그 가치에 맞게 활용한다면 된다'는 주의입니다. 우리는 왜 MySQL은 그런 Lock 메커니즘을 채택했는지 알면 그에 맞게 잘 사용할 수 있습니다. 발생한 사건현상은 이랬습니다. 제가 테이블을 ALTER문을 이용해 변경 작업을 해야 하는데, 특정 Select문이 Lock을 잡고 있어서 해당 테이블에 변경되지 않고 대기하는 상황이 발생했습니다. 근데 그 Lock은 김사원의 Session에서 발생하고 있었죠. 김사원은 단지 select만 했는데 Lock을 잡는다는 게 이해가 안 되더군요. 그래서 이 문제를 .. 2024. 7. 31. MySQL 느린(Slow) 쿼리를 찾아내는 방법 Oracle에서 느린 쿼리를 추출하는 방법은 ‘동적성능뷰’라고 하는 v$로 시작하는 오라클 내부 통계정보를 찾아보는 것입니다. MySQL에서 Slow Query Log를 통해 추적할 수 있습니다. 이 로그는 일정 시간(수 seconds) 이상 걸리는 쿼리를 파일 또는 테이블에 기록하여 데이터베이스를 쿼리를 튜닝하는 방법이죠. Slow Query Log 활성화 방법1. 설정확인현재 Slow Query Log 설정이 되어있는지 부터 확인해야 합니다. 이미 설정되어 있을 수도 있으니 꼭 먼저 확인하고 접근해야 합니다. SHOW VARIABLES LIKE ‘slow_query_log’;SHOW VARIABLES LIKE ‘slow_query_log_file’;SHOW VARIABLES LIKE ‘long_q.. 2024. 7. 29. 캐릭터셋(Character Set) 확인, 종류가 다르게 쓰는 이유는? 캐릭터셋(Character Set)에 대해 우리는 일반적으로 신경을 쓰지 않습니다. 그런데 이행(migration)과 같은 작업을 하게 되면 불거지게 되는 문제입니다. 캐릭터 셋이 맞지 않아 한글이 깨지거나 이상한 문자로 표시되는 일이 발생하죠. 이번 글에서는 캐릭터 셋에 대해 알아보도록 하겠습니다. Oracle, MySQL 캐릭터셋 확인 방법1. 오라클 캐릭터셋 확인 및 종류 Oracle에서 아래 명령어를 통해 설정된 캐릭터 셋을 알 수 있습니다. SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';KO16KSC5601 : 완성형 한글 문자셋으로 일반적으로 많이 사용됩니다. 2,350자의 한글, 4,888자의 한자.. 2024. 7. 26. Sqlplus spool 명령어, set 설정으로 csv 데이터 추출 방법 같은 종류의 database 이관을 할 때는 방법이 많습니다. 예를 들어, 오라클에서 오라클로 데이터 이관을 할 때를 생각해 보죠. 데이터파일을 옮겨도 되고, dblink를 써도 되고, Export, Import 툴을 사용할 수도 있어 여러 옵션이 있습니다. 하지만 이기종 간에 이행은 고려할 사항이 좀 있는데요. 요즘 AWS 클라우드에서는 DNS라는 솔루션으로 손쉽게 이관한다고 하지만, 기본적으로 db to db로 바로 연결할 수 없기 때문에 대부분의 마이그레이션 솔루션들이 파일로 떨어뜨린 다음에 Load 하는 방식을 사용합니다. 이번에는 오라클에 SPOOL이라는 기능으로 구분자로 데이터를 추출하는 방법을 알아보도록 하겠습니다. 우리가 잘 알고 있는 csv파일로 떨어뜨린다고 이해하시면 됩니다. SPOOL.. 2024. 7. 19. 이전 1 2 3 4 5 6 ··· 10 다음