개발하면서 부딪혔던 문제들 3

[DB][Mariadb] Lock 문제를 해결해보자

주제: Waiting for table metadata lock DB와 프로그램을 연결하는데 query문을 날렸는데도 프로그램이 멈춰있다는 건 DB 처리에 문제가 생겼다고 판단하는게 좋을 것 같다.DB에서 문제점을 살펴보니 다음과 같았다. Command에 있는 Sleep이 신경쓰인다. 난 Sleep하라는 명령을 보낸 적이 없을텐데?아래 개발자 네트워크에 들어가보면 댓글 중 다음과 같은 사실을 알 수 있다. sleep 상태 : 클라이언트에서 연결을 하고 연결을 종료 하지 않았거나, 느린 쿼리가 실행되어 역시 연결 종료를 하지 못했을 경우에 발생하는 것입니다.http://www.mysqlkorea.com/gnuboard4/bbs/board.php?bo_table=community_04&wr_id=705 따라..

[DB][Mariadb 활용기] auto_increment 사용 시 주의사항

DB에 계속해서 자료를 넣고 이를 카운트하기 위한 데이터 타입이 필요했다.Int로는 작을 것 같아서 Int보다 큰 Bigint를 사용하기로 결정.Bigint는 8바이트의 자료형으로 대략 -922경(-9220000조) ~ 922경(9220000조) 까지 숫자를 담을 수 있다.다른 자료형과 범위를 알고 싶으면 아래 사이트를 방문해 보도록 하자. (MySQL 데이터형 및 크기: https://blog.lael.be/post/115) Bigint로 query문을 짜 비교를 해보려고 했더니 아무 결과도 나오지 않았다. 비교 구문이 일반적인 int랑 다른지 알고 글을 쓰기 시작했지만 결과는 auto_increment로 인해 기존 데이터가 지워진 후에도 이 column 값은 전의 값에서 계속 카운트되었다는 점이다. ..

[DB][Mariadb] Mariadb 활용 시 error-1

python과 mariadb를 연결시키는 도중 발생한 에러 1. 발생한 오류 메시지: lock wait timeout exceeded try restarting transaction 2. 에러의 의미: 실행하려는 프로세스가 lock으로 인해 대기 시간을 초과하여 에러 메시지를 보냄. 3. 어떻게 해결했는가1. mariadb에서 명령어( show processlist; ) 를 사용해서 lock이 걸린 processlist를 알아본다. 2. 명령어( show full processlist; ) 를 통해 process의 pid를 알아오고 명령어( kill [pid];) 명령어를 통해 lock이 걸려있는 process를 없애준다. (lock이 걸린 process는 Time의 변화를 통해 알 수 있다)3. 이번 ..