Перейти к содержанию
Форум поддержки пользователей VamShop

мощнейшая нагрузка на mysql изза таблицы affiliate_clickthroughs


Рекомендуемые сообщения

Таблица : affiliate_clickthroughs содержит 103 000 строк..изза этого жутко безбожная нагрузка сервера..

1) как это решить на будущее? видимо включена партнерская программа и подсчёт переходов

2) как удалять все данные, когда такой перегруз  ( командой?) или может по крону сделать?

Ссылка на сообщение
Поделиться на другие сайты

а в чём мораль? я сейчас удалил все эти данные.. и сразу нагрузка спала..но получается это надо каждую неделю делать вручную?

104 000 записей не шутки!!

специальный админ- посмотрел сервер, mysql грузился на 150% ( команда top), он обнаружил что именно эта база данных грузила весь сервер, а уж определить остальное- дело логики и смекалки..но что вот с таким делать?

Ссылка на сообщение
Поделиться на другие сайты

хотя я так понял TRUNCATE чистит лучше- но полного синтаксиса для моего случая не нашёл..

мне посоветовали

DELETE FROM affiliate_clickthroughs WHERE 1=1;

а также

DELETE FROM orders_products WHERE 1=1;

все это добро занимало более 60 мегабайт!

Ссылка на сообщение
Поделиться на другие сайты

Это кто-же такое тебе посоветовал? :)

Не слушай школьников, пользуйся TRUNCATE для полной "зачистки" таблицы - она и быстрее несравнимо и память сразу освобождает.

Для какого такого "твоего" случая не нашёл "полного синтаксиса"?

http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html

http://www.mysql.ru/docs/man/TRUNCATE.html

Хотя сам подход странный - если таблица не нужна, если её чистить регулярно, может быть просто отказаться от её использования? Какой смысл в данных, которые накапливаются и удаляются одновременно?

Впрочем, при ближайшем рассмотрении, оказалось что отказаться не так просто - клики записываются в таблицу не зависимо от того, активна партнёрка или нет, есть такой ref_id или нет. Нужно сделать две вещи:

1. Ввести глобальную константу - партнёрка в магазине активна или нет и проверять её во всех affiliate_*.php.

2. В affiliate_application_top.php добавить проверку на существование affiliate_ref, прежде чем записывать его заходы.

Кстати, перед тем как чистить таблицу, посмотри кто спамит - как бы это не оказался бот яндекса :) Это же так просто - прописал у себя ссылки с рефом на партнёрский магазин, бот подхватил и давай индексировать :) А защиты по user agent нет.

Ссылка на сообщение
Поделиться на другие сайты

в данном случае партнёрка активна, магазин не мой, иначе бы вырубил конечно..  но там 15 партнеров, а бот яндекса считается тоже, именно поэтому везде у себя всё повырубал такое..

да кстати, если сделать защиту от яндекса как-то, может и спасёт ситуацию..

спасибо за ссылку, я просто не туда посмотрел- на первой странице..

Ссылка на сообщение
Поделиться на другие сайты

Запретить регистрацию кликов ботов - работы на 1,5 мин. Только нужно всех ботов запрещать.

И в любом случае нужно сначала проверить есть такой affiliate_ref, а потом уже регистрировать его действия.

Ссылка на сообщение
Поделиться на другие сайты

можете сделать такую оптимизацию-чтобы это всё добро не пухло? если да- то какова цена вопроса?

Ссылка на сообщение
Поделиться на другие сайты

  Цитата

Запретить регистрацию кликов ботов - работы на 1,5 мин. Только нужно всех ботов запрещать.

И в любом случае нужно сначала проверить есть такой affiliate_ref, а потом уже регистрировать его действия.

а могут быть проблемы с поисковиками в итоге?

Ссылка на сообщение
Поделиться на другие сайты

  Цитата

а могут быть проблемы с поисковиками в итоге?

Какие проблемы? Перестанут регистрироваться клики ботов в партнёрке? Да, такая проблема с ботами обязательно будет. Если это проблема ;)

На самом деле страницы с ref - это дубли со всеми вытекающими. Их вообще запрещать к индексации нужно.

Ссылка на сообщение
Поделиться на другие сайты

  Цитата

можете сделать такую оптимизацию-чтобы это всё добро не пухло? если да- то какова цена вопроса?

affiliate_application_top.php

ищем

if (($_GET['ref'] || $_POST['ref'])) {
заменяем на
if (($_GET['ref'] || $_POST['ref']) && vam_check_agent() == 0) {
При этом параметр "Не показывать сессию в адресе паукам поисковых машин" (http://demo.vamhost.ru/admin/configuration.php?gID=16) должен быть установлен в true. Кстати, в application_top.php
if (CHECK_CLIENT_AGENT) {
стоит заменить на
if (CHECK_CLIENT_AGENT=='true') {

Ссылка на сообщение
Поделиться на другие сайты
  • 7 months later...

история повторяется..причем прежние методы уже не помогают(

накопилось огромное количество заказов, версия 1,54 видимо как-то вызываются они и идет висяк..

все дело в том что это магазин семян, и там на каждый заказ по 10-20 и выше строк забирается.. в итоге десятки тысяч строк..

таблица заказов 50 мегабайт..

отсюда вопрос- было ли что-то в более новых версиях сделано для этого, или надо как-то запиливать вручную с помощью специалистов?

Ссылка на сообщение
Поделиться на другие сайты

да тут висяки уже не от партнерки, а от обращения к заказам..к истории заказов.. в общем ко всем таблицам что так или иначе с заказами связаны..

они ведь вызываются как я понимаю не только в админке, а в момент оформления заказа, и если заказы не редкие..или в корзину кладут товар, то видимо идут жесткие тормоза

Ссылка на сообщение
Поделиться на другие сайты

А базу пытались оптимизировать?

У меня в БД тоже десятки тысяч строк, но тормозов не наблюдаю.

На странице карточки товара выводятся "так же заказали" и включен ли бокс "лидеры продаж"?

Тормоза могут быть именно из-за них.

Ну и адрес бы не помешал.

Ссылка на сообщение
Поделиться на другие сайты

оптимизировать в смысле через phpmyadmin ? когда так делали первый раз, какие-то там индексы врубил, вроде помогло тогда.

сейчас уже подзабыл как это делается- полезу сейчас гляну.

Ссылка на сообщение
Поделиться на другие сайты

да боксы выводятся.. по идее точно, вот где обращения идут.. про также заказали

Ссылка на сообщение
Поделиться на другие сайты

а как вы это сделали? то есть как это можно закэшировать? весьма интересуюсь и тоже хочу:-)

Ссылка на сообщение
Поделиться на другие сайты

Самый качественный способ - это загнать кеш в memcache.

Сделать это проще всего в шаблоне.


{php}
$expire = 86400;//время жизни кеша в секундах
$id=md5(getenv('REQUEST_URI')).'тип_иформации';//здесь необходимо изменить на название бокса, чтобы информация не пересекалась
$memcache_obj = new Memcache;
$memcache_obj->connect('127.0.0.1', 11211) or die("Could not connect");

if(($bufer=$memcache_obj->get($id)) === false)
{
ob_start();
{/php}
{ЗДЕСЬ_МЕТКА_ВАШЕГО_БОКСА}
{php}
$bufer = ob_get_contents();
ob_end_clean();

$memcache_obj->set($id, $bufer, false, $expire);
}

$memcache_obj->close();
echo $bufer;
{/php}
[/CODE]

Вместо мемкеша это все легко переделать на файловый кеш, но так на порядок быстрее.

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...