Ускорение работы баз MySQL

Тема в разделе "Базы данных", создана пользователем kikabidze, 10 окт 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. kikabidze

    kikabidze

    Регистр.:
    18 авг 2010
    Сообщения:
    292
    Симпатии:
    30
    Во всех базах данных с которыми приходилось работать, периодически нужно было делать бекап-рестор/переиндексацию для улучшения работы. Особенно такую профилактику было полезно делать в больших базах, где данные периодически удалялись-добавлялись.
    Как обстоят дела с MySQL? Нужно ли проводить такую профилактику, какие есть средства для этого?
    Пробежался по форуму и Гуглу и к удивлению рекомендаций по этой теме не нашел, раньше думал что такая профилактика актуальна для всех типов баз данных...
     
  2. failometr

    failometr Постоялец

    Регистр.:
    30 апр 2009
    Сообщения:
    128
    Симпатии:
    45
    Периодический OPTIMIZE TABLE `table_name`
    Это типа дефрагментация данных, упорядочивание. А кроме этого больше ничего нет. Для скорости разве что таблички уменьшать до данных с цифрами и поля делать не int(11), например, а smallint(6) (по требованиям). В общем да подскажет
    Код:
    SELECT *
    FROM `table_name`
    PROCEDURE ANALYSE ( )
    
     
  3. kikabidze

    kikabidze

    Регистр.:
    18 авг 2010
    Сообщения:
    292
    Симпатии:
    30
    Во время OPTIMIZE TABLE `table_name` сайт становится недоступным? Кто-нибудь пробовал сравнивать на больших базах OPTIMIZE и бекап-рестор? После этих процедур размер базы был одинаков или какая-то из них эффективней? Стоит ли вешать OPTIMIZE TABLE на крон?
     
  4. failometr

    failometr Постоялец

    Регистр.:
    30 апр 2009
    Сообщения:
    128
    Симпатии:
    45
    Не сайт, только табличка блочится. На большой таблице будет очень долго оптимизироваться. Но и смысл выполнения данной команды есть тогда, когда много фрагментированных данных (дырок/пробелов после удаления строк).
    Я правда не понимаю при чем тут бекап-рестор, речь ведь не о резервном копировании/восстановлении таблиц, а именно об оптимизации?! Или я что-то не так понял?
    Конкретных испытаний не проводил, но и так ясно, что размер значительно не измениться.
    Вполне, ночью например его делать.
     
  5. kikabidze

    kikabidze

    Регистр.:
    18 авг 2010
    Сообщения:
    292
    Симпатии:
    30
    Не знаю как в MySQL, но в других базах бекап-рестор нужен не только для резервного копирования, но и для переиндексации и чистки таблиц от мусора. Возможно OPTIMIZE делает то-же самое, а может и нет, вот хотелось бы выяснить :) Жаль, под рукой нет большой базы чтобы по-тестить...
    Например, в firebird/interbase бекап-рестор приводил к значительному (в разы) сокращению объема базы и ускорению работы (естественно, если таблицах до этого было много изменений).
     
  6. failometr

    failometr Постоялец

    Регистр.:
    30 апр 2009
    Сообщения:
    128
    Симпатии:
    45
    Сокращение будет, если не стоит автокоммит и база используется InnoDB, т.е. записи не удаляются, а только помечаются на удаление, на сколько я понимаю.
    Оптимайз делает только дефрагментацию таблицы.
     
  7. Otis22

    Otis22 Создатель

    Регистр.:
    13 фев 2009
    Сообщения:
    30
    Симпатии:
    9
    Кроме OPTIMIZE & ANALIZE tabl есть еще команда FLUSH для очистки систeмного кеша, логов и прочего. На задёргнанной базе тоже не плохо помогает.
     
  8. kac

    kac Писатель

    Регистр.:
    13 фев 2008
    Сообщения:
    5
    Симпатии:
    0
    Везде где используешь группировку или сортировку - желательно установить индексы на группируемые поля
     
  9. everest

    everest

    Регистр.:
    20 дек 2006
    Сообщения:
    197
    Симпатии:
    20
    Я пробовал команды OPTIMIZE и ANALIZE для базы в 10Гб, правда база была вновь созданная, удалений и изменений внутри не было. Соответственно улучшений не было заметно.
    А вообще много зависит от выбора типа БД - InnoDB, MYISAM и т.д.
     
  10. p486

    p486 Постоялец

    Регистр.:
    11 сен 2010
    Сообщения:
    94
    Симпатии:
    0
    на сколько я знаю MySQL сама периодически делает дефрагментацию.
    а что касается уменьшения в размере так она после удаления записи например со средины таблицы, новую созданную запись пометит на место удаленной с новым индексом (если он есть и установлен автоинкремент).
     
Статус темы:
Закрыта.