Мне часто приходится сталкиваться с задачами, требующими от базы данных очень большой производительности при обработке больших массивов данных. Сегодня я расскажу об очень простом, но действенном приеме, который может вас выручить, если база уже не поспевает за тем количеством данных, которые скапливаются и должны быть обработаны. Метод не зависит от базы данных, но по привычке публикую в блог PostgreSQL, и пример будет именно на ней. Давайте сразу перейдем к примеру.
Оптимизация и ускорение N900
Наверное все, кто активно пользуется N900, сталкивались с ситуациями, когда система начинала подтормаживать при копировании по сети больших файлов на большой скорости, или когда после недели активного пользования, начинало быть заметным общее подтормаживание системы и выявить виновника через top/htop не удавалось, приходилось спасаться перезагрузкой. Это конечно не проблема, но как факт очень неприятен — не Linux-way как-бы.
Но, как оказалось, это решаемо. Ещё со времен N8хх народ активно экспериментировал с различными настройками ядра Linux, которые позволят избавиться от подобных вещей на мобильных девайсах, и настройки эти, будучи эмпирически выведенными и проверенными, и вправду очень благополучно сказываются на поведении системы. Благополучно настолько, что система продолжает быть весьма отзывчивой даже при захлебывающимся от радости торрент-клиенте Transmission, принимающим файлы на полной скорости, и после недельного аптайма система продолжает работать плавно и даже при 30 открытых окнах браузера переключение тасков происходит также как и при двух (чего нельзя было наблюдать до нижеописанного способа оптимизации системы). А теперь к делу.
Кому лень читать и разбираться — ставите из репозиториев(сейчас в extras-testing) программу Swappolube («смазка для свопа», если буквально), запускаете и радуетесь жизни. Кому не лень — делаете тоже самое и продолжаете читать. :)

Но, как оказалось, это решаемо. Ещё со времен N8хх народ активно экспериментировал с различными настройками ядра Linux, которые позволят избавиться от подобных вещей на мобильных девайсах, и настройки эти, будучи эмпирически выведенными и проверенными, и вправду очень благополучно сказываются на поведении системы. Благополучно настолько, что система продолжает быть весьма отзывчивой даже при захлебывающимся от радости торрент-клиенте Transmission, принимающим файлы на полной скорости, и после недельного аптайма система продолжает работать плавно и даже при 30 открытых окнах браузера переключение тасков происходит также как и при двух (чего нельзя было наблюдать до нижеописанного способа оптимизации системы). А теперь к делу.
Кому лень читать и разбираться — ставите из репозиториев(сейчас в extras-testing) программу Swappolube («смазка для свопа», если буквально), запускаете и радуетесь жизни. Кому не лень — делаете тоже самое и продолжаете читать. :)

mysqlcheck и optimize таблиц InnoDB
Только что заметил, что если делать
и ваши таблицы в InnoDB, то не только не происходит repair (что и не должно, так как движок не поддерживает эту функцию), но и optimize не срабатывает.
То есть, база остается без optimize и вы этого не замечаете!
Если делать так:
, то происходит пересоздание (recreate) каждой таблицы.
Из-за этого у меня optimize не выполнялся скриптом по крону уже полгода, с момента перехода с MyISAM на InnoDB.
PS: В моем случае используется innodb_file_per_table.
mysqlcheck -o --repair db_name
и ваши таблицы в InnoDB, то не только не происходит repair (что и не должно, так как движок не поддерживает эту функцию), но и optimize не срабатывает.
То есть, база остается без optimize и вы этого не замечаете!
Если делать так:
mysqlcheck -o db_name
, то происходит пересоздание (recreate) каждой таблицы.
Из-за этого у меня optimize не выполнялся скриптом по крону уже полгода, с момента перехода с MyISAM на InnoDB.
PS: В моем случае используется innodb_file_per_table.
Решение задач линейного программирования с использованием Python
Зачем решать экстремальные задачи
На практике очень часто возникают задачи, для решения которых используются методы оптимизации. В обычной жизни при множественном выборе, например, подарков к новому году мы интуитивно решаем задачу минимальных затрат при заданном качестве покупок.
К сожалению, не всегда можно положиться на интуицию. Допустим Вы сотрудник коммерческой фирмы и отвечаете за рекламу. Затраты на рекламу в месяц не должны превышать 10 000 денежных единиц (д.е). Минута радиорекламы стоит 5 д.е., а телерекламы 90 д.е. Фирма намерена использовать радиорекламу в три раза чаще чем телерекламу. Практика показывает, что 1 минута телерекламы обеспечивает объём продаж в 30 раз больший чем 1 минута радиорекламы.