저는 오랫동안 공유 호스팅을 사용 해왔고 문제없이 몇 달 동안 동일한 쿼리를 실행했습니다. 갑자기 나는 "데이터베이스가 과도한 양의 프로세서 시간을 소비하고있는 것으로 밝혀 졌기 때문에 데이터베이스에 블록을 넣는다는 전자 메일을 내 호스트에서받습니다. 왜 이해가 안가는거야? 그래서 어쨌든 나는 VPS에 갈 필요가 있다고 생각했다. VPS에서 내 사이트를 얻으려고 시도하자마자 전체 사이트에 메모리 부족 오류가 발생하여 오류가 발생했습니다. 잠시 동안 사이트에가는 동안 연결이 시간 초과되었습니다.서버 크래시 - 최적화 MySQL 쿼리
내 테이블 중 아무 것도 10,000 행을 넘지 않습니다. 내 원래 호스트가 보낸 몇 가지 사항은 다음과 같습니다.
DB_USER: my_user -- TOTAL_CONNECTIONS: 37 -- CONNECTED_TIME: 4906 --
CPU_TIME: 1920 -- TABLE_ROW_READS: 79999077 -- SELECT_COMMANDS: 214 --
UPDATE_COMMANDS: -- BUSY_TIME: 4879 -- BYTES_SENT: 252225 --
BYTES_RECEIVED: 105418 -- WAIT_TIME (IO): 2959
테이블 행은 79,999,077 ?? 진심으로 그게 어떻게 작동하는지. 내 테이블은 모두 작다. 나는 많은 교통량을 얻지 못한다. 어쩌면 100-150 명. 그러나 사이트가 완전히 새 서버에 올려 졌을 때 사이트가 완전히 죽어서 문제가되지는 않습니다. 다음은 내 데이터베이스가 다운되었다는 전자 메일의 쿼리입니다. 정말로이 쿼리 하나만으로 나를 죽일 수 있습니까? 랜드로
SELECT `Person`.`first_name`, `Person`.`last_name`,`Person`.`id`,`Upload`.`path`,`TeacherBiography`.`final_biography`, `TeacherPhilosophy`.`final_philosophy`
FROM `my_database`.`people` AS `Person`
LEFT JOIN `my_database`.`teacher_drive_cities` AS `TeacherDriveCity`
ON (`TeacherDriveCity`.`person_id` = `Person`.`id`)
LEFT JOIN `my_database`.`instruments_people` AS `InstrumentsPerson`
ON (`InstrumentsPerson`.`person_id` = `Person`.`id`)
LEFT JOIN `my_database`.`instruments` AS `Instrument`
ON (`Instrument`.`id` = `InstrumentsPerson`.`instrument_id`)
LEFT JOIN `my_database`.`teachers` AS `Teacher`
ON (`Teacher`.`person_id` = `Person`.`id`)
LEFT JOIN `my_database`.`uploads` AS `Upload`
ON (`Upload`.`person_id` = `Person`.`id`)
LEFT JOIN `my_database`.`teacher_biographies` AS `TeacherBiography`
ON (`TeacherBiography`.`person_id` = `Person`.`id`)
LEFT JOIN `my_database`.`teacher_philosophies` AS `TeacherPhilosophy`
ON (`TeacherPhilosophy`.`person_id` = `Person`.`id`)
WHERE `TeacherDriveCit! y`.`city` = 'Dana Point'
AND `TeacherDriveCity`.`state` = 'ca'
AND `Instrument`.`instrument` = 'saxophone'
AND `Teacher`.`status` = 6
AND `Upload`.`description` = 'profile_picture'
AND `TeacherBiography`.`final_biography` IS NOT NULL
AND `TeacherPhilosophy`.`final_philosophy` IS NOT NULL
GROUP BY `Person`.`id`
ORDER BY RAND() ASC
LIMIT 3
내가 들어 위하여() 천천히,하지만 난 그게 하나의 호출에 전체 서버를 충돌 것이라고 생각하지 않았다 : 그것은 문제없이 그대로 개월까지있었습니다. 내가 여기서 뭔가를 놓치고 있니? 어떤 도움을 주시면 감사하겠습니다! 내 사이트는 24 시간 동안 다운되었으므로 그 사이트에서 수입을 얻습니다. 감사!
편집 : 다음은 쿼리에 대해 설명입니다 :
1 SIMPLE TeacherBiography ALL NULL NULL NULL NULL 41 Using where; Using temporary; Using filesort
1 SIMPLE TeacherPhilosophy ALL NULL NULL NULL NULL 41 Using where; Using join buffer
1 SIMPLE Upload ALL NULL NULL NULL NULL 166 Using where; Using join buffer
1 SIMPLE Teacher ALL NULL NULL NULL NULL 381 Using where; Using join buffer
1 SIMPLE InstrumentsPerson ALL NULL NULL NULL NULL 647 Using join buffer
1 SIMPLE Instrument eq_ref PRIMARY PRIMARY 4 yml_yml.InstrumentsPerson.instrument_id 1 Using where
1 SIMPLE Person eq_ref PRIMARY PRIMARY 4 yml_yml.TeacherPhilosophy.person_id 1 Using where
1 SIMPLE TeacherDriveCity ALL NULL NULL NULL NULL 7489 Using where; Using join buffer
당신이 그것을 쉽게 읽을 수 있도록 포맷하지 압니다 ... 나는 테이블하고 무엇을하지 여기하는 방법을 모른다 . 죄송합니다!
쿼리에 EXPLAIN을 사용한 결과를 게시 해주십시오. – Xint0