'SHOW INDEX' медленный / проблемный на MySQL с очень большими таблицами - PullRequest
1 голос
/ 23 ноября 2011

Мы используем MySQL 5.0.51 в Debian.У меня есть большая база данных (более 80 миллионов строк в одной таблице, более 30 миллионов в другой, 20 миллионов в другой и т. Д., Каждая с целочисленным первичным ключом, и большинство таблиц также довольно широки), и сервер работаетдовольно сложно

Фреймворк, который мы используем (Ruby on Rails), сделал незначительный твик , который вызывает реальные проблемы, и я пытаюсь понять, влияет ли это на нас,или это присуще типу запроса, который он выполняет.

При запуске нового процесса Rails платформа запускает "SHOW INDEX FROM foo WHERE Key_name = 'PRIMARY'" для каждой из таблиц (которые являются InnoDB).На нашем сервере, и в зависимости от нагрузки / других запросов, для больших таблиц требуется от 5 до 15 секунд.Это добавляет много секунд.

Является ли это ожидаемым поведением или это произойдет только в определенных ограниченных обстоятельствах, и есть ли какие-либо решения (можно использовать «SHOW CREATE TABLE foo» для получения той же информации).

Ответы [ 2 ]

0 голосов
/ 30 ноября 2011

У нас такая же проблема с Rails 3.1.Проблема в том, что SHOW INDEX вызывается слишком много раз для действий ActiveRecord, если в таблице нет первичных ключей.Вы сказали, что у вас есть первичные ключи для ваших таблиц, но есть ли свойства, которые ActiveRecord не понимает?

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

https://github.com/rails/rails/pull/3812

0 голосов
/ 23 ноября 2011

Нет, это не должно быть медленным. Я только что попробовал это на таблице, которая имеет примерно 40 миллионов строк, и это занимает менее 0,1 секунды.

SHOW INDEX должен представлять только информацию, уже имеющуюся в таблице статистики. Единственное, о чем я могу думать, это если в таблице нет статистики, и mysql внутренне вызывает ANALYZE TABLE , но я надеюсь, что нет, это было бы довольно плохо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...