С нидавнего времени в базе данных начали появляться такие таблицы:
...
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 решения нет.
Комментарии
Видимо, это время определяется моментом удаления полей из типов материала.
Если не было сбойных экспериментов они постепенно удалятся по крону.
Будем надеяться, что удалятся.. спасибо
А если не удаляются? Кто как справляется?
Руками,или есть модуль?
@Artu, запустите функцию field_purge_batch() - должно помочь.
Пока удалил руками, а она через web интерфейс запускается?
del
@Artu, нет field_purge_batch надо в PHP вызвать.
Если используете модуль Devel, то просто по пути /devel/php.
Да на самом деле можно крон запустить - он сам удалит всё
неее. крон сам не удаляет. разве что сделать в кроне этот вызов.
неее. крон сам не удаляет. разве что сделать в кроне этот вызов.
По идее крон сам должен удалять - так описано в доках.
В любом случае у меня сегодня была такая же проблема (поэтому я тут и отписался ) - вызов функции решил её на ура.
Помогите, пожалуйста. У меня проблема с тем, что остались как раз такие таблицы. И у меня подозрение, что они мешают работе модуля 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
Что я делаю не так?
@leramulina
Вы зачем-то объявляете эту функцию в своём PHP коде, что естественно приводит к ошибке, т.к. эта функция уже есть в ядре.
Надо просто сделать вот так:
<?php
field_purge_batch(5);
?>
И все
Запуск field_purge_batch(); вызвал такое сообщение
The website encountered an unexpected error. Please try again later.
Хоть бы объяснение какое-то было. А то ведь просто unexpected error.
@leramulina
У меня тоже такое было на одном сайте.
В этом случае я руками удалял таблицы и записи в field_config, field_config_instance.
Только перед этим надо понимать, что делаешь, где делаешь и почему.:)
Ну и БЭКАП перед тем как лезть в базу - обязательно!
Запускаю "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).
field_purge_batch(10);
например
Да, я у себя в каменте поправил, на всякий случай!