Установил drupal commerce, Ajax Basket Link, Commerce Cart Ajax, Commerce Robokassa. Видимо после этого стала расти база данных sqlite с каждым нажатием кнопки "очистить кэш". Из 12Мб выросла до 2Гб. Подскажите что делать.
Нашел команду VACUUM для sqlite. В итоге база уменьшилась до 127Мб, потом мигрировал на mysql и обратно, стала снова 12Мб.
Комментарии
По теме - ХЗ, мб дело в том что это не mySQL а лайт.
Модуль Boost, он сохраняет кеш на локальном носителе (хостинге), только при включении буста не забудь отключить стандартный кеш дру.
boost стоит, стандартный кэш отключен. все было норм, до того как начал добавлять товары в коммерс.
95% всего объема базы занимается таблица caсhe_form. в чем может быть причина?
А можно поинтересоваться, для чего вам sqlite ?
И еще вопрос, синонимы для ссылок не используете ?
sqlite использую потому что есть много мелких сайтов, и смысла ставить под каждый mysql не вижу. + хорошая экономия на хостинге.
синонимы не использую.
проблема с cache_form известная в интернетах, но те способы что предлагают почему то не работают с sqlite. таблица не очищается с помощью db_query("DELETE FROM cache_form where 'expire' < UNIX_TIMESTAMP();");"
хотя может она и очищается, только я не знаю как запустить команду VACUUM с помощью drupal к базе данных после очистки таблицы cache_form.
нашел модуль sqlite vacuum, но там даже админка не работает от чего то.
В общем вроде да, таблица очищается вот таким кодом в модуле:
<?php
function clearcacheform_cron() {
cache_clear_all('*', 'cache', TRUE);
cache_clear_all('*', 'cache_form', TRUE);
}
?>
Но вот команду VACUUM как запустить таким же способом я не знаю. Есть документация по данному запросу к базе: http://www.sqlite.org/lang_vacuum.html может кто разбирается? А то я совсем не шарю.
В рукожопости погроммистов.
Вскрыл модуль SQLite Vacuum:
<?php
/**
* Vacuum.
*
* @return Exception|null
*/
function sqlite_vacuum() {
// If our friend SQLite booster brought us a transaction, end it.
$transaction = &drupal_static('sqlite_booster');
$transaction = NULL;
try {
db_query('vacuum;');
} catch (Exception $e) {
return $e;
}
return NULL;
}
/**
* Check for SQLite DB.
*/
function sqlite_vacuum_check() {
$dbh = Database::getConnection();
return $dbh->databaseType() === 'sqlite';
}
/**
* Implements hook_cron().
*/
function sqlite_vacuum_cron() {
if (!sqlite_vacuum_check()) {
return;
}
// Interval defaults to 10800s = 3h.
$interval = sqlite_vacuum_interval();
// Set interval to 0 to disable.
if ($interval <= 0) {
return;
}
$lastrun = variable_get('sqlite_vacuum_lastrun', 0);
if (REQUEST_TIME - $lastrun >= $interval) {
$exception = sqlite_vacuum();
list($message, $placeholders) = sqlite_vacuum_message($exception);
watchdog('sqlite_vacuum', $message, $placeholders);
variable_set('sqlite_vacuum_lastrun', REQUEST_TIME);
}
}
/**
* @return null
*/
function sqlite_vacuum_interval() {
return variable_get('sqlite_vacuum_interval', 10800);
}
/**
* Implements hook_permission().
*/
function sqlite_vacuum_permission() {
return array(
'administer sqlite vacuum' => array(
'title' => t('Administer SQLite Vacuum'),
),
);
}
/**
* Implements hook_menu().
*/
function sqlite_vacuum_menu() {
$items['admin/config/development/sqlite-vacuum'] = array(
'title' => t('SQLite Vacuum'),
'page callback' => 'drupal_get_form',
'page arguments' => array('sqlite_vacuum_form'),
'access arguments' => array('administer sqlite vacuum')
);
return $items;
}
/**
* @param $exception
* @return null|string
*/
function sqlite_vacuum_message($exception) {
if (!$exception) {
return array('SQLite DB vacuumed.', array());
}
else {
return array('DB Exception: %e', array('%e' => (string) $exception));
}
}
/**
* Form callback.
*/
function sqlite_vacuum_form($form_state) {
$is_sqlite = sqlite_vacuum_check();
$status = $is_sqlite ? t('SQLite DB driver detected.') : t('Currently no SQLite DB driver.');
$form = array();
$form[] = array('#markup' => $status . '
');
$form['vacuum'] = array(
'#type' => 'submit',
'#value' => t('Vacuum now'),
'#access' => $is_sqlite,
'#submit' => array('sqlite_vacuum_button')
);
return variable_group_form($form, $form_state, 'sqlite_vacuum');
}
/**
* Form submit callback for vacuum button.
*/
function sqlite_vacuum_button(&$form, $form_state) {
$exception = sqlite_vacuum();
list($message, $placeholders) = sqlite_vacuum_message($exception);
drupal_set_message(t($message, $placeholders));
}
?>
Что отсюда мне нужно взять себе в модуль?
В общем видимо все разрешилось. Кэш чистит отдельный модуль с кодом
<?php
function clearcacheform_cron() {
cache_clear_all('*', 'cache', TRUE);
cache_clear_all('*', 'cache_form', TRUE);
}
?>
VACUUM выполняет модуль SQLite Vacuum. Будем считать что решено.