MySQL - одновременный выбор - один клиент ждет другого? - PullRequest
3 голосов
/ 25 марта 2009

У меня есть следующий сценарий:

У меня есть база данных с определенной таблицей MyISAM около 4 миллионов строк. Я использую хранимые процедуры (MySQL версии 5.1) и одну, в частности, для поиска в этих строках по различным критериям. Эта таблица имеет несколько индексов, и запросы через эту хранимую процедуру обычно очень быстрые (<1 с). В основном я использую подготовленный оператор и создаю и выполняю некоторый динамический SQL в этом поиске sp. После выполнения подготовленного оператора я выполняю «DEALLOCATE PREPARED stmt;» </p>

Большинство запросов выполняются менее чем за секунду (я использую LIMIT, чтобы получить только 15 строк в любое время). Однако есть некоторые редкие запросы, которые выполняются дольше (скажем, 2-3 с). Я оптимизировал поисковую таблицу, насколько я могу.

Я разработал веб-приложение, и я могу запустить и увидеть результаты быстрых запросов менее чем за секунду на моей машине для разработки.

Однако, если я открою два экземпляра браузера и выполню одновременный поиск (по машине разработки), один с более длинным запросом, а другой с более быстрым запросом, результаты будут возвращены одновременно, т.е. как если бы быстрый запрос ожидал завершения медленного запроса, прежде чем возвращать результаты. то есть оба запроса займут 2-3 секунды ...

Есть ли причина для этого? Потому что я думал, что MyISAM обрабатывает SELECTS независимо друг от друга, и в настоящее время это не то поведение, которое я испытываю ...

Заранее спасибо! Тим

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Это верно. Каждый запрос на выборку в таблице MyISAM блокирует всю таблицу до ее завершения. Их оправдание в том, что это обеспечивает «очень высокую пропускную способность чтения». Переключение на innoDB разрешит одновременное чтение.

0 голосов
/ 25 марта 2009

Это просто из-за того, что вы делаете это с одной и той же машины, если поиски выполнялись на двух разных машинах, они выполнялись бы одновременно. Хотели бы вы, чтобы один человек мог отключить ваш сервер MySQL, просто открыв несколько окон браузера и нажав кнопку обновления?

...