RigWEB

База данных MySQL занимает много места?

Всем привет! Так получается, что со временем, по мере наполнения блога новыми постами и с появлением новых комментариев снижается свободное дисковое пространство на сервере. И часто виной тому бывает несоразмерно объемная база данных.

Оптимизация базы данных с помощью phpmyadmin

Посмотрите на свою базу данных, какая из таблиц занимает больше всего места? В прошлый раз мы рассмотрели какие стандартные таблицы присутствуют сразу после установки WordPress, до установки плагинов. Если префикс базы данных при установке не менялся, а был принят по-умолчанию, то таблица wp_commentmeta может быть довольно много весить.

Одной из основных причин, почему база данных занимает много места,  может стать наличие огромного числа спам-комментариев и в какой-то мере установленный плагин Akismet.

Дело в том, что Акисмет к каждому комментарию добавляет свои мета-данные и записывает их в таблицу wp_commentmeta. То есть абсолютно все комментарии, даже помеченные как спам, несут с собой ненужную информацию. А после очистки корзины и спама эти мета-данные не удаляются и продолжают занимать место.

Вот, посмотрите сколько спама принял на себя блог:

База данных сильно увеличивается в объеме от спама

Подумать только, более 71 тысячи! И все эти данные до сих пор хранятся в базе данных, не мудрено что она так неприлично разрослась:

Таблица wp_commentmeta занимает очень много места

По сравнению с другими таблицами она имеет наибольший размер — 5.1 Мб. Поэтому я решил найти способ снизить размер таблицы wp_commentmeta, а соответственно и общий размер базы данных.

Зачем уменьшать размер базы данных?

Странный вопрос, естественно для экономии ресурсов сервера, это и свободное дисковое пространство, и время, затраченное на обращение в данным. Очень часто чрезмерно большая база данных может привести к внутренней ошибке сервера 500 Internal Server Error.

Ранее я уже писал о нескольких способах, позволяющих сократить базу данных, а именно:

  • оптимизация таблицы wp_postmeta, за счет удаления устаревшей служебной информации;
  • оптимизация таблицы wp_posts, путем удаления ревизий (резервных копий) постов.

Теперь есть еще один способ уменьшить базу данных, за счет снижения размера таблицы wp_commentmeta.

Снижение размера таблицы wp_commentmeta

Способ был найден на форуме русскоязычной поддержки WordPress. Для сокращения размера требуемой таблицы необходимо выполнить SQL-запрос к базе данных:

Оптимизация таблицы wp_commentmeta на вордпресс

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

1
DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments)

после чего нажать OK. Возвращаясь на начальную страницу phpMyAdmin с базой данных отмечаем ощутимое сокращение ее размера, за счет снижения размера таблицы wp_commentmeta.

Снижение размера базы данных

Требуемый результат достигнут, таблица уменьшилась в размере почти в 5 раз! Теперь она весит 1,1 Мб, вместо 5.1 Мб. После таких операций я советую дополнительно оптимизировать базу данных стандартными средствами phpMyAdmin, отметив галочками все таблицы и выбрав в выпадающем списке «Оптимизировать таблицу», так сказать последний штрих)

В очередной раз обращаю особое внимание на осторожное обращение с базами данных и не забывайте делать резервные копии перед выполнением SQL-запросов.

Ну вот, пройдет очередной этап, но на этом оптимизация WordPress не заканчивается, подписывайтесь на обновления блога ;-), чтобы не пропустить очередной пост!

  1. Арина

    Денис, спасибо за такую полезную информацию Обязательно этим займусь. На самом деле спама очень много.

    Ответить

  2. Владимир Жданов

    Мощно! Я люблю mysql и phpmyadmin. В работе с сайтом это отличный инструмент, все как на ладони. Если знать большинство команд, то работа намного упрощается. Наверное, в скорем, напишу небольшую заметку про mysql/
    СпасибО! ;-)

    Ответить

  3. Webliberty

    Арина, конечно займитесь, даже хотя бы в профилактических целях следует проверять БД, оптимизировать, чистить, обязательно делать бэкапы.

    Владимир, инструмент действительно хороший, можно вдоль и поперек перебрать базу данных и изменять настройки самого движка прямо там. Неоднократно приходилось выполнять запросы для массового редактирования и даже восстанавливать целые посты с комментариями к ним, когда «случайно» доигрался :lol:

    Ответить

  4. Владимир Жданов

    И такое у меня было, доигрался серьезно однажды, введя команду DELETE FROM table WHERE id < 1000, а нужно было удалить десяток записей после 1000… Следовательно знак ставить не :lol:

    Ответить

  5. Webliberty

    Владимир, всякое бывает) В таких ситуациях главное не паниковать, как многие начинают, да что там говорить, я и сам начинаю паниковать если что-то не так пошло. Главное собраться, успокоиться и подумать как исправить. Для этого конечно же потребуется резервная копия базы данных, которую желательно делать вручную и хранить на своем компьютере.

    Ответить

  6. Владимир Жданов

    На мое счастье, у меня была резервная копия. Я жутко побелел, думал идти писать заявление :lol: Но вида не подал, чтобы не спросили, а что это я такой взволнованный.

    Ответить

  7. Лесоруб

    Денис, здравствуйте…У меня вчера пришло сообщение с хостинга Тайм Вэб, что дисковое пространство превышено и предлагают поменять тариф. Новый тариф предполагает оплату только за весь год, а меня это сейчас не устраивает :| Подскажите, как справиться с проблемой.

    Ответить

  8. Webliberty

    Лесоруб, странные у них правила с оплатой, обычно можно выбирать на сколько месяцев продлевать. Очистите базу данных этим способом и дополнительными, которые приведены в посте.

    А также при вставке изображений предварительно их сжимайте перед загрузкой (уже опубликованные также можно сжать). Далее если у Вас используются плагины для создания резервных копий, то вероятно они их сохраняют на сервере, что тоже сокращает свободное дисковое пространство.

    Плагины кэширования в Вашем случае тоже лучше не использовать, т.к. все страницы сохраняются в папке кэша на сервере. Одним словом, избавьтесь от лишнего, если нет возможности перейти на новый тариф. Или смените хостинг-провайдера на того, у которого можно продлевать на столько месяцев, сколько понадобиться.

    Ответить

  9. apisklov

    У меня вообще данная таблица 16 мб весит. Надо очистить. Только ты забыл про префикс написать, не у всех он wp_

    Ответить

  10. Владимир Жданов

    Да почти у всех, мало кто меняет при установке. Наверное единицы. Я работаю по службе с сотней вордпрессов, только у одного префикс не wp_… ;-)

    Ответить

  11. Кристина

    И от меня спасибо, Денис! В жизни не додумалась бы сама, что базу данных надо чистить))) А добра там, да, скопилось…. :shock:

    Ответить

  12. Владимир Жданов

    Лесоруб, здравствуйте! Возможно что место превысил Ваш лог ошибок, либо еще какой-нибудь лог. Отключить или поинтересоваться можно, написав хостеру. Ну можно просто сменить хостинг, Locum очень хороший выбор. И цены нормальные и скорость… Я доволен!

    Ответить

  13. Webliberty

    apisklov, правильно замечание, благодарю! В коде запроса нужно изменить префикс на свой, если он был изменен, а не применен по умолчанию.

    Владимир, а кем работаешь, если не секрет? Вот бы мне такую работу, чтобы и увлечение и основное занятие совпадали :?:

    Ответить

  14. Роман Малышев

    Полезно! Поудалял комментарии и у себя на некоторых сайтах WordPress

    Ответить

  15. Людмила

    Денис, а комментарии не удалятся? А то потом будет проблема с их восстановлением.

    Ответить

  16. Webliberty

    Людмила, нет не удалятся, никаких проблем после чистки не возникнет, если сомневаетесь — сделайте резервную копию.

    Ответить

  17. Людмила

    У меня резервные копии делаются на автомате. Только я еще не пользовалсь ими для восстановления. Надеюсь, что и дальше не придется. А почистить надо. Накопилось много всего. :!:

    Ответить

  18. Михаил

    Спасибо за статью! У вас она весила 5.1 Мб, у кого то 16 мб, значит у меня рекорд)))

    wp_commentmeta весила 135 метров, вся таблица около 145. Удалено 36740 строк.

    Ответить

  19. Webliberty

    Михаил, вот это да! Наверное с таким размером БД очень сложно восстанавливать из архива, ведь есть ограничения на размер загружаемого файла… Скорее всего приходится прибегать к помощи поддержки хостера…

    Ответить

  20. Людмила

    Хотела почистить базу но у меня вместо wp_commentmeta написано wscrp_commentmeta. Что делать?

    Ответить

  21. Webliberty

    Людмила, используйте в запросе имя своей таблицы. У Вас просто задан свой префикс к таблицам, по умолчанию он wp_

    Выполните запрос:

    1
    
    DELETE FROM wscrp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments)

    Не забудьте про резервную копию! Это так, на всякий случай :smile:

    Ответить

  22. allemiko

    А вот я даже туда не суюсь дальше, боюсь и обхожу стороной, еле как перенес свою базу на свой хостинг, а оптимизировать и менять, уж точно испорчу :twisted:

    Ответить

  23. Webliberty

    Алем, думаешь я там часто ковыряюсь? :twisted: Так, пару раз пришлось покопаться, когда с древовидными комментариями начудил, да так, что комментарии к одной записи перебежали на другую страницу, пришлось разбираться…)

    Ответить

  24. Михаил

    Webliberty, что комментарии к одной записи перебежали на другую страницу, — Вот с этого места — можно подробнее? У меня глюки какие-то, комментарии пишутся и отображаются в ней правильно. Но на страницах сами коменты перебегают черт знает куда… :arrow:

    Ответить

  25. Webliberty

    Михаил, сложно сказать, у меня это было после манипуляций с этими комментариями. Несколько убежало и менял в базе их id, чтобы перенести к другому посту. Т.е. проблема не массовая и с тех пор не появлялась. Если у Вас всегда такое происходит — попробуйте по отключать плагины, может какой-то из них глючит…

    Ответить

Ваш комментарий:

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: