DB속도 개선을 하기 위해서는 실행 계획을 보고 인덱스를 타고 있는지 확인해야 한다. 그런데 무엇보다도 중요한건 쿼리가 효율적으로 돌아가는지 파악이 필요하다. 인덱스를 추가하기 전에 쿼리 부터 수정해야 할 필요가 있는지 확인하는게 중요하다. 회사에서 느리다고 하는 화면을 속도 개선해달라고 하는 요청때문에 쿼리를 뜯어보았다. 쿼리의 전체적인 부분을 이해하기 보다 그 전에 약 1000줄 되는 전체 SQL 문에서 느린 부분을 찾아내는것이 우선이다. 아래 쿼리가 느린 부분의 쿼리이다. 약 15초 정도 걸렸다. SELECT htl1.`hotel_id`, DATE_ADD('2024-11-01', INTERVAL `num` DAY) AS `date`, SUM( CASE WHEN hcl1grp.`close_date` ..
Text Filed에 스타일을 주고 싶은데 데이터에 해당 Text Filed에 서식을 무조건 주는게 아니라 데이터에 따라 스타일을 주고 싶을 때가 있다. 그러면은 conditionalStyle 을 사용하면 된다. [조건부 syle 조건과 서식 지정] conditionalStyle 사용 방법은 style 태그안에 넣고 그 style name을 text filed에 줘야 한다. 그리고 conditionalStyle 태그안에 conditionExpression 태그로 조건을 주고 또 style 태그로 서식을 건다. 이 style이 conditionExpression 태그의 조건에 부합하면 서식이 걸린다. [Table안의 Text Filed 스타일 지정] style을 주기위해서는 태그안에 있는
git의 stash 기능은 로컬에서 변경된 모든 파일을 로컬 워킹 디렉토리에 넣고 다른 작업을 하고 나중에 다시 불러와서 수정할 수 있는 방법이다. 이 기능은 여러가지 작업을 다발적으로 하게 될 때 도움이 많이 된다. [Stash 필요한 이유]만약 하나의 기능을 수정중이거나 만드는 중일때 특정 버그를 수정하는 일이 들어와서 바로 수정할 일이 있을 때 수정중인 파일을 그대로 냅두고 버그를 수정하고 커밋할때 수정중인 파일을 실수로 올리는 일도 있을것이고 기능 수정은 완료 했는데 나중에 커밋을 할때 stash 기능으로 워킹 디렉토리에 저장할때 사용한다.또 커밋하기에는 애매한데 다른 브랜치로 이동이 필요할때 변경 파일들을 stash 하고 다른 브랜치로 이동해서 작업한 후 다시 돌아와서 stash를 pop 하고 ..
갑자기 DB Lock 이 걸려 서버 장애가 생기는 경우가 있다. 그럴 경우 빠르게 Kill을 해줘서 장애를 해결 해야 한다. [DB Lock 걸린 트랜잭션 조회] 우선 트랜잭션 관련 아래 명령어 3개가 있다. 1번은 어떤 쿼리가 락을 걸어버렸는지 확인 할 수 있고, 2번은 락이 걸려 있는 테이블에서 작업하려고 대기중인 상태이고, 3번은 실행중인 트랜잭션이다. # 락을 걸어 버린 트랜잭션 확인 1. SELECT * from information_schema.INNODB_LOCKS; # 락이 걸려 대기중인 트랜잭션 2. SELECT * from information_schema.INNODB_LOCK_WAITS; # 트랜젝션 확인 3. SELECT * from information_schema.INNODB_T..
배포 shell 스크립트로 배포를 할때는 자동으로 tomcat이 shutdown되는 일이 있었는데 수동으로 한줄 한줄 스크립트를 실행시켜서 배포 할때는 자동으로 tomcat이 shutdown 되지가 않아 원인을 2달동안 못찾았다 원인 파악 후 위 이슈가 생기려면 아래와 같은 조건이 필요하다 1. 배포 스크립트에서 tomcat을 서비스로 실행시키지 않고 tomcat의 shutdown.sh, startup.sh 로 실행시킨다. 2. 1번 조건에서 shutdown.sh, start.sh를 백그라운드로 실행시키지 않는다. (&, nohup 사용 안함) 3. 2번 조건으로 tomcat을 start 한 후 마지막에 tail -f 로 로그를 확인한다 4. tail -f 로 로그를 확인 하는 중에 ssh 접속 프로그램..
[Master Server] mysql -u root -p -e 'SHOW MASTER STATUS \G' | egrep "File|Pos|Bin" [Slave Server] mysql -u root -p -e 'SHOW SLAVE STATUS \G' | egrep "Master_Log_Pos|Running|IO_Err|SQL_Err" 슬레이브 서버에서 IO_Running과 SQL_Running이 YES 이면 이중화가 성공적으로 된것이다. 만약에 Slave_IO_Running 이 No라면 복제를 진행하지 않고 있는 경우 Slave_SQL_Running이 No라면 복제를 시작했지만 어떤 이유로 복제 절차를 멈춘 상태이다. 마스터서버랑 슬레이브서버 데이터가 완전히 같으면 마스터 서버의 Position과 슬레..
이 에러는 다른 세션에서 이미 사용중인 테이블일때 Lock 을 거는데 그 Lock걸린 테이블에서 작업을 할때 기다리다가 시간초과 나서 나는 에러이다. 대기시간은 아래 쿼리로 확인 할 수 있다. show variables like 'lock_wait_timeout'; 솔직히 근본적인 에러는 해결이 어렵다. 첫번째 해결 방법으로 일단 첫번째로 할 수 있는 방법으로는 Lock 대기시간(lock_wait_timeout)을 늘려주는것이고 두번째로는 격리레벨을 낮추는 것이다. [격리레벨 조회 방법] 디비 격리레벨(isolation level)은 트랜잭션 끼리 얼마나 영향을 미칠것인가 인데 높은 레벨일 수록 영향을 많이 미친다. 격리레벨 수준은 크게 아래 4단계인데 기본적으로 마리아디비에서는 "REPEATABLE R..
tomcat9 버전이여서 써트코리아 공식 매뉴얼 참고해서 인증서를 적용하려고 했으나.. 매뉴얼대로 하니까 절대로 안돼서 구글링하여 겨우 하였다. 톰캣 server.xml 에서 아래 소스 추가해서 tomcat을 껐다 키기만 하면 ssl 적용이 완료가 되긴하는데.. 아래 소스 구조는 tomcat9버전이 아니라 tomcat8 버전이고 이렇게 세팅하니까 잘됐다.. ( 9로 하니까 원인모를 에러가 빵빵뜸..) 한가지 중요한 점은 SSL 파일명의 확장자인데 새로 받은 jks는 type = RSA 가 있어야 한다고 생각했지만 있으면 에러가났고 지우니까 잘 실행됐다.( tomcat8매뉴얼엔 없지만 tomcat9 매뉴얼엔 type = RSA가 있음) 만약 SSL 파일이 PFX/P12 이면 keystoretype="pkc..
"CALL 프로시저명" 까지 치고 프로시저명 뒤에 컨트롤 스페이스바로 하면 뒤에 insert 해야 할 파라미터들이 쭉나온다. :를 @로 바꿔준다. @변수명 은 현재 세션에서만 사용할 변수를 지정하는것이다. 그래서 스크립트창에서 SET @변수명 = 값 하면은 해당 스크립트창 내에서 쭉 사용할수있다. 필요한 세션 변수명에 값을 저장을 안하면 자동으로 null로 매핑된다. 그래서 꼭필요한 변수명에만 값을 넣어도 프로시저가 실행된다. 그리고 인자값이 in이 아니라 out인건 뒤에 수동으로 @변수명을 넣어줘야 한다. 만약에 Temp 테이블을 out 받는거고 조회하고 싶다면 select 해서 세션변수명에 저장된 테이블을 뽑아내고 그걸 조회해야 한다. Temp테이블을 생성한걸 다른 프로시저에서 사용하고 싶다면 세션 ..