본문 바로가기

RDS cpu 100% 결론부터 말하자면 RDS 의 cpu 가 예상과 다르게 100% 를 찍는다면 빨리 slow query 를 찾아보세요.며칠 동안 불규칙 적으로 발생한 5분 정도 짜리의 cpu 과부하를 찾아내는 것은 쉽지 않았습니다.RDS 에서 생성된 slow_query.log 파일에는 로그 flush 메시지 밖에 없었으니까요./rdsdbbin/mysql/bin/mysqld, Version: 5.6.27-log (MySQL Community Server (GPL)). started with:Tcp port: 3306 Unix socket: /tmp/mysql.sockTime Id Command ArgumentColored by Color Scriptercs특별히 높지 않은 커넥션 수...lock 이 걸렸는지, slow que..
Insert Emoji 웹서비스를 구축할 때 데이터베이스는 주로 utf-8 을 사용해 왔다.요즘은 웹과 모바일 앱을 동시에 사용하다 보니, 입력란에 모바일 이모지들을 함부로(?) 입력하는 유저들 덕분에 앱이 종료되거나 오류가 발생하는 일이 생긴다.이것은 모바일 내장 이모지들이 4byte 문자열이고, DB collation 이 3byte 집합인 UTF8 을 사용하기 때문이다.그로 인해 아래와 흡사한 오류들을 마주할 수 있다.### Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x83 \xF0...' for column 'comment' at row 1해결 방법은 어렵지 않다. DB 옵션의 character_se..
order by case when 테이블의 특정 조건의 데이터는 오름차순, 특정 조건의 데이터는 내림차순이 가능할까...이벤트가 있다.이벤트 종료일이 10/20 부터 10/30 일 까지가 있다.오늘이 10/25 일 이라면 이벤트 종료 임박 순서로 나열하고자 때,10/25 ~ 30 일까지 오름차순, 그 뒤에 10/24 ~ 20 일까지가 내림차순으로 나열되어야 한다.order by case when event_edate >= NOW() then event_edate end asc,case when event_edate < NOW() then event_edate end desc단순하게 생각하고 쿼리를 날렸더니 다음과 같은 결과가 나왔다.10/24 ~ 20, 10/25 ~ 30음... 순서가 지맘대로 나왔군. 저 두 순서만 바꾸면 되겠구나 해..
mysql if 하나의 결제 테이블에 결제 수단과 결제한 금액이 들어 있다.결제 수단별 결제 횟수와 결제 금액을 출력하는 sql.컬럼별 subquery 를 돌리지 않고 if 문을 사용하여 조금이나마 서버를 도와주기.* Subquery12345select (select count(*) from order where ds_pay_method = 'VBank' and no_pay_amt > 0) as vbank_cnt, (select sum(no_pay_amt) from order where ds_pay_method = 'VBank' and no_pay_amt > 0) as vbank_sum, (select count(*) from order where ds_pay_method = 'Card' and no_pay_amt > ..
Row size too large Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline Mysql 에서 글을 겁나 길게 썼더니 발생한 오류이다.InnoDB 는 한 레코드 삽입에 있어서 8000 byte 의 크기 제한이 있다. 그 크기를 넘어섰다고 경고를 하는 것이다.해당 컬럼 타입을 TEXT 나 BLOB 으로 변경하거나 ROW_FORMAT 을 DYNAMIC 이나 COMPRESSED 로 변경하란다.이미 BLOB 으로 되어 있고 COMPRESSED 로..
MySQL Workbench Read Only 아주 오래전, 기억이 나지 않는 어떤 이유로 워크벤치는 사용하지 않았다. dbforge가 가볍고 좋았다;주변에서 워크벤치에 대한 질문들이 간혹있어 깔아봤는데 시작부터 장애가 ㅋㅋ 특정 테이블의 데이터를 직접 수정하려니 불가능하다.Read Only 라고 쓰여 있는 곳에 마우스를 올리니, The table has no unique row identifier (primary key or a NOT NULL unique index) Primary key 가 필요없는 테이블이니 Primary key 를 넣지 않았을 것이고,unique index 도 넣을 수 없으니 넣지 않았을 것이고... Not unique index 하나 넣으니 Read Only 가 사라졌음. ^^primary key 나 index 가 없다는 ..
Mysql root password reset 단 하나 알고 있는 계정으로 들어갔는데 프로시저를 변경할 수가 없다. 콜은 되고, 내용은 볼 수 없고...ㅜ 프로시저 생성자 패스워드도 모르고, 결국 mysql root 패스워드 초기화하여 작업 준비. - 1분 작업 예상하고 스피드하게 Start # /etc/init.d/mysqld stop # mysqld_safe --skip-grant & [1] 1613 # Starting mysqld daemon with databases from /var/lib/mysql # mysql > use mysql; > update user set password=password('#abcdefg$') where user='root'; > flush privileges; > quit # /etc/init.d/mysqld..
실행 계획 EXPLAIN EXPLAIN 사용 테이블의 어느 곳에 인덱스를 추가해야 성능이 향상되는지 알 수 있음. 옵티마이저가 최적의 순서로 테이블을 조인할 수 있는 지 여부 검사.EXPLAIN 결과 컬럼 id : 쿼리 안의 SELECT 순차 번호 select_type : SELECT 타입SIMPLE - 단순 SELECT (UNION 이나 서브쿼리를 사용하지 않음)PRIMARY - 가장 외곽의 SELECTUNION - UNION의 두번째 혹은 그 이후의 SELECTDEPENDENT UNION - UNION의 두번째 혹은 그 이후의 SELECT, 외곽 쿼리에 의존적UNION RESULT - UNION의 결과 SUBQUERY - 서브쿼리의 첫번째 SELECT DEPENDENT SUBQUERY - 서브쿼리의 첫번째 SELECT, 외곽..