2015-01-09 4 views
0

У меня была база данных с десятками тысяч таблиц. В результате mysql information_schema стал чрезвычайно медленным, что повлияло на общую производительность, воздействуя на такие вещи, как открытое и закрытое время для таблиц.Как «очистить» mysql information_schema?

Поскольку все таблицы являются Myisam и имеют соответствующие файлы в каталоге данных mysql, я просто переместил кучу файлов таблиц в другую базу данных.

Это не работает без проблем, однако, производительность information_schema в исходной базе данных не улучшает много:

mysql> select count(*) from information_schema.TABLES where table_schema='database_1'; 
+----------+ 
| count(*) | 
+----------+ 
| 17374 | 
+----------+ 
1 row in set (1 min 28.68 sec) 

по сравнению с новой базой данных:

mysql> select count(*) from information_schema.TABLES where table_schema='database_2'; 
+----------+ 
| count(*) | 
+----------+ 
| 16127 | 
+----------+ 
1 row in set (2.15 sec) 

Кажется, некоторые «вещи «должно быть, осталось в информационной_схеме.

Кто-нибудь знает, что вызывает это, и если что-то можно сделать по этому поводу?

+0

'16.000 +' таблицы ?? Что-то действительно, действительно, действительно неправильно. Для каждой таблицы после .. ну, пара десятков в вашей базе данных - есть котенок, который умирает где-то –

+0

Я ожидал такого комментария :) Я знаю, что много таблиц, но поверьте мне, у меня есть причины для этого. Проблема в том, что нет никакой причины, по которой информационная_схема на первой БД должна быть настолько медленнее, чем вторая дБ. – Michael

ответ

0

Что вызывает удар по производительности - это диск IO.

Реализация information_schema выполняет поиск каждого файла *.FRM на диске, чтобы найти таблицы.

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

Когда файл не был открыт в последнее время или уже был выселен, файл io приводит к тому, что файл io io очень медленный.

Учитывая большое количество таблиц, для ускорения самого запроса information_schema не так много нужно сделать. Гораздо лучшее улучшение заключается в сокращении числа запросов, которые обращаются к информационным_схемам.

Если схема стабильна, подумайте о том, чтобы сделать копию информации_схемы в реальной таблице и запросить копию.