Назад | Перейти на главную страницу

Проблемы с базой данных MySQL - слишком быстрый рост, производительность

У меня есть некоторые проблемы с настройкой базы данных: база данных MySQL записывается каждые несколько секунд и очень быстро увеличивается в размере. Однако мое дисковое пространство ограничено, поэтому мне нужно обойти это. Однако данные не должны быть такими большими. Это 3 кортежа типа DOUBLE и их первичный ключ auto_increment, которые записываются в базу данных. Он уже содержит около 12 миллионов строк (в одной таблице!). На сервере всего 512 МБ ОЗУ, и запросы выполняются очень долго.

Теперь, каждый раз, когда я mysqldump БД, файл дампа путь меньше, чем сама база данных. Как так? Должен ли я просто удалить все отношения внешних ключей для повышения производительности? Есть ли способ распределить базу данных по нескольким серверам?

Заранее спасибо.

mysqldump выводит данные в виде текста, поэтому размер данных почти всегда будет отличаться от размера таблицы. Размер таблицы, которую вы видите, вероятно, также включает индексы, которые не сбрасываются.

Дампы, вероятно, меньше, потому что индексы не находятся в дампе, и данные, вероятно, относительно короткие, то есть 1.24, а не 168535.186434965355732. Если данных мало, это может сильно повлиять на ваши дампы. В DOUBLE тип данных использует 8 байтов. Итак, в таблице 1.2 потребует 8 байтов, но в дампе, только для данных, нужно всего 3 (это 3 текстовых символа).

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

Вы, вероятно, упомянули бы об этом, если бы делали это, но дампы обычно сжимаются, поскольку они хорошо сжимаются (обычно до 10-20% от исходного размера с помощью gzip). Это приведет к тому, что дамп будет значительно меньше.

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

Вы должны начать хотя бы