我已经使用共享主机很长时间了,并且几个月来一直在运行相同的查询而没有问题。突然间,我收到一封来自主机的电子邮件,说他们在我的数据库上设置了一个块,因为“发现数据库消耗了过多的处理器时间”。我不明白为什么现在?所以无论如何我想也许我需要去VPS。试图在 VPS 上启动我的站点,然后整个站点立即出现内存不足错误并崩溃。有一段时间,连接在访问该站点时完全超时。
我的表都不是很大,不超过 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
我听说 rand() 的 order 很慢,但我不认为它会在一次调用中使整个服务器崩溃。我在这里错过了什么吗?任何帮助,将不胜感激!我的网站关闭了 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
我知道它没有格式化,因此您可以轻松阅读...我不知道如何将其制成表格以及此处不知道的内容。对不起!