/ Wordpress / База данных для Wordpress

База данных для WordPress

HIT

01.07.2016

1921

2

База данных — это основа любого сайта, в которой хранится вся информация сайта: пользователи, записи, страницы, настройки и т.д. Шаблоны тем WordPress в базу данных не входят.

В названии базы данных и пользователя не должно быть дефисов.

Несколько сайтов на одной базе

Без проблем реализуется несколько сайтов на 1 базе данных, но надо учитывать что размер базы также увеличивается. Но если сайты небольшие это вполне оправдано.
При установке очередного сайта в файле wp_config.php заполняем существующие БД, пользователя и пароль, и ниже меняем префикс таблиц с

$table_prefix = ‘wp_’;

на пользовательскую (например)

$table_prefix = ‘gauss_’;

Чистка базы данных

Со временем (установка различных плагинов, ревизии записей, эксперименты) база данных захламляется, увеличивается время ее обработки. Произвести комплексную чистку поможет плагин WP Clean Up (этот мне понравился больше), либо WP-Optimize (этот более популярен — 500 000 скачиваний).

Таблицы базы данных WP

wp_posts Данные о записях (различных типов, тип является параметром записи)
wp_postmeta Данные о метаполях записи

wp_term_relationships Связи записи с терминами таксономий

wp_terms Данные о терминах таксономии
wp_termmeta Данные о метаполях термина таксономии (описание, изображение)

База данных Woocommerce

Большинство параметров товара, например цены (основная и акционная), находятся в таблице postmeta

  • _regular_price
  • _sale_price
  • _sale_price_dates_to
  • _sale_price_dates_from

Есть еще параметр _price — финальный показатель цены. _sale_price и _price должны совпадать.

Тип продукта сделан в виде таксономии product_type.

Проблемы с БД Woocommerce

Помимо проблемы довольно большой базы wp_post_meta недавно столкнулся с еще одной проблемой базы связанной с WC. Таблица wp_woocommerce_sessions была размером 97 Mb и таблица wp_options 37 Mb.

С первой проблемой справился нажатием в настройках WC > Статус > Инструменты кнопки Очистить сессии клиентов. Причем кнопки очистки транзиенты WooCommerce и Истекшие временные данные (первые в списке) ничего не дали.

В попытке разобраться со второй частью проблемы выяснил, что столбец autoload обозначает вызывать ли строку при обращении к сайту (! при каждом запросе).

Как смотреть сколько байт вызывается автозапуском:

SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload='yes';

Смотреть размер данных автозагрузки, сколько записей в таблице и первые 10 записей по размеру:

SELECT 'autoloaded data in KiB' as name, ROUND(SUM(LENGTH(option_value))/ 1024) as value FROM wp_options WHERE autoload='yes'
UNION
SELECT 'autoloaded data count', count(*) FROM wp_options WHERE autoload='yes'
UNION
(SELECT option_name, length(option_value) FROM wp_options WHERE autoload='yes' ORDER BY length(option_value) DESC LIMIT 10)

Самые большие записи не по количеству а по размеру:

SELECT option_name, length(option_value) AS option_value_length FROM wp_options WHERE autoload='yes' ORDER BY option_value_length DESC LIMIT 10;

Так пока и не выяснил почему таблица wp_option стала весить 37 Mb. При этом, при таком же количестве и наборе строк, на других сайтах она весит менее 2 Mb. При экспорте этой таблицы она весит 1.3 Mb.

В таблице содержится очень много файлов _transient_timeout_wc_related

Сортировка строк по размеру:

SELECT * FROM `wp_options` ORDER BY LENGTH(option_value) DESC;

Выборка временных файлов с автозагрузкой:

SELECT * 
FROM `wp_options` 
WHERE `autoload` = 'yes'
AND `option_name` LIKE '%transient%'

Выборка всех временных файлов в таблице wp_options:

SELECT * 
FROM `wp_options` 
WHERE `option_name` LIKE '%transient%'

Удалить все временные файлы:

DELETE FROM `wp_options` WHERE `option_name` LIKE ('%\_transient\_%')

Функция постоянной очистки временных файлов (Thank Isabel Castillo):

//Delete ALL transients from the wpdb
function isa_delete_all_transients() {
    global $wpdb;
    $sql = 'DELETE FROM ' . $wpdb->options . ' WHERE option_name LIKE "_transient_%"';
    $wpdb->query($sql);
}
add_action( 'init', 'isa_delete_all_transients' );

Как сделать очистку по расписанию описано здесь.

Получить один столбец таблицы

SELECT `user_email` FROM `wp_users`;

Только если строк больше 500 то нужно сохранять отдельными частями (CSV) и потом объединять.

Поделиться в соц. сетях:

  • Комментарии
  • Вложения

Добавить комментарий

2 комментария

  1. mehran

    you have 2way
    1- use this code in functions.php
    isabelcastillo.com/delete-all-transients-wordpress
    2-use w3 total cash and disable storage transent in database

    1. Alexandr

      Thank! I will try — I will give a comment.

База данных для WordPress
Квиз-форма
Рекомендации для васКвиз-формаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.