Galaxy 자체의 optimization을 한 후에 데이터베이스가 병목이라는 것은 알고 있었지만, 손을 놓고 있다가, 살짝 건드려주었습니다. 기본적인 두가지 optimization을 해주었는데, 상당히 성능이 좋아졌군요.
Indexing
모든 optimization은 measurement가 우선해야겠지만, 귀찮은 나머지, 그냥 MySQL이 제공하는 Slow query log를 사용해서 Index를 달기 위한 query들을 선별했습니다.
log_slow_queries
set-variable = long_query_time=1
MySQL 설정에 위와 같이 추가해주면, 1초 이상 걸리는 (in real time) query들의 로그를 생성해줍니다.
처음 table 설계시에는 Galaxy의 logic에 대한 고려가 없었기 때문에 Primary/Unique를 제외한 Index는 하나도 없었습니다. Indexing을 적당히 넣어주자 당장 Slow query에서 빠졌을 뿐만 아니라, 체감속도도 빨라졌습니다.
Increasing Buffer Size
Galaxy가 사용하는 MySQL table은 모두 InnoDB로 되어있기 때문에 다음 설정들을 손봐주었습니다.
set-variable = innodb_buffer_pool_size=128M
기본값인 32M일 때는, Indexing을 해주었음에도 불구하고 가끔씩 Slow query가 나왔는데, Buffer size를 늘려주고 나서는, 처음 query를 제외하고는 Slow query가 나오지 않더군요.
Etc.
대충 크게 잡아놨던 Column들의 type들을 조정해주었습니다. Galaxy는 날짜 순으로 최근 item부터 보여주기 때문에, table order를 날짜 순으로 정리해줬습니다. Defragmentation도 해주었습니다.