데이터베이스
-
[MySQL] GROUP_CONCAT length 제한데이터베이스/MySQL 2022. 3. 4. 02:27
작업 중에 group_concat을 활용하여 객체를 요소로 갖는 배열 형태를 반환하게끔 했는데 길이 제한 때문에 텍스트가 잘리는 이슈가 발생했다. 구글링 해보니 group_concat은 1024 문자가 기본값이라고 한다. 이 정도 길이는 택도 없었기 때문에 group_concat의 최대 길이를 변경했다. SET SESSION group_concat_max_len = 150000; 글로벌하게 적용하고 싶다면 GLOBAL 키워드를 사용하면 된다. SET GLOBAL group_concat_max_len = 150000; 아래 쿼리를 실행하면 group_concat의 기본 길이 확인할 수 있다. SHOW VARIABLES LIKE '%GROUP_CONCAT%' 참고자료 https://sebhastian.com..
-
[MySQL] SQL Error Explicit or implicit commit is not allowed in stored function or trigger데이터베이스/MySQL 2022. 1. 31. 18:56
MySQL 함수를 작성하다 마주친 에러와 구글링을 하며 알게 된 사실에 대해 짧게 기록해본다. 에러 발생 원인부터 말해보자면 함수 내에서 프로시저를 호출했기 때문이었고, 함수 대신 프로시저를 사용하여 에러를 해결했다. 에러 문구에 나와있듯 Stored function 또는 트리거 내에서는 commit이 허용되지 않는다. 즉 Stored function 내부에서는 트랜잭션 작업을 수행하면 안 된다. → Stored procedure와 차이점 https://stackoverflow.com/questions/16969875/error-code-1422-explicit-or-implicit-commit-is-not-allowed-in-stored-function Error Code: 1422. Explicit ..
-
[MySQL] MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction데이터베이스/MySQL 2022. 1. 23. 18:22
개발 서버 DB에서 특정 데이터를 삭제하려고 했는데 timeout이 발생하는 이슈가 생겼다. 처음에는 단순히 내가 사용하고 있는 DB툴 문제 인가 생각했는데 아니었고, lock 걸린건가 확인해봤는데 이것 역시 아니었다. # 모든 프로세스 조회 SHOW FULL PROCESSLIST; # 락테이블 조회 select * from information_schema.innodb_locks; # 대기중인 락 조회 select * from information_schema.innodb_lock_waits; # 트랜젝션조회 select * FROM information_schema.INNODB_TRX; INNODB_TRX 테이블에서 현재 실행되고 있는 트랜잭션들을 찾았고, PROCESSLIST 테이블에서 각 trx_..
-
[Redis] 레디스를 활용한 캐시 서버 구성데이터베이스/Redis 2022. 1. 9. 18:13
틀린 내용을 발견하신 경우 말씀 부탁드립니다! 🙇 현재 다니고 있는 회사의 일부 서비스 페이지 로딩 속도가 느린 이슈가 있었고, 이를 해결하기 위하여 (근본적인 해결책은 아니지만) 레디스를 도입해 캐시 처리를 하기로 했다. 이전에 레디스를 활용하여 API 문서 자동 생성기를 만들어보긴 했으나, 사용자들이 직접 사용하는 서비스에 레디스를 적용한 것은 또 다른 느낌이라 블로그에 기록하기로 했다. 상세한 명령어나 설정 방법은 구글링을 하면 충분히 나오는 것이기 때문에 이번 작업에서 내가 배웠다고 생각한 것들만 간략히 기록하기로... 0. 왜 Redis를 사용했는가?'인메모리 저장소에는 Redis 뿐만 아니라 Memcached도 있는데 왜 Redis를 사용했나요?'라고 누군가가 물어본다면 아래와 같이 답할 것이..
-
[MySQL] SUBSTRING_INDEX + REPLACE로 UPDATE 하려고 했다데이터베이스/MySQL 2021. 10. 24. 15:00
이번에 서비스에 추가된 내용이 있어 액션이 발생한 날짜를 업데이트해줘야 하는 작업이 필요했다. 이 과정에서 SUBSTRING_INDEX + REPLACE를 사용하여 칼럼 내용을 업데이트하려고 했던 내용을 포스팅하려고 한다. (했던...이라고 쓴 이유는 저 방법으로 못했다는 뜻이다.) 처음에 생각했던 것은 아래와 같다. 1. 칼럼의 기본 값을 '0,0,0,0,0'으로 세팅한다. 2. 액션이 발생하면 알맞은 인덱스 값을 찾아 날짜로 업데이트한다. (예를 들어 B 액션이 발생했으면 두 번째 위치에 있는 '0'을 XXXX-XX-XX 형태로 업데이트) 3. 업데이트된 데이터를 서버에서 받아 처리한 뒤 프론트에 전달한다. 끝! SUBSTRING_INDEX() 함수는 문자열과 구분자 및 위치를 넘겨주면 구분자를 기준..