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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «'''Актуально для версии 20'''<br/><br/> Имеется несколько способов очистки базы данных от разли…»)
 
Строка 10: Строка 10:
 
В таком случае удалить “мусорные” объекты можно с помощью запросов вида:
 
В таком случае удалить “мусорные” объекты можно с помощью запросов вида:
  
<source lang=”sql”>
+
<source lang="sql">
 
DELETE QUICK FROM `cms3_object_content` WHERE  
 
DELETE QUICK FROM `cms3_object_content` WHERE  
 
`int_val` IS NULL  
 
`int_val` IS NULL  
Строка 24: Строка 24:
 
Если есть необходимость просто проверить, есть ли какие-либо “мусорные” записи в базе данных, можно модифицировать запрос, который мы написали выше:
 
Если есть необходимость просто проверить, есть ли какие-либо “мусорные” записи в базе данных, можно модифицировать запрос, который мы написали выше:
  
<source lang=”sql”>
+
<source lang="sql">
 
SELECT COUNT(*) FROM `cms3_object_content` WHERE  
 
SELECT COUNT(*) FROM `cms3_object_content` WHERE  
 
`int_val` IS NULL  
 
`int_val` IS NULL  

Версия 13:56, 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 * ...” - будет выведена полная таблица с невалидными записями.