본문 바로가기

MySQL3

Transaction Isolation Level 예전에 프로젝트를 할때, 방문자수 카운트쿼리를 실행하다가 Dead lock이 걸리면서 서버가 죽어버리는 경험을 했었다.. 그때 해결한 방법인 트랜잭션 격리 수준에 대해 기록하려한다. 트랜잭션의 격리 수준(Transaction Isolation Level)은, 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 조회, 변경되는 데이터의 접근을 허용할지 말지를 레벨에 따라서 나누고 있다. 일단 트랜잭션에는 ACID를 만족해야하는데 여기서 Isolation 격리성을 보장하려면 동시에 처리되는 트랜잭션을 차례대로 실행해야하지만 성능저하의 문제로 격리 수준이 4단계로 나누어져 있다. READ UNCOMMITTED(커밋되지 않은 읽기) READ COMMITTED(커밋된 읽기) REPEATABLE R.. 2022. 9. 27.
MySQL 옵티마이저 (Optimizer) Explain mysql 쿼리 작성중 성능향상을 위해 Slow Query를 없애는것으로 쿼리 튜닝을 검토할 필요가 있다고 하는데,, DB 튜닝이나 쿼리 최적화를 위해서 알아두면 좋은 내용인 것 같다! 처음부터 생각하고 쿼리를 짠다면 더 좋을거 같기도 ,, 암튼 Explain을 사용하여 쿼리를 테스트하고 작성해보겠다. MySQL Explain 이란 DB가 데이터를 찾아가는 과정을 우리가 쉽게 볼수있도록 DB결과 셋으로 보여준다. -사용 방법 (쿼리 앞에 EXPLAIN 붙이면 됨) EXPLAIN [EXTENDED] SELECT ... FROM ... WHERE ... 쿼리를 실행하면 컬럼에 항목별로 나옵니당 -항목별 의미 id : 행에 있는 select 구문의 개수 select_type : select에 대한 타입 tab.. 2022. 5. 10.
동적쿼리 foreach문 사용법 업무중에 직면한 문제...ㅎㅎ arrayList를 mybatis에서 동적쿼리로 이용하는 방법에 대해 기록하려합니다. jsp에서 가져온 cateCodeList는 "Y0101,Y0102,Y0103" 이런 String 형태입니다. 이걸 list형태로 보내주기 위해 cateCodeList를 split후 반복문으로 list에 담아줍니다. if(request.getParameter("cateCodeList") != null) { String [] codeList = request.getParameter("cateCodeList").split(","); List cateCodeList = new ArrayList(); if(codeList != null) { for (String str : codeList) { ca.. 2021. 6. 19.