2012-06-02 4 views
1

Я запускаю сценарий на своем сервере, который вставляет около 3000 записей каждую минуту каждого ~ 2 КБ. Похоже, что память сервера забита данными из этой активности. (100MB в 20мин)Вставка большого количества записей в базу данных MySQL сбрасывает память

В конце концов, я должен убить процессы (HTTPD и MYSQLD) или даже перезагрузить сервер, чтобы получить обратно память ...

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

Спасибо!

+0

Это особенность, а не ошибка. Возможно, иногда пытайтесь «COMMIT»? – wallyk

+0

Вы пробовали mysql_free_result? –

+0

100MB в 20мин ничего не впечатляет, не могли бы вы подробно описать проблему? Как вы вставляете строки? Откуда они идут? – Sebas

ответ

0

отключить таймер mysql? просто отключить его: (взято из here)

SET GLOBAL query_cache_size = 40000; # minimum as docs says 
SET SESSION query_cache_type = OFF; 

вы можете дать SHOW VARIABLES LIKE 'foo';, чтобы проверить, что содержат эти значения.

+0

В настоящее время для параметра query_cache_size установлено значение 0 и query_cache_type = ON. Я нахожу это добрым - странно, что INSERT может извлечь выгоду из кеша, но, как говорит мне wallyk, это функция ... –

0

Есть лучшие способы улучшения производительности вставки.

Прежде всего, есть ли у вас возможность отправлять эти вставки в один запрос за десять секунд? Или что-то подобное. Здесь идея заключалась бы в том, чтобы отправлять меньше запросов на сервер.

Кроме того, вы используете InnoDB? Этот движок лучше подходит для использования этого типа uf.

+0

Это база данных MyISAM ... Я не знаком с разными типами баз данных (kinda newbie :) Я посмотрю тогда на эти типы ... Я объединил и некоторые вставки, но это только задержит неизбежное. Надеюсь, что другие решения помогут сохранить память! –

+0

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

+0

Небольшое обновление по разработке: я изменил механизм базы данных на InnoDB. Хотя это приводит к значительно большей базе данных, она поддерживает транзакции. Это привело к снижению использования памяти (COMMIT помог управлять использованием памяти). Отключение кэша было вторым по величине изменением. К сожалению, mysql_free_result не работал, поскольку он, похоже, не работает с запросами INSERT ... –

Смежные вопросы