Очистка базы данных от мусора — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
'''Актуально для версии 20.'''<br/><br/>
+
'''Актуально для версии 20.'''<br/>
 
Имеется несколько способов очистки базы данных от различного рода “мусорных” объектов, мы рассмотрим некоторые из них.
 
Имеется несколько способов очистки базы данных от различного рода “мусорных” объектов, мы рассмотрим некоторые из них.
  

Версия 13:57, 25 марта 2019

Актуально для версии 20.
Имеется несколько способов очистки базы данных от различного рода “мусорных” объектов, мы рассмотрим некоторые из них.

1. Очистка с помощью сборщика мусора и файла cron.php

В системе имеется специальный класс-сборщик мусора, который может очищать базу данных - именно он будет удалять все "мусорные" объекты, когда у них истечет время хранения. Для его работы необходимо настроить на хостинге периодическое исполнение файла cron.php, лежащего в корневой директории. Информация по работе Cron содержится в нашей документации.

2. Очистка с помощью запросов к базе данных Хотя сборщик мусора и очищает таблицы в базе данных, в некоторых случаях может понадобится вручную почистить базу данных от “мусорных” объектов. Например, когда их скопилось довольно много и сборщик мусора не успевает за одну итерацию удалить все. В таком случае удалить “мусорные” объекты можно с помощью запросов вида:

DELETE QUICK FROM `cms3_object_content` WHERE 
`int_val` IS NULL 
AND`varchar_val` IS NULL 
AND `text_val` IS NULL 
AND `rel_val` IS NULL 
AND `tree_val` IS NULL 
AND `float_val` IS NULL 
LIMIT <количество записей, удаляемое запросом>

Количество записей задаётся здесь вручную потому, что выполнение запроса может занять довольно много времени, и гораздо легче будет удалить, к примеру, 100000 записей за несколько подходов, чем за один раз.

Если есть необходимость просто проверить, есть ли какие-либо “мусорные” записи в базе данных, можно модифицировать запрос, который мы написали выше:

SELECT COUNT(*) FROM `cms3_object_content` WHERE 
`int_val` IS NULL 
AND`varchar_val` IS NULL 
AND `text_val` IS NULL 
AND `rel_val` IS NULL 
AND `tree_val` IS NULL 
AND `float_val` IS NULL

Этот запрос выведет число - количество невалидных записей в таблице. Если вместо “SELECT COUNT(*) ...” в запросе выше использовать “SELECT * ...” - будет выведена полная таблица с невалидными записями.