본문 바로가기
반응형

IT/Database112

[Mysql] Log 설정 (general, slow_query, binary ..) Mysql 에서는 서버를 운영하기 위한 로그 정책이 몇가지 있다. Error log -MySQL을 시작, 실행, 종료 시 발생한 문제를 기록General Log - 클라이언트 연결 설정 및 실행된 쿼리를 기록Binary Log - 테이블 생성 및 데이터 변경과 같은 변경 사항을 기록(SELECT 쿼리는 남기지 않음)Relay Log - 복제 구성 시 마스터의 변경 사항을 기록Slow Log - long_query_time 파라미터로 설정된 시간보다 수행시간이 긴 쿼리를 기록DDL Log - DDL문의 실행을 기록가장 많이 사용 되는 General, Slow_Query 에 대해서 다뤄볼 것이다. general_logSHOW VARIABLES LIKE '%general%'+------------------.. 2024. 4. 1.
[Mysql] (Error) You can't specify target table 'xxx' for update in FROM clause MySQL에서 delete문에서 서브쿼리를 사용할 때 You can't specify target table 'xxx' for update in FROM clause 라는 에러가 발생했다. 실제 사용하려던 쿼리는 아래와 같다. DELETE FROM TABLENAME WHERE ID IN (SELECT MIN(ID) FROM TABLENAME); 결과가 제목과 같은 에러였다. 보면 알겠지만 SELECT 이나 DELETE 에 SYNTAX 등의 에러는 보이지 않는다. 이는 MySQL의 특징으로 데이터를 추가나 갱신할 경우 동일한 테이블로 서브쿼리를 사용할 수 없도록 되어 있기 때문이다. Oracle이나 Postgresql에서는 문제 없이 실행된다. 해결 방법 서브쿼리의 FROM 구는 임시테이블로 다룰수 있으므.. 2024. 3. 31.
[Tibero] Error (TBR-12033) : Lock acquisition failed in nowait mode Tibero 사용중 Error (TBR-12033) : Lock acquisition failed in nowait mode 에러가 발생하였다. 해결방법은 lock 걸린 트랜잭션을 종료 시킨다. 내용은 아래 참고 포스팅 참고 바란다. 그리고 또한가지 특별한 케이스가 있었는데, 동료 개발자와 각각 피시에서 로컬로 띄우고 동일한 테이블을 바라보고 있었다. 하나의 세션을 종료 시키니 해결이 되었다. 참고 포스팅 https://thenicesj.tistory.com/762 [Oracle / Tibero] Lock 걸린 테이블 확인 불특정한 다양한 이유로 Database는 Lock이 걸릴수 있고, 만약 그 Lock 이 DeadLock일 경우에는 멈춰버리는 상황이 생겨 최악으로는 프로세스를 내렸다가 다시 실행해야하.. 2024. 3. 30.
[Mysql] 이벤트 스케쥴러 (Event Scheduler) Mysql 에서 스케줄러를 사용할수 있다. 먼저 사용이 가능한지는 아래 쿼리를 통해서 확인이 가능하다.SHOW VARIABLES LIKE 'event%';그럼Variable_nameValueevent_schedulerON이렇게 나온다.  만약 Off 일 경우 SET GLOBAL event_scheduler = ON ; 으로 설정해서 on으로 변경해준다. 그리고 생성과 삭제는 아래와 같다.--생성CREATE EVENT eventNameON SCHEDULE EVERY 1 WEEK-- STARTS '2024-03-27 00:01:00'COMMENT 'event comment'DOTRUNCATE TABLE test;CREAT EVENT 이벤트명ON SCHEDULE EVERY 반복주기 : MONTH, WEEK, .. 2024. 3. 29.
[Mysql] Lock wait timeout exceed 동일한 쿼리에 대해서 여러번을 수행하는데 상황에 따라 Lock wait timeout exceed 가 발생하기도 하고 잘 수행 되기도 했다. 문제의 이유는 트랜잭션 수행 시간이 길어서 발생하였다. 일반적으로 Lock timeout이 발생하는 것은 단일 트랜잭션의 수행 시간이 오래 걸리기에 발생한다. 특히 배치성 작업은 트랜잭션 수행 시간에 특히 주의해야 하고, 만일 트랜잭션 수행 시간이 길다면 트랜잭션을 분리하는것을 권고한다. 해결책은 아래와 같다. 현재 Timeout 시간 확인 SELECT @@innodb_lock_wait_timeout; 원하는 시간으로 설정 SET GLOBAL innodb_lock_wait_timeout = 20; 2024. 3. 23.
[Mysql]Error Code: 2013. Lost connection to MySQL server during query workbench 에서 mysql 쿼리 중 이와같은 에러 메세지가 발생했다. Error Code: 2013. Lost connection to MySQL server during query. 해당 에러 메세지는 쿼리 수행 중 connection 이 종료되어 발생한 에러이다. 쿼리 제한 시간을 늘려주면 해결이 된다. Workbench -> setting 에서 아래 페이지에서 빨간 부분을 필요에 맞게 수정하면 된다. 2024. 3. 22.
[Mysql] GROUP_CONCAT() error group_concat 사용시 아래와 같은 에러가 발생 하였다. #HY000Row 4611 was cut by GROUP_CONCAT() 그러면 아래와 같이 사용해서 SELECT @@group_concat_max_len; 현재 Group concat 시 사용가능한 max length 를 확인한다. 그리고 아래와 같이 변경을 해주면 된다. SET group_concat_max_len=150000; 2024. 3. 21.
[Mysql] Lock 확인 및 해제 여러 쿼리를 반복 , 여러번 수행하다 보면 dead lock 이 걸릴때가 있다. 이럴때는 직접 해결해주지 않고서는 쉽지 않게 풀린다. 찾는 방법은 간단하다. Lock 확인 SHOW PROCESSLIST; //이건 100개만 나오고 전체를 나오게 하려면 SHOW FULL PROCESSLIST; 그럼 이와같이 보인다. Kill kill하는 방법 역시 간단하다. process 의 id를 해주면 된다. KILL 255; 2024. 3. 20.
'is null' VS '= null' sql 쿼리 중에 가끔 실수를 하는 부분이 있어서 정리한다. where 절에 컬럼과 null을 비교 하려면 column = null 이 아닌 column is null 로 써줘야 한다. 이유는 null 의 특성에 있다. null은 비교할수가 없고 null에 대해 의미를 잘 이해하면 알것이다. null에 대해 자세한내용은 아래 참고 포스팅 참고 바란다. 참고 포스팅 https://thenicesj.tistory.com/253 null 관련 (Null, isEmpty(), null관련 annotation) 먼저 자바에서 null과 isEmpty 의 차이를 알아보면 null 인스턴스가 생성되지 않은 상태, list변수가 메모리에 아무런 주소값도 참조하지 않은 상태이다. list에 값이 없을 경우 null로 체.. 2024. 3. 5.
반응형