4천만건가량 있는 디비테이블을 검색하는데요 결과가 나오는게 너무너무 느립니다.
셋팅..
테이블은 innodb테이블입니다.
tmp테이블은 10기가 가량 셋팅 해놨습니다.
innoDB메모리 캐시설정 30기가 해놨습니다.
서버의 메모리는 48기가 가량 되며 cpu자원은 많이 남습니다. 5%도 안사용합니다.
쿼리는 매번 그룹바이를 사용 하게되며.. 검색조건은 like '%~~~%'을 사용합니다. 때로는 한개 또는 두개를 사용하게 됩니다.
그리고 myisam으로 변환하여 풀텍스트 인덱스도 하려고 했지만 검색조건이 맞질 않아 사용이 불가능합니다.
검색 쿼리를 날리면 하드디스크의 IO가 대략 5~30메가 내외로 읽어들입니다.
제가 알고 있기로는 innodb 캐시를 20기가를 할당 하면 분명히 메모리상에 다 올라있기떄문에 하드디스크를 안읽어도 되는걸로 알고 있는데요.. 계속 읽습니다.
tmp테이블은 제가 그룹바이를 많이 묶기때문에 10기가면 충분하고 남으리라 생각해요..
제가 원하는것은 데이터가 메모리 속에 모두 올라가서 하드디스크를 더이상 읽지 않고 아주 빠르게 검색결과를 추출해내는건데요..
어떠한 문제가 있을까요??
아래는 셋팅 내용입니다.
innodb additional mem pool size |
134,217,728 |
innodb autoextend increment |
8 |
innodb buffer pool awe mem mb |
0 |
innodb buffer pool size |
32,212,254,720 |
innodb checksums |
ON |
innodb commit concurrency |
0 |
innodb concurrency tickets |
500 |
innodb data file path |
ibdata1:10M:autoextend |
innodb data home dir |
|
innodb adaptive hash index |
ON |
innodb doublewrite |
ON |
innodb fast shutdown |
1 |
innodb file io threads |
4 |
innodb file per table |
OFF |
innodb flush log at trx commit |
2 |
innodb flush method |
O_DSYNC |
innodb force recovery |
0 |
innodb lock wait timeout |
50 |
innodb locks unsafe for binlog |
OFF |
innodb log arch dir |
|
innodb log archive |
OFF |
innodb log buffer size |
2,097,152 |
innodb log file size |
536,870,912 |
innodb log files in group |
2 |
innodb log group home dir |
./ |
innodb max dirty pages pct |
90 |
innodb max purge lag |
0 |
innodb mirrored log groups |
1 |
innodb open files |
300 |
innodb rollback on timeout |
OFF |
innodb support xa |
ON |
innodb sync spin loops |
20 |
innodb table locks |
ON |
innodb thread concurrency |
20 |
innodb thread sleep delay |
10,000 |
innodb use legacy cardinality algorithm |
ON |
|