Непонятные поля field_deleted_revision

Главные вкладки

Аватар пользователя lordofbits lordofbits 23 октября 2012 в 18:26

С нидавнего времени в базе данных начали появляться такие таблицы:
...
field_deleted_data_111
field_deleted_data_115
field_deleted_data_116
field_deleted_data_129
field_deleted_data_133
field_deleted_data_142
field_deleted_data_153
...
field_deleted_revision_21
field_deleted_revision_27
field_deleted_revision_28
field_deleted_revision_29
field_deleted_revision_49
field_deleted_revision_55
...

все бы ничего, но на сайте более миллиона нод и каждая такая таблица добавляет по 200к лишних записей, что увеличивает размер БД на ~+8 Gb
кто сталкивался с подобной проблемой? на .org решения нет.

Комментарии

Аватар пользователя ser_house ser_house 23 октября 2012 в 18:30

"lordofbits" wrote:
С нидавнего времени

Видимо, это время определяется моментом удаления полей из типов материала.

Если не было сбойных экспериментов они постепенно удалятся по крону.

Аватар пользователя drugget drugget 21 июня 2013 в 14:36

@Artu, нет field_purge_batch надо в PHP вызвать.
Если используете модуль Devel, то просто по пути /devel/php.

Да на самом деле можно крон запустить - он сам удалит всё Smile

Аватар пользователя drugget drugget 21 июня 2013 в 16:14

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

Аватар пользователя leramulina leramulina 20 марта 2014 в 13:30

Помогите, пожалуйста. У меня проблема с тем, что остались как раз такие таблицы. И у меня подозрение, что они мешают работе модуля Corresponding Entity Reference.

Я захожу в devel/php и вызываю там:

function field_purge_batch($batch_size) {
// Retrieve all deleted field instances. We cannot use field_info_instances()
// because that function does not return deleted instances.
$instances = field_read_instances(array('deleted' => 1), array('include_deleted' => 1));

foreach ($instances as $instance) {
// field_purge_data() will need the field array.
$field = field_info_field_by_id($instance['field_id']);
// Retrieve some entities.
$query = new EntityFieldQuery();
$results = $query->fieldCondition($field)->entityCondition('bundle', $instance['bundle'])->deleted(TRUE)->range(0, $batch_size)->execute();

if ($results) {
foreach ($results as $entity_type => $stub_entities) {
field_attach_load($entity_type, $stub_entities, FIELD_LOAD_CURRENT, array('field_id' => $field['id'], 'deleted' => 1));
foreach ($stub_entities as $stub_entity) {
// Purge the data for the entity.
field_purge_data($entity_type, $stub_entity, $field, $instance);
}
}
}
else {
// No field data remains for the instance, so we can remove it.
field_purge_instance($instance);
}
}

// Retrieve all deleted fields. Any that have no instances can be purged.
$fields = field_read_fields(array('deleted' => 1), array('include_deleted' => 1));
foreach ($fields as $field) {
$instances = field_read_instances(array('field_id' => $field['id']), array('include_deleted' => 1));
if (empty($instances)) {
field_purge_field($field);
}
}
}

Но система пишет

Fatal error: Cannot redeclare field_purge_batch() (previously declared in C:\xampp\htdocs\project\modules\field\field.crud.inc:880) in C:\xampp\htdocs\project\sites\all\modules\devel\devel.module(1415) : eval()'d code on line 36

Что я делаю не так?

Аватар пользователя drugget drugget 20 марта 2014 в 17:43

@leramulina
Вы зачем-то объявляете эту функцию в своём PHP коде, что естественно приводит к ошибке, т.к. эта функция уже есть в ядре.
Надо просто сделать вот так:

<?php
field_purge_batch(5);
?>

И все Smile

Аватар пользователя leramulina leramulina 20 марта 2014 в 14:09

Запуск field_purge_batch(); вызвал такое сообщение

The website encountered an unexpected error. Please try again later.

Хоть бы объяснение какое-то было. А то ведь просто unexpected error.

Аватар пользователя drugget drugget 20 марта 2014 в 14:13

@leramulina
У меня тоже такое было на одном сайте.
В этом случае я руками удалял таблицы и записи в field_config, field_config_instance.
Только перед этим надо понимать, что делаешь, где делаешь и почему.:)
Ну и БЭКАП перед тем как лезть в базу - обязательно!

Аватар пользователя Artu Artu 20 марта 2014 в 16:13

Запускаю "field_purge_batch();" через Devel.

Получаю:
Warning: Missing argument 1 for field_purge_batch(), called in /home/uXXXX/domains/demo.com.ua/sites/all/modules/devel/devel.module(1415) : eval()'d code on line 1 and defined в функции field_purge_batch() (строка 880 в файле /home/u2983/domains/demo.itcross.com.ua/modules/field/field.crud.inc).