Я бы сказал, что потенциальное решение состоит из трех частей.
Во-первых, лучше оптимизировать оператор SQL.
Попробуйте использовать оператор LIMIT и отойдите от использования *и определите только те поля, которые вам нужны.Эти две вещи могут помочь уменьшить нагрузку на память для оператора SQL.
Во-вторых, попробуйте оптимизировать структуру таблицы базы данных лучше (например: уменьшить значения Keyname / Index и тому подобное.) Если ваша база данных имеет какой-либо значительный размер(скажем, 50000 строк или больше), возможно, попробуйте переключиться на InnoDB, чтобы предотвратить блокировку строк.Вы также можете попытаться выполнить некоторое дублирование таблиц и выполнить запрос из вторичных (временных) таблиц БД, чтобы уменьшить нагрузку на ваш основной БД.Очевидно, что без того, чтобы мы не знали вашу схему БД, это только я «выкидываю предложение».
В-третьих, если вы не ударяете по БД с 1 миллионом строк плюс, и вы получаете ошибку Connection Busy, шансы довольно хорошиечто вам нужно поговорить с вашим хостинг-провайдером.Даже на разделяемом сервере подобные сообщения об ошибках (если ваш код оптимизирован настолько, насколько это возможно) почти всегда являются результатом того, что вашему серверу не хватает памяти.
Как было указано Cyberkiwi, вы можете попробоватьсбросив ADOdb в свой ftp и выполнив простой цикл, просто чтобы посмотреть, поможет ли распределение внутренней памяти ADOdb вообще.Это было бы так же просто, как выгрузка ADOdb, включая ADOdb, и выполнение следующего цикла:
$Data = $connection->Execute("SELECT field1, field2, field2 FROM subjects ORDER BY position ASC LIMIT 0, 10");
if (is_object($Data)&&(!$Data->EOF))
{
while (!$Data->EOF)
{
//
// string, array, echo, whatever here
//
$Data->MoveNext();
}
}
unset($Data);
В конце концов, эти ошибки являются результатом плохо написанного оператора SQL, который приводит к тому, что несколько соединений будутостановка (в этом случае попросите увеличить ваши «макс. одновременные соединения») или просто недостаточно встроенной памяти или выделенной памяти php (в этом случае попросите увеличить «memory_limit»).