안녕하세요.
요즘 디비가 불안정해서 엄청나게 고민하고 있는 사람입니다 ㅠㅠ..
우선 쿼리 질문부터 하겠습니다.
CREATE TABLE `user` (
`id` VARCHAR(16) NOT NULL,
`group_idx` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `group1` (
`group1_id` VARCHAR(16) NOT NULL DEFAULT '',
PRIMARY KEY (`group1_id`)
)
CREATE TABLE `group2` (
`idx` INT(11) NOT NULL AUTO_INCREMENT,
`group1_id` VARCHAR(16) NOT NULL,
`group2_id` VARCHAR(16) NOT NULL,
PRIMARY KEY (`group1_id`,`group2_id`),
UNIQUE KEY `idx` (`idx`),
CONSTRAINT `FK_group2` FOREIGN KEY (`group1_id`) REFERENCES `group1` (`group1_id`) ON DELETE CASCADE ON UPDATE CASCADE
)
CREATE TABLE `data` (
`user_id` VARCHAR(16) DEFAULT NULL,
`data1` VARCHAR(50) DEFAULT NULL,
`data2` VARCHAR(50) DEFAULT NULL,
`date` DATE DEFAULT NULL,
KEY `data_date` (`date`)
)
위와 같은 테이블이 있고
user 테이블에는 약 3만건의 데이타
group1에는 약 100건
group2에는 약 5천건
data에는 약 1500만건의 데이터가 있습니다.
하루에 data 테이블에 약 10만건의 데이터가 들어옵니다.
한 그룹(group2)에 대해 일정기간동안의 데이터를 조회하는 쿼리문을 다음과 같이작성하였습니다.
select *
from
(select id from user where group2_idx = 그룹) t1
left join
data t2
on t1.id = t2.user_id
where t2.date like '2009-10%'
그런데 검색속도가 많이 느리더군요... 그래서 개선 방법이 없는지 궁금합니다.
추가적으로 인덱스에 관해서 몇가지 궁금한 것이 있는데..
인덱스가 사용되는 조건? 이 궁금합니다. where절이나 join절에서 인덱스가 사용되고, 인덱스를 잡은 순서대로만 조건문을
사용해야 인덱스가 사용되고, 하나의 인덱스만 사용된다고 알고 있는데.. 정확한지 궁금합니다..
두번째로 서버 튜닝에 관해서 몇가지 질문좀 드리겠습니다.
우선 서버 스펙은 xeon 1.8Ghz , 4G, SCSI 76GB입니다. 윈도2003서버에 mysql 5.0쓰고있습니다.
Mysql Adminstrator를 사용해서 모니터링과 설정을 변경하고 있는데요...
서버 가동을 하면.. can't shared library "mysqlDll.dll" (errno : 0) 인가? 와 같은 메시지가 나옵니다.
서버가 정상가동은 됩니다. 오히려 위와 같은 메시지가 없이 서버가 구동이 되면... 접속이 되지를 않습니다. -_-;;
그리고 InnoDB를 사용하는데 innodb_buffer_pool_size를 512MB이상인가? 설정을 해놓고 서버 가동을 하면
접속이 되지를 않습니다(위와 같은 mysqlDll.dll 에러가 나오지 않고 시작됐다고 메시지가 나오지만 접속이 되지 않습니다)
그외에도 innodb_log_buffer_size? 인가.. 로그 관련한 메모리 사이즈를 변경하고 시작해도 정상적으로 접속이 되지 않더군요.. ㅠㅠ...
추가적으로 한가지 궁금한 것이있는데... 서버에서 커넥션 쓰레드가 70개 이상생성되면 os dependent bug가 발생합니다.. 더이상 쓰레드를 생성할수 없다고 하더군요 -ㅅ-...
이부분에 대해 아시는 분이 계시면 조언좀 부탁드립니다.
AppServer단에서 풀링을 사용하여 처리하고 있어서 문제가없지만... 사용자가 점점늘어나서...조만간 동시에 사용되어야 하는 커넥션 수가 증가 될것같습니다. ㅠㅠ.
혹시 추가적으로 필요한정보가 있으시다면.. 댓글로 남겨주시면... 보고 추가하겠습니다.
답변부탁드립니다.
|