HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
315
Добрый день. Сегодня на сайте переодически выскакивает эта ошибка.
Что она значит, как с этим бороться и причём тут сессии?
Email: roman.fov@gmail.com Skype: roman-fov
Re: HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
Roman Fov
315
И на этом сайте (hostcms.ru) тоже часто встречается эта ошибка.
Email: roman.fov@gmail.com Skype: roman-fov
Re: HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
Roman Fov
315
На почту при этом никаких сообщений об ошибках не сыпется
Email: roman.fov@gmail.com Skype: roman-fov
Re: HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
hostcms
Модератор
16655
Это говорит, что от открытой вами сессии еще выполняется процесс и пока процесс не разблокирует сессию — вы не сможете снова забронировать сессию.
Re: HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
Roman Fov
315
Так как с этим бороться? Что это за процессы? Запросы тяжёлые?
Email: roman.fov@gmail.com Skype: roman-fov
Re: HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
hostcms
Модератор
16655
Roman Fov,
это уж лучше Вам знать что за страницы у Вас открывались параллельно в тот момент.
Re: HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
xelaxela13
283
Появилась эта ошибка, как досрочно остановить сессию. Может быть из за того что открыта админка в двух вкладках в браузере?
Re: HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
Roman Fov
315
Я куки чищу в таких случаях и помогает.
Email: roman.fov@gmail.com Skype: roman-fov
Re: HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
Parona
1
Тоже сегодня была эта проблема. Ждала час…. Потом почистила куки (по рекомендации в этой теме). Все заработало.
Re: HostCMS session lock error: TimeoutHostCMS session lock error: Timeout
arpaweb
59
Каптчу отрубили, заработало нормально всё.
ArpaWeb
Содержание
- Session lock error: Timeout при загрузке картинки нового баннера
- Работа с дополнительными свойствами в HostCMS v. 6
- Индивидуальные работы
- Необходимо переработать 2 страницы cайта
- Контроль IP адресов
- Вывести фильтры на сайт
- Переделать сайт
- Подготовить YML файл
- Починить корзину
- Нужно вывести сайт на яндекс маркет
- добавить кнопку заказать и форму в товары интернет магазина как доп свойство
- Переписать генерацию sitemap.xml
- Доработки по сайту.
- Индивидуальные работы
- Сборка сайта на hostcms
- Корректный вывод модификаций
- Host cms работа с базой
- Выложить 54 элементов в информационную систему — Наши проекты
- Поле ввода в карточке товара
- Разработчик HOSTCMS
- Магазин экскурсий
- Доработки по сайту
- Редизайн сайта
- Добавить обработку при загрузки товара из 1с
- Исправление «превышен тайм-аут ожидания блокировки; попробуйте перезапустить транзакцию» для «застрявшей» таблицы Mysql?
- 12 ответов:
Session lock error: Timeout при загрузке картинки нового баннера
Добрый день. Возникла следующая проблема: При попытке загрузить новую картинку в баннер сайт не отображается,показывается сообщение Session lock error: Timeout.
В нормальное состояние сайт возвращается спустя более часа.
В логах огромное число записей типа
09.04.2013 00:05:16,»#####»,»Предупреждение: XSLTProcessor::transformToDoc() [function.XSLTProcessor-transformToDoc]: runtime error: file /html/ line 637 element param в файле /html/modules/Xsl/Xsl.class.php (строка 289)
Стек вызовов:
Файл: /html/modules/Xsl/Xsl.class.php, строка 289,
Файл: /html/modules/shop/shop.class.php, строка 19726,
Файл: /html/hostcmsfiles/lib/lib_4/lib_4.php, строка 794,
Файл: /html/modules/Kernel/Kernel.class.php, строка 2407,
Файл: /html/hostcmsfiles/data_templates/2.htm, строка 117,
Файл: /html/modules/Kernel/Kernel.class.php, строка 2432,
Файл: /html/templates/template1/template.htm, строка 352,
Файл: /html/index.php, строка 1070″,»3″,»-«,»http://www.nado.ru/board/page-459/?action=apply_filter&producer_id=&saller_id=&price_from=&price_to=&on_page=&pictures=&sort_by_field=0&order_direction=1″,»178.154.178.248»
Не знаю, может быть будет полезно следующее:
1) периодически возникают проблемы с правами доступа к отдельным файлам
2)сам сайт весит около 2 Гб
Очень надеюсь на вашу помощь
Источник
Работа с дополнительными свойствами в HostCMS v. 6
Снова проблема, посмотрите пожалуйста код.
Ограничение на количество выводимых групп работает до момента добавления сортировки.
После этого система ругается на строку с лимитом.
Подскажите пожалуйста как объединить оба условия и количество и сортировку.
Поиском ответ найти не сумел.
Заранее спасибо.
Т.е. это старый код но с лимитом в 24.
Выводит 10 групп из 27 почему мне пока не понять. Но работает.
Меню «Списки».
Создал один список со свойствами для определенного подменю.
Начинаю создавать второй список для другого подменю, сразу же сталкиваюсь с проблемой:
— прописываю первый пункт «Производитель». Мне выскакивает уведомление:Сайту уже принадлежит список с таким же названием!
И что теперь делать?
Мне хочется в разных подменю иметь разные списки и разные группы с одинаковыми названиями в описаниях разных товаров от разных производителей.
Что за ерунда?
Форум ваш в Опере глючит и не открывается. (HostCMS session lock error: Timeout)
Добрый день!
Подскажите пожалуйста, как в тайтле товара, перед именем вывести, доп свойство? (тег tiptovara или id 61)
Вот кусок кода ТДС отвечающий за тайтл в товаре:
if ($Shop_Controller_Show->item)
<
$oShop_Item = Core_Entity::factory(‘Shop_Item’, $Shop_Controller_Show->item);
Core_Page::instance()->title($oShop_Item->seo_title != »
? $oShop_Item->seo_title
: $oShop_Item->name . ‘ — описание, цены, характеристики | Safemeb.ru».’);
Core_Page::instance()->description($oShop_Item->seo_description != »
? $oShop_Item->seo_description
: $oShop_Item->name);
Core_Page::instance()->keywords($oShop_Item->seo_keywords != »
? $oShop_Item->seo_keywords
: $oShop_Item->name);
>
Что надо прописать, что бы выводилось перед именем доп свойство, тип товара?
xsl (
Core_Entity::factory (‘Xsl’)->getByName (‘МагазинКаталогТоваровНаГлавнойСпецПред’)
)
->groupsMode (‘none’)
//->itemsForbiddenTags (array (‘text’))
->group (FALSE)
->itemsProperties (TRUE)
->limit (3);
// Объединение с нужной таблицей свойств
$Shop_Controller_Show
->ShopItems ()
->queryBuilder ()
->where (‘shop_items.active’, ‘=’, 1)
->clearOrderBy ()
->orderBy (‘RAND ()’) // в случайном порядке
->leftJoin (‘shop_item_properties’, ‘shop_items.shop_id’, ‘=’, ‘shop_item_properties.shop_id’)
->leftJoin (‘property_value_strings’, ‘shop_items.id’, ‘=’, ‘property_value_strings.entity_id’,
array (
array (‘AND’ ≥ array (‘shop_item_properties.property_id’, ‘=’, Core_QueryBuilder::expression (‘`property_value_strings`.`property_id`’)))
)
)
// Идентификатор дополнительного свойства
->where (‘shop_item_properties.property_id’, ‘=’, 64) // здесь указываете id вашего дополнительного свойства
// Значание дополнительного свойства
->where (‘property_value_strings.value’, ‘>’, ‘0’)
->groupBy (‘shop_items.id’)
// Количество свойств
->having (‘COUNT (shop_item_properties.shop_id)’, ‘=’, 1);
$Shop_Controller_Show->show ();
>
? >
как исправить этот код чтобы выводились товары по дополнительному свойству типа «флажок»?
я попробовал заменить strings на checkbox, но почему-то не прокатило.
Источник
Индивидуальные работы
Необходимо переработать 2 страницы cайта
Необходимо переработать 2 страницы сайта Avtostorm.ru
Cтраницы: https://avtostorm.ru/nakidki/ и https://avtostorm.ru/chehly/
Cайт сделан на СMS: Host CMS
Необходим опыт работы с данной CMS
Основные изменения нужно будет сделать в Каталоге.
1. Нужно чтобы клиент мог провалиться в карточку товара
2. В перечне выбрать свою модель авто
3.
Контроль IP адресов
Функция контроль IP адреса:
Протоколирование истории входов пользователей.
Сопоставление IP адреса текущего и предыдущих входов.
При обнаружении IP адресов из разных регионов — оповещение администратора на эл. почту.
Вывести фильтры на сайт
Интернет магазин в HostCms. Есть товары с заполненными доп. характеристиками. Надо настроить вывод фильтров по этим характеристикам. Версия HostCMS: 6.9.0. Редакция: Малый бизнес. Версия PHP: 5.6.38
Переделать сайт
Сайт klukva32.ru
Версия HostCMS: Халява 6.1.6
Подробное тз во вложении. Интересует стоимость, сроки и портфолио кандидата.
Пишите в вотсап 89103333917
Подготовить YML файл
Необходимо подготовить YML-файл, с возможностью генерации с сайта
форма файла должны соответствовать схеме:
https://zakupki.mos.ru/Content/Pub/YmlExchange/v1_0/Xsd/schema.xsd
Также для выполнения задания прилагается инструкция:
https://zakupki.mos.ru/static/media/yml_instruction.c85838a4.
Починить корзину
При выборе способа доставки в корзине возникла ошибка — невозможно сделать заказ.
Нужно вывести сайт на яндекс маркет
Нужно вывести сайт на яндекс маркет
У меня осталось три попытки
добавить кнопку заказать и форму в товары интернет магазина как доп свойство
добавить кнопку заказать и форму в товары интернет магазина как доп свойство
Тз в изображении
Версия cms 6.8.3
Переписать генерацию sitemap.xml
Необходимо, чтобы относительно штатной карты:
— все урлы шли бы по алфавиту
— в поле выдавать дату из параметра Last-Modified страницы
— в поле реализуем аналогичным образом как сейчас сделано на https://www.oxyco.ru/sitemap.xml
— в поле для главной страницы 1, для второго уровня 0.8, для третьего уровня 0.6
Доработки по сайту.
Необходимо сделать исправления на сайте и настроить выгрузку товаров в яндекс маркет. + добавить на счет расчет стоимости доставки.
Источник
Индивидуальные работы
Сборка сайта на hostcms
Сайт с каталогом и корзиной, без оплаты с сайта
Нужно проинтегрировать верстку в CMS, настроить формы обратной связи и отправки с корзины клиенту на Email
Дедлайн 5 апреля
Корректный вывод модификаций
Сделать корректным увеличение (уменьшение) количества товара, представленного модификациями:
http://prestige-club.online/shop/andorra-shopping/
Host cms работа с базой
Вообщем какова ситуация, мы развернули текущую копию сайта на новом хостинге, но проблема в том что база поломана.
Например модуль редиректы не работает корректно, мы попробовал его переустановить и у формы администрирования новой присвоился id 0 т.е. потерялся автоинкримент.
Выложить 54 элементов в информационную систему — Наши проекты
Имеется Эксель файл с названием папки с фото на диске, с текстом для описания (убрав лишние символы и смайлы). Нужно добавить фото, описание и доп. свойство с фото и добавить в эксель ссылку на страницу с опубликованным проектом.
Поле ввода в карточке товара
Необходимо в карточке товара реализовать поле ввода.
Это необходимо чтобы покупатель сам вводил текст, который ему необходимо нанести на товар.
Разработчик HOSTCMS
На техподдержку готового сайта. Добавление/изменение функционала и тп. Оплата почасовая по факту.
Магазин экскурсий
Необходимо для товаров магазина (экскурсии) сделать возможным выбор даты, места встречи (из выпадающего списка), отобразить карту — в зависимости от выбранного места. По примеру:
https://tezeks.com/ispaniya/costa-brava-lloret-de-mar/andorra-istoricheskaya-brava
Доработки по сайту
Сайт евродом-урал.рф
1. На главной переделать блок с группами интернет-магазина (обновить, освежить согласно стилистике сайта, возможно предложить совершенно иную организацию блока). Блок должен стать удобным и не вызывать у посетителя сайта затруднений в навигации по разделам каталога.
Редизайн сайта
Для сайта atomstroycom.ru требуется сделать редизайн.
Сайт промышленной компании, с каталогом. Никаких интернет -магазинов и прочих «фишек».
Необходим достаточно строгий дизайн с понятной структурой меню. Такой же понятной должна быть и главная страница.
Интересуют полностью все работы — отрисовка, внедрение.
Прошу указывать стоимость работ.
Добавить обработку при загрузки товара из 1с
Добавить обработку при загрузки и обновлении товара из 1с нужно что бы автоматически прописывал SEO:
Заголовок (title) : Наименование товара Артикул товара
Описание (description): Наименование товара Артикул .
Источник
Исправление «превышен тайм-аут ожидания блокировки; попробуйте перезапустить транзакцию» для «застрявшей» таблицы Mysql?
из скрипта я отправил такой запрос тысячи раз в мою локальную базу данных:
Я забыл добавить часть where, поэтому один и тот же столбец был установлен на одно и то же значение для всех строк в таблице, и это было сделано тысячи раз, и столбец был проиндексирован, поэтому соответствующий индекс, вероятно, обновлялся слишком много раз.
Я заметил, что что-то было не так, потому что это заняло слишком много времени, поэтому я убил сценарий. С тех пор я даже перезагрузил свой компьютер, но что-то застряло в таблице, потому что простые запросы занимают очень много времени, и когда я пытаюсь сбросить соответствующий индекс, он терпит неудачу с этим сообщением:
это таблица innodb, поэтому застрявшая транзакция, вероятно, неявна. Как я могу исправить эту таблицу и удалить застрявшую транзакцию из нее?
12 ответов:
у меня была аналогичная проблема, и я решил ее, проверив потоки, которые работают. Чтобы увидеть запущенные потоки, используйте следующую команду в интерфейсе командной строки mysql:
Он также может быть отправлен из phpMyAdmin, если у вас нет доступа к интерфейсу командной строки mysql.
Это отобразит список потоков с соответствующими идентификаторами и временем выполнения, так что вы можете убить потоки, которые занимают слишком много времени для выполнения. В phpMyAdmin у вас будет кнопка для остановка потоков с помощью KILL, если вы используете интерфейс командной строки, просто используйте команду KILL, за которой следует идентификатор потока, как в следующем примере:
это приведет к прекращению соединения для соответствующего потока.
вы можете проверить текущие транзакции с
ваша транзакция должна быть одной из первых, потому что она самая старая в списке. Теперь просто возьмите значение из trx_mysql_thread_id и отправить его в :
если вы не уверены, какая транзакция ваша, повторите первый запрос очень часто и посмотрите, какие транзакции сохраняются.
Это начало происходить со мной, когда мой размер базы данных вырос и я делал много операций на нем.
правда, есть, вероятно, какой-то способ оптимизировать либо ваши запросы, либо вашу БД, но попробуйте эти 2 запроса для работы вокруг исправления.
проверьте состояние InnoDB для замков
Проверьте MySQL open tables
Проверьте отложенные транзакции InnoDB
проверить зависимость блокировки — что блокирует что
после изучения результатов выше, вы должны быть в состоянии увидеть, что блокирует то, что.
основная причина проблемы может быть в вашем коде тоже-пожалуйста, проверьте связанные функции, особенно для аннотаций, если вы используете JPA, как Hibernate.
например, как описано здесь, неправильное использование следующей аннотации может привести к блокировкам в базе данных:
перезагрузите MySQL, он отлично работает.
но будьте осторожны, что если такой запрос застрял, есть проблема где-то:
- в вашем запросе (неуместный символ, декартово произведение, . )
- очень много записей для редактирования
- сложные соединения или тесты (MD5, подстроки, LIKE %. % и т. д.)
- проблема структуры данных
- модель внешнего ключа (блокировка цепи/петли)
- misindexed данные
как сказал @ syedrakib, это работает, но это не долговечное решение для производства.
осторожно: выполнение перезапуска может повлиять на ваши данные с несогласованным состоянием.
кроме того, вы можете проверить, как MySQL обрабатывает ваш запрос с ключевым словом EXPLAIN и посмотреть, возможно ли что-то ускорить запрос (индексы, сложные тесты. ).
когда вы устанавливаете соединение для транзакции, вы получаете блокировку перед выполнением транзакции. Если не удается приобрести замок, то вы пытаетесь на некоторое время. Если блокировка по-прежнему недоступна, то ошибка ожидания блокировки превышена. Почему вы не сможете получить блокировку, так это то, что вы не закрываете соединение. Таким образом, когда вы пытаетесь получить блокировку во второй раз, вы не сможете получить блокировку, поскольку ваше предыдущее соединение все еще открыто и удерживает блокировку.
решение: закройте соединение или setAutoCommit (true) [в соответствии с вашим дизайном], чтобы освободить блокировку.
Так что можете видеть, что задача все еще работает.
убейте конкретный процесс или дождитесь завершения процесса.
У меня была эта проблема при попытке удалить определенную группу записей (используя MS Access 2007 с подключением ODBC к MySQL на веб-сервере). Обычно я удаляю определенные записи из MySQL, а затем заменяю их обновленными записями (каскадное удаление нескольких связанных записей, это упрощает удаление всех связанных записей для удаления одной записи).
Я попытался выполнить операции, доступные в phpMyAdmin для таблицы (оптимизация, флеш и т. д.), Но у меня возникла необходимость разрешение на перезагрузку ошибка, когда я пытался сбросить. Поскольку моя база данных находится на веб-сервере, я не смог перезапустить базу данных. Восстановление из резервной копии не было.
Я попытался запустить запрос на удаление для этой группы записей в cPanel mySQL access в интернете. Получил такое же сообщение об ошибке.
мое решение: я использовал бесплатный браузер запросов MySQL Sun (Oracle) (который я ранее установил на своем компьютере) и запустил там запрос на удаление. Это сработало сразу, проблема решена. Я затем удалось еще раз выполнить функцию с помощью скрипта доступа, используя соединение ODBC Access to MySQL.
Я столкнулся с той же проблемой с «обновлением»-заявление. Мое решение было просто запустить через операции, доступные в phpmyadmin в таблице. Я оптимизировал, смыл и дефрагментировал таблицу (не в том порядке). Не нужно сбрасывать таблицу и восстанавливать ее из резервной копии для меня. 🙂
У меня была та же проблема. Я думаю, что это была тупиковая проблема с SQL. Вы можете просто принудительно закрыть процесс SQL из Диспетчера задач. Если это не исправить, просто перезагрузите компьютер. Вам не нужно удалять таблицу и перезагружать данные.
исправил, Убедитесь, что в запросе нет несоответствующего типа данных insert. У меня была проблема, когда я пытался «данные агента браузера пользователя» в «VARCHAR(255)» и имел проблему с этой блокировкой, однако, когда я изменил ее на «TEXT(255)», он исправил ее. Так что скорее всего это неправильное совпадение типа данных
Я решил проблему, сбросив таблицу и восстановив ее из резервной копии.
Источник
Время прочтения
8 мин
Просмотры 23K
В «жизни» практически любого веб-проекта – будь то небольшой интернет-магазин или сайт набирающего популярность бара – рано или поздно случается момент, когда не хватает ни возможностей и ресурсов shared-хостинга, ни средств для тотальной реорганизации архитектуры приложения. Несколько лет назад, когда я ещё работал в небольшой веб-студии, мне частенько приходилось наблюдать такую картину. Практически во всех подобных случаях принималось одно и то же решение – аренда выделенного сервера и перенос на него проекта в том виде, в котором он есть. В то время в сети было доступно немало статей по настройке серверов с Linux на борту. Причём практически все они были не самого лучшего качества и зачастую содержали настолько вредные советы, что господин Остер мог бы стоя аплодировать авторам тех материалов.
«Всё это дела давно минувших дней» – так я думал ещё совсем недавно, пока ко мне не обратился мой давний приятель за помощью в решении аналогичной проблемы. Как оказалось, ситуация с тех пор сильно не изменилась: нужный раздел документации практически не обновился, сами разработчики в основном советуют воспользоваться shared-хостингом от своих партнёров, а толкового материала, учитывающего нюансы миграции на выделенный сервер проекта на HostCMS, так и не нашлось. Мне нравится сама CMS, поэтому я решил исправить это упущение. Если интересно – добро пожаловать под кат.
Прежде всего оговорюсь. В этой статье я не буду рассматривать вопросы выбора хостинг-провайдера – с этим, я думаю, вы справитесь сами. В качестве серверной ОС выбрана Ubuntu Server 14.04 как одна из наиболее дружелюбных к пользователю. Я предполагаю, что вы обладаете минимальным набором знаний для работы в Linux. К сожалению, здесь вы не найдете тонкой настройки PAM модуля для установки пользовательских лимитов на обращение к файлам и т.п. – если вы ищите такой материал, то скорее всего эта статья будет для вас скучна.
Первые шаги
Итак, у нас есть выделенный сервер и данные для доступа к нему по ssh. Правило первое, оно же главное, старайтесь избегать постоянной работы от имени привилегированного пользователя. Во время первого же сеанса создайте собственную учетную запись и установите для нее пароль. Например, так:
useradd user_name -s /bin/bash -U -m -G sudo
passwd user_name
Дальнейшую работу будем проводить уже от имени только что созданного пользователя.
Установка необходимого ПО
nginx
В качестве HTTP-сервера будет использоваться nginx. Думаю, что в представлении он не нуждается. Устанавливать его будем из репозитория, любезно развёрнутого командой разработчиков. Для этого необходимо получить ключ, которым подписаны установочные пакеты:
# иногда происходит неведомая фигня с добавлением ключей непосредственно из STDOUT
# поэтому сначала ключ сохраняем в файл и только потом добавляем
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
И обновить список источников пакетов, добавив в файл /etc/apt/sources.list строки:
# 12.04 = precise
# 14.04 = trusty
deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx
После этого обновляемся и устанавливаем nginx:
sudo aptitude update && sudo aptitude upgrade -y
sudo aptitude install nginx
Чтобы задать лимиты на количество открываемых пользователем http-сервера файлов, нужно добавить в /etc/security/limits.conf строки:
nginx hard nofile 32768
nginx soft nofile 32768
Точные цифры следует подбирать, исходя из конфигурации вашего сервера. Активируется модуль лимитов добавлением следующей строки в /etc/pam.d/common-session:
session required pam_limits.so
Проверить, что лимиты установились можно следующей командой:
sudo su nginx --shell /bin/bash --command "ulimit -a"
PHP
HostCMS требует, чтобы были включены следующие модули php: curl, gd, xslt и, естественно, mysql. Кроме того, обратите внимание, что теперь пакет php5-json не является виртуальным и его нужно устанавливать отдельно. Помимо прочего подключим модуль кеширования опкода xcache. В качестве SAPI (режим запуска интерпретатора) будем использовать PHP-FPM, однако, чтобы иметь возможность выполлять некоторые скрипты по расписанию будет установлен еще и PHP-CLI.
sudo aptitude install php5-common php5-fpm php5-cli php5-curl php5-gd php5-mysql php5-xsl php5-json php5-xcache
MySQL
Установка MySQL довольная проста. Несколько раз установщик запросит у вас пароль для root’а сервера баз данных, можете смело оставлять его пустым — мы сменим его позже, с помощью утилиты mysql_secure_installation. При ее запуске ответьте, что хотите сменить пароль root’a, удалить тестовую БД и тестовых пользователей и обновить права на таблицы службной БД.
sudo aptitude install mysql-server
sudo mysql_secure_installation
Подробно почитать о настройке mysql-сервера можно здесь. Статья отлично написана, поэтому не вижу смысла дублировать сюда информацию.
Настройка загрузки файлов
В качестве протокола передачи файлов я предлагаю использовать SSH FTP (SFTP). Во-первых, он безопаснее обычного ftp, так как данные будут передаваться в зашифрованном виде. Во-вторых, не придется устанавливать дополнительное ПО: все что нужно — ssh-сервер — у нас уже есть. А минусов практически никаких — все современные IDE и клиенты загрузки данных умеют работать с этим протоколом.
Чтобы определить, кому можно подключаться по sftp, создадим дополнительную группу пользователей, например, sftp:
sudo groupadd sftp
И активируем передачу данных, добавив в конец файла /etc/ssh/sshd_config строки:
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Подготовка файловой системы
Традиционно, файлы, относящиеся к веб-сайтам, размещаются в каталоге /var/www/. И мы не будем отступать от этого негласного правила. Создадим папку для виртуальных хостов и будущую точку монтирования быстрого кэша:
sudo mkdir -p -m 755 /var/www/data
sudo mkdir -m 777 /var/www/tmp
Затем укажем, что при следующей загрузке, в эту папку будет смонтирована tmpfs. Добавим в /etc/fstab:
tmpfs /var/www/tmp/ tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=128M 0 0
Стоит заметить, что некоторые редакции HostCMS имеют встроенный алгоритм кеширования ответов в файлы. Если вы используете одну из таких редакций имеет смысл примонтировать tmpfs к директории кеша самой CMS.
Настройка виртуальных хостов
Если вы планируете развернуть на своем сервере несколько сайтов под управлением HostCMS, то описанную ниже процедуру придется повторить несколько раз. В этом случае имеет смысл попытаться автоматизировать процесс заведения нового хоста. Советую для этих целей обратить внимание на небольшой набор скриптов, описанных в этой статье, и «допилить» их под себя.
Заведение пользователя хоста
По соображениям безопасности все файлы, связанные с нашим сайтом будут принадлежать специально заведенному в системе пользователю. Подключение по sftp и выполнение PHP-скриптов будет происходить от его же имени. Чтобы было проще, его можно назвать по имени своего сайта:
sudo useradd -b /var/www/data -s /usr/lib/sftp-server -m -U -G sftp example.com
sudo passwd example.com
sudo su example.com --shell /bin/bash --command "mkdir -m 0755 ~/data ~/log && mkdir -m 0777 ~/tmp"
Для корректной работы chroot’а нужно сделать root’a владельцем домашнего каталога этого пользователя:
cd /var/www/data
sudo chown root:root example.com
Заведение пула PHP-FPM
Пул php-fpm будет запускаться от имени пользователя, которого мы создали на предыдущем шаге. Для взаимодействия с фронтн-энд сервером будет использоваться юникс-сокет. Кроме того, можно настроить количество запускаемых процессов для обработки запросов, тип логирования и некоторые другие специфичные для вашего сайта параметры php.
Пример конфига пула
[example.com]
user = example.com
group = example.com
listen = /var/run/php5_example.com.sock
listen.backlog = 4096
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
process.priority = 0
chdir = /
pm = dynamic
pm.max_children = 64
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 16
pm.process_idle_timeout = 60s;
pm.max_requests = 256
access.log = /var/www/data/example.com/log/php.access.log
access.format = "%R # %{HTTP_HOST}e # %{HTTP_USER_AGENT}e # %t # %m # %r # %Q%q # %s # %f # %{mili}d # %{kilo}M # %{user}C+%{system}C"
slowlog = /var/www/data/example.com/log/php.slow.log
request_slowlog_timeout = 2s
request_terminate_timeout = 300s
php_admin_flag[display_errors] = off
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /var/www/data/example.com/log/php.error.log
php_admin_value[memory_limit] = 32M
php_admin_value[open_basedir] = /var/www/data/example.com/:.
php_admin_value[upload_tmp_dir] = /var/www/data/example.com/tmp
php_admin_value[session.save_path] = /var/www/data/example.com/tmp
Создание конфига виртуального хоста
В файле настройки хоста nginx вам нужно будет указать доменное имя сайта, путь для записи логов доступа и адрес юникс-сокета, который слушает php-fpm. Для обработки запросов к несуществующим файлам будем использовать именованный location — таким образом мы будем эмулировать работу mod_rewrite для Apache2. Перед тем, как отдавать на обработку скрипт нашему бэкэнду, проверяем его существование. Это позволить избежать проблемы, описанной здесь. Для того, чтобы снизить нагрузку на сайт от незарегистрированных пользователей, будем использовать кеширование на стороне nginx. Для этого создадим конфигурационный файл /etc/nginx/conf.d/cache со следующим содержимым:
fastcgi_cache_path /var/www/tmp/cache levels=1:2 keys_zone=cache:32m max_size=128m;
fastcgi_temp_path /var/www/tmp/proxy 1 2;
fastcgi_ignore_headers Expires Cache-Control;
fastcgi_cache_lock on;
fastcgi_cache_lock_timeout 60s;
fastcgi_cache_use_stale error timeout updating invalid_header;
fastcgi_cache_bypass $cookie_PHPSESSID;
fastcgi_no_cache $cookie_PHPSESSID;
fastcgi_cache_key $scheme$host$request_uri;
А затем подключим его в конфиге виртуального хоста.
Пример конфига хоста nginx
server {
listen 80;
server_name example.com www.example.com;
access_log /var/www/data/example.com/log/nginx.access.log main;
error_log /var/www/data/example.com/log/nginx.error.log;
root /var/www/data/example.com/data;
error_page 404 /404/;
location / {
index index.html index.php;
try_files $uri $uri/ @hostcms;
}
# php скрипты отдаем в php-fpm, предварительно проверяя их существование
location ~ .php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5_example.com.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include /etc/nginx/conf.d/cache;
}
# все запросы, для которых не нашлось файлов, переадресуются на index.php
location @hostcms {
fastcgi_pass unix:/var/run/php5_example.com.sock;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
include fastcgi_params;
include /etc/nginx/conf.d/cache;
}
Создание базы данных сайта
Сейчас почти всё готово, осталось только развернуть базу данных и создать пользователя, от имени которого будет осуществляться к ней подключение. Для этого нужно в консоли mysql выполнить несколько простых команд:
CREATE USER 'example_com'@'localhost' IDENTIFIED BY 'ВашСуперСтойкийПароль';
GRANT USAGE ON * . * TO 'example_com'@'localhost' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS example_com_db DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT ALL PRIVILEGES ON example_com_db . * TO 'example_com'@'%';
Обратите внимание, что подключение к базе от имени этого пользователя разрешается с любого адреса.
Если у вас имеется дамп использовавшейся ранее базы, то развернуть его можно следующим набором команд все в той же консоли mysql:
use example_com_db;
source ПутьДоДампаБазыДанных;
Настройка резервного копирования и ротации логов
Если вы всё сделали правильно, то у вас уже должно быть полностью настроенное окружение для запуска вашего проекта. Остаются два последних по списку, но не по значимости, шага — настройка резервного копирования и ротации логов. В качестве инструмента для создания бэкапов я рекомендую использовать backup-manager. На хабре есть отличная статья про него, поэтому подробно останавливаться на нём не будем.
Для осуществления ротации логов нам нужно всего лишь создать правильный конфиг для утилиты logrotate.
Например, такой
/var/www/data/example.com/log/nginx*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root root
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
/var/www/data/example.com/log/php*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root root
postrotate
invoke-rc.d php5-fpm reopen-logs > /dev/null
endscript
}
Вместо заключения
Пожалуй, это всё, что я хотел сказать.
Возможно, кто-то сочтёт статью не слишком актуальной ввиду засилия панелей управления хостингом. Хотя, на мой взгляд, они хороши для массового предоставления услуг и совершенно не годятся, когда речь заходит о затачивании настроек сервера под конкретный проект.
Другие посчитают её немного сумбурной. Не исключено, что это и так: в статье я только попытался отразить свой путанный опыт в области серверного администрирования.
В любом случае, буду рад, если этот материал поможет кому-то. Замечания и дополнения приветствуются.
Session lock error: Timeout при загрузке картинки нового баннера
Добрый день. Возникла следующая проблема: При попытке загрузить новую картинку в баннер сайт не отображается,показывается сообщение Session lock error: Timeout.
В нормальное состояние сайт возвращается спустя более часа.
В логах огромное число записей типа
09.04.2013 00:05:16,»#####»,»Предупреждение: XSLTProcessor::transformToDoc() [function.XSLTProcessor-transformToDoc]: runtime error: file /html/ line 637 element param в файле /html/modules/Xsl/Xsl.class.php (строка 289)
Стек вызовов:
Файл: /html/modules/Xsl/Xsl.class.php, строка 289,
Файл: /html/modules/shop/shop.class.php, строка 19726,
Файл: /html/hostcmsfiles/lib/lib_4/lib_4.php, строка 794,
Файл: /html/modules/Kernel/Kernel.class.php, строка 2407,
Файл: /html/hostcmsfiles/data_templates/2.htm, строка 117,
Файл: /html/modules/Kernel/Kernel.class.php, строка 2432,
Файл: /html/templates/template1/template.htm, строка 352,
Файл: /html/index.php, строка 1070″,»3″,»-«,»http://www.nado.ru/board/page-459/?action=apply_filter&producer_id=&saller_id=&price_from=&price_to=&on_page=&pictures=&sort_by_field=0&order_direction=1″,»178.154.178.248»
Не знаю, может быть будет полезно следующее:
1) периодически возникают проблемы с правами доступа к отдельным файлам
2)сам сайт весит около 2 Гб
Очень надеюсь на вашу помощь
Источник
ошибки
последние дни постоянно приходят отчеты об ошибках :
1)
Дата: 26.07.2011 23:50:50
Событие: Ошибка выполнения запроса: MySQL server has gone away. Запрос: SELECT `structure_propertys_id` FROM `structure_propertys_table` WHERE `site_id` = ‘1’
Статус события: Наивысший уровень критичности
Пользователь: SYSTEM
Сайт: —
Страница: http://www.allmore.ru/dendrarijj_v_sochi/
2)
Дата: 26.07.2011 12:35:57
Событие: Предупреждение: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource в файле /home/www/z59713/htdocs/modules/Structure/Structure.class.php (строка 475)
хостер предложил перейти на новый тариф, но ошибки все равно продолжаются. Сегодня сайт подвисал и появлялось сообщение Session lock error: Timeout. В логах ошибки:
[Fri Jul 29 16:16:35 2011] [error] [client 77.108.205.143] PHP Warning: PHP Startup: Unable to load dynamic library ‘/opt/php-5.2/lib/php/extensions/no-debug-non-zts-20060613/dbase.so’ — /opt/php-5.2/lib/php/extensions/no-debug-non-zts-20060613/dbase.so: cannot open shared object file: No such file or directory in Unknown on line 0, referer: http://www.allmore.ru/ekskursii/
Хостер ответил: «данная проблема касается именно движка. К сожалению, мы не являемся разработчиком HostCMS и не располагаем информацией обо всех особенностях работы данной CMS. Рекомендуем Вам обратиться к разработчику сайта или к разработчикам CMS»
с чем связаны ошибки и как от них избавиться? (последние 2-3 месяца посещаемость сайта выросла в несколько раз — это связано с сезонной тематикой сайта, через 2-3 месяца посещаемость снизиться)
Источник
Работа с дополнительными свойствами в HostCMS v. 6
Снова проблема, посмотрите пожалуйста код.
Ограничение на количество выводимых групп работает до момента добавления сортировки.
После этого система ругается на строку с лимитом.
Подскажите пожалуйста как объединить оба условия и количество и сортировку.
Поиском ответ найти не сумел.
Заранее спасибо.
Т.е. это старый код но с лимитом в 24.
Выводит 10 групп из 27 почему мне пока не понять. Но работает.
Меню «Списки».
Создал один список со свойствами для определенного подменю.
Начинаю создавать второй список для другого подменю, сразу же сталкиваюсь с проблемой:
— прописываю первый пункт «Производитель». Мне выскакивает уведомление:Сайту уже принадлежит список с таким же названием!
И что теперь делать?
Мне хочется в разных подменю иметь разные списки и разные группы с одинаковыми названиями в описаниях разных товаров от разных производителей.
Что за ерунда?
Форум ваш в Опере глючит и не открывается. (HostCMS session lock error: Timeout)
Добрый день!
Подскажите пожалуйста, как в тайтле товара, перед именем вывести, доп свойство? (тег tiptovara или id 61)
Вот кусок кода ТДС отвечающий за тайтл в товаре:
if ($Shop_Controller_Show->item)
<
$oShop_Item = Core_Entity::factory(‘Shop_Item’, $Shop_Controller_Show->item);
Core_Page::instance()->title($oShop_Item->seo_title != »
? $oShop_Item->seo_title
: $oShop_Item->name . ‘ — описание, цены, характеристики | Safemeb.ru».’);
Core_Page::instance()->description($oShop_Item->seo_description != »
? $oShop_Item->seo_description
: $oShop_Item->name);
Core_Page::instance()->keywords($oShop_Item->seo_keywords != »
? $oShop_Item->seo_keywords
: $oShop_Item->name);
>
Что надо прописать, что бы выводилось перед именем доп свойство, тип товара?
xsl (
Core_Entity::factory (‘Xsl’)->getByName (‘МагазинКаталогТоваровНаГлавнойСпецПред’)
)
->groupsMode (‘none’)
//->itemsForbiddenTags (array (‘text’))
->group (FALSE)
->itemsProperties (TRUE)
->limit (3);
// Объединение с нужной таблицей свойств
$Shop_Controller_Show
->ShopItems ()
->queryBuilder ()
->where (‘shop_items.active’, ‘=’, 1)
->clearOrderBy ()
->orderBy (‘RAND ()’) // в случайном порядке
->leftJoin (‘shop_item_properties’, ‘shop_items.shop_id’, ‘=’, ‘shop_item_properties.shop_id’)
->leftJoin (‘property_value_strings’, ‘shop_items.id’, ‘=’, ‘property_value_strings.entity_id’,
array (
array (‘AND’ ≥ array (‘shop_item_properties.property_id’, ‘=’, Core_QueryBuilder::expression (‘`property_value_strings`.`property_id`’)))
)
)
// Идентификатор дополнительного свойства
->where (‘shop_item_properties.property_id’, ‘=’, 64) // здесь указываете id вашего дополнительного свойства
// Значание дополнительного свойства
->where (‘property_value_strings.value’, ‘>’, ‘0’)
->groupBy (‘shop_items.id’)
// Количество свойств
->having (‘COUNT (shop_item_properties.shop_id)’, ‘=’, 1);
$Shop_Controller_Show->show ();
>
? >
как исправить этот код чтобы выводились товары по дополнительному свойству типа «флажок»?
я попробовал заменить strings на checkbox, но почему-то не прокатило.
Источник
Найти разработчика
Csv — файл на hostcms
Требуется из нескольких разнородных прайс-листов создать csv-файл и выгрузить его на сайт под управлением HostCMS. При необходимости, добавить недостающие характеристики в админ.панели и настроить отображение характеристик в фильтре.
Внедрить систему оплаты
Нужно внедрить
1.оплату через робокассы
2. Чтоб клиент мог запросить выставить счёт
3. Указать или убрать доставку.
4. Дизайн Сайта
Нужно обновить систему с 5 до последней версии
Есть два сайта в бекапе, нужно обновить систему до последней версии и развернуть на хостинге.
Сформировать YML файл для Турбо Страниц Яндекса
Нужен YML файл для выгрузки в Яндекс Трубо Страницы.
Сейчас используется выгрузка яндекс маркет встроенная в hostcms и там присутствуют ошибки. Требуется это исправить.
Нужно либо исправить либо консультация
Сформировать YML файл
На весь ассортимент сайта knagrade.ru
Версия HostCMS: 5.9.36
Версия PHP: 5.2.17
Ранее файл уже формировался, но перестал работать.
Обновить дизайн сайта, возможно доработать функционал
Нашему сайту уже 8 лет. Нужно освежить дизайн, сделать его более современным. А также добавить (при необходимости) те функции, которые сейчас являются общепринятыми.
В качестве ориентира мы видим такие сайты:
http://kompressor-ufa.ru/
https://www.compressortyt.ru/
https://www.companyair.
Доработка доски объявлений
Что-то поломалось и верстка отображается криво. Урл дам в ЛС. Нужно починить доску, чтобы нормально работало как раньше все.
Доработать сайт
Здравствуйте.
Нужно доработать сайт
1. Внедрить платёжную систему (банковские карты)
2. Дизайн сайта
3. внедрить частотную таблице подобную https://www.lyngsat.com/
4. Внедрить поиск товара. Клиенту например нужен товар определённого спутника (спутников) он выбирает по каким спутникам искать.
Быстрые фильтры
В уже готовые сайты надо интегрировать быстрые фильтра с сохранением дизайна шаблонов.
Источник
Hostcms session lock error timeout please wait
Поздравляем наших пользователей с наступающим 2015 годом! Желаем вам в новом году еще больше новых модулей, улучшение существующих и роста вашего бизнеса до незапланированных высот!
Проделанная работа за 2014 год
Скидки до 40%
Поддержка старой версии и бесплатная миграция данных
Планы на будущее
График работы в праздничные дни
Работа, проделанная нами в 2014 году
В марте 2014 года была выпущена новая версия системы, которая была переписана с нуля. Более подробно можно прочитать в описание релиза http://site-control.ru/news/294/
В момент релиза, система была сырой и не весь прежний функционал был реализован.
Но за полгода работы над проектом, все известные ошибки были исправлены, недостающий функционал реализован, а главное было реализовано много новых возможностей системы.
Сегодня мы уверены, что новая версия системы работает стабильнее, быстрее, чем старая и имеет больше возможностей.
Ура! В качестве новогоднего подарка, мы объявляем о сумасшедших скидках на наши модули до 40%. Если вы давно мечтали о них, но по разным причинам все время откладывали покупку, то сейчас самое время решится! Дальше будет дороже!
Модуль контроль версия Pro без скидки 1999 руб. со скидкой 1200 руб.
Модуль контроль версия Standart без скидки 999 руб. со скидкой 800 руб.
Модуль проверка позиций версия Pro без скидки 3500 руб. со скидкой 2200 руб.
Модуль проверка позиций версия Standart без скидки 1500 со скидкой 1200 руб.
Скидки будут действовать до 7 января 2015 года включительно!
Поддержка старой версии
На протяжении этого года мы безвозмездно помогали всем нашим клиентам в переходе на новую версию.
С 2015 года поддержка старой версии будет полностью прекращена, в том числе актуализация парсеров и техническая поддержка. Мы не продаем старую версию системы уже более 10 месяцев, также мы не продаем подписку на обновление системы.
Но мы не собираемся бросать клиентов и именно поэтому мы предлагаем бесплатную помощь в переносе данных из старой версии, для тех, кто имеет подписку на обновления.
Оставляйте заявки в тикетах, перенос данный будет осуществляться с 12 января в порядке очереди подачи заявки. Заявки на бесплатный перенос данных будет приниматься до конца января. Напомним, что существует специальный скрипт для самостоятельного переноса данных со старой версии и в 95% случаев данные переносятся корректно без нашего вмешательства.
Успейте воспользоваться! В дальнейшем перенос данных со старой версии в новую, будет осуществляться на платной основе.
Планы на будущее
Планы грандиозные! В первую очередь, мы займемся актуализацией документации и описания функционала модулей. Все существующие модули будут постоянно дорабатываться и интегрироваться между собой!
В данный момент на разных стадиях находятся еще несколько модулей, надеемся, что в будущем году они будут реализованы и станут доступны для пользователей.
Полным ходом идет локализации системы на английский язык. Также мы планируем перевести систему еще на несколько европейских и не очень языков.
Если вы являетесь носителем любого языка отличным от русского и у вас есть желание увидеть site-control.ru на нём, то свяжитесь с нами! Со своей стороны мы обещаем бесплатные версии всех наших продуктов и максимально удобный процесс локализации системы.
График работы в праздничные дни
31.12.2014 — 06.01.2015 никакая техническая поддержка не будет осуществляться.
07.01.2015 — 11.01.2015 ответы на общие вопросы, без решения технических проблем.
С 12.01.20 техническая поддержка будет осуществляться в обычном режиме.
Спасибо за интересный год, спасибо, что вы остаётесь с нами!
Demo версию можно посмотреть здесь http://demo.site-control.ru
Важно, на сервере находится не самая последняя demo версия.
Скачать новую версию можно здесь: скачать
Партнерская программа — 20% с продажи нового модуля!
Источник
Поздравляем наших пользователей с наступающим 2015 годом! Желаем вам в новом году еще больше новых модулей, улучшение существующих и роста вашего бизнеса до незапланированных высот!
Проделанная работа за 2014 год
Скидки до 40%
Поддержка старой версии и бесплатная миграция данных
Планы на будущее
График работы в праздничные дни
Работа, проделанная нами в 2014 году
В марте 2014 года была выпущена новая версия системы, которая была переписана с нуля. Более подробно можно прочитать в описание релиза http://site-control.ru/news/294/
В момент релиза, система была сырой и не весь прежний функционал был реализован.
Но за полгода работы над проектом, все известные ошибки были исправлены, недостающий функционал реализован, а главное было реализовано много новых возможностей системы.
Сегодня мы уверены, что новая версия системы работает стабильнее, быстрее, чем старая и имеет больше возможностей.
Скидки до 40%
Ура! В качестве новогоднего подарка, мы объявляем о сумасшедших скидках на наши модули до 40%. Если вы давно мечтали о них, но по разным причинам все время откладывали покупку, то сейчас самое время решится! Дальше будет дороже!
Модуль контроль версия Pro без скидки 1999 руб. со скидкой 1200 руб.
Модуль контроль версия Standart без скидки 999 руб. со скидкой 800 руб.
Модуль проверка позиций версия Pro без скидки 3500 руб. со скидкой 2200 руб.
Модуль проверка позиций версия Standart без скидки 1500 со скидкой 1200 руб.
Скидки будут действовать до 7 января 2015 года включительно!
Поддержка старой версии
На протяжении этого года мы безвозмездно помогали всем нашим клиентам в переходе на новую версию.
С 2015 года поддержка старой версии будет полностью прекращена, в том числе актуализация парсеров и техническая поддержка. Мы не продаем старую версию системы уже более 10 месяцев, также мы не продаем подписку на обновление системы.
Но мы не собираемся бросать клиентов и именно поэтому мы предлагаем бесплатную помощь в переносе данных из старой версии, для тех, кто имеет подписку на обновления.
Оставляйте заявки в тикетах, перенос данный будет осуществляться с 12 января в порядке очереди подачи заявки. Заявки на бесплатный перенос данных будет приниматься до конца января. Напомним, что существует специальный скрипт для самостоятельного переноса данных со старой версии и в 95% случаев данные переносятся корректно без нашего вмешательства.
Успейте воспользоваться! В дальнейшем перенос данных со старой версии в новую, будет осуществляться на платной основе.
Планы на будущее
Планы грандиозные! В первую очередь, мы займемся актуализацией документации и описания функционала модулей. Все существующие модули будут постоянно дорабатываться и интегрироваться между собой!
В данный момент на разных стадиях находятся еще несколько модулей, надеемся, что в будущем году они будут реализованы и станут доступны для пользователей.
Полным ходом идет локализации системы на английский язык. Также мы планируем перевести систему еще на несколько европейских и не очень языков.
Если вы являетесь носителем любого языка отличным от русского и у вас есть желание увидеть site-control.ru на нём, то свяжитесь с нами! Со своей стороны мы обещаем бесплатные версии всех наших продуктов и максимально удобный процесс локализации системы.
График работы в праздничные дни
31.12.2014 — 06.01.2015 никакая техническая поддержка не будет осуществляться.
07.01.2015 — 11.01.2015 ответы на общие вопросы, без решения технических проблем.
С 12.01.20 техническая поддержка будет осуществляться в обычном режиме.
Спасибо за интересный год, спасибо, что вы остаётесь с нами!
Demo версию можно посмотреть здесь http://demo.site-control.ru
Важно, на сервере находится не самая последняя demo версия.
Скачать новую версию можно здесь: скачать
Партнерская программа — 20% с продажи нового модуля!
из скрипта я отправил такой запрос тысячи раз в мою локальную базу данных:
update some_table set some_column = some_value
Я забыл добавить часть where, поэтому один и тот же столбец был установлен на одно и то же значение для всех строк в таблице, и это было сделано тысячи раз, и столбец был проиндексирован, поэтому соответствующий индекс, вероятно, обновлялся слишком много раз.
Я заметил, что что-то было не так, потому что это заняло слишком много времени, поэтому я убил сценарий. С тех пор я даже перезагрузил свой компьютер, но что-то застряло в таблице, потому что простые запросы занимают очень много времени, и когда я пытаюсь сбросить соответствующий индекс, он терпит неудачу с этим сообщением:
Lock wait timeout exceeded; try restarting transaction
это таблица innodb, поэтому застрявшая транзакция, вероятно, неявна. Как я могу исправить эту таблицу и удалить застрявшую транзакцию из нее?
1416
12
12 ответов:
у меня была аналогичная проблема, и я решил ее, проверив потоки, которые работают.
Чтобы увидеть запущенные потоки, используйте следующую команду в интерфейсе командной строки mysql:SHOW PROCESSLIST;
Он также может быть отправлен из phpMyAdmin, если у вас нет доступа к интерфейсу командной строки mysql.
Это отобразит список потоков с соответствующими идентификаторами и временем выполнения, так что вы можете убить потоки, которые занимают слишком много времени для выполнения.
В phpMyAdmin у вас будет кнопка для остановка потоков с помощью KILL, если вы используете интерфейс командной строки, просто используйте команду KILL, за которой следует идентификатор потока, как в следующем примере:KILL 115;
это приведет к прекращению соединения для соответствующего потока.
вы можете проверить текущие транзакции с
SELECT * FROM `information_schema`.`innodb_trx` ORDER BY `trx_started`
ваша транзакция должна быть одной из первых, потому что она самая старая в списке. Теперь просто возьмите значение из
trx_mysql_thread_id
и отправить его в :KILL 1234;
если вы не уверены, какая транзакция ваша, повторите первый запрос очень часто и посмотрите, какие транзакции сохраняются.
Это начало происходить со мной, когда мой размер базы данных вырос и я делал много операций на нем.
правда, есть, вероятно, какой-то способ оптимизировать либо ваши запросы, либо вашу БД, но попробуйте эти 2 запроса для работы вокруг исправления.
выполнить это:
SET GLOBAL innodb_lock_wait_timeout = 5000;
а потом этот:
SET innodb_lock_wait_timeout = 5000;
проверьте состояние InnoDB для замков
SHOW ENGINE InnoDB STATUS;
Проверьте MySQL open tables
SHOW OPEN TABLES WHERE In_use > 0;
Проверьте отложенные транзакции InnoDB
SELECT * FROM `information_schema`.`innodb_trx` ORDER BY `trx_started`;
проверить зависимость блокировки — что блокирует что
SELECT * FROM `information_schema`.`innodb_locks`;
после изучения результатов выше, вы должны быть в состоянии увидеть, что блокирует то, что.
основная причина проблемы может быть в вашем коде тоже-пожалуйста, проверьте связанные функции, особенно для аннотаций, если вы используете JPA, как Hibernate.
например, как описано здесь, неправильное использование следующей аннотации может привести к блокировкам в базе данных:
@Transactional(propagation = Propagation.REQUIRES_NEW)
перезагрузите MySQL, он отлично работает.
но будьте осторожны, что если такой запрос застрял, есть проблема где-то:
- в вашем запросе (неуместный символ, декартово произведение, …)
- очень много записей для редактирования
- сложные соединения или тесты (MD5, подстроки,
LIKE %...%
и т. д.)- проблема структуры данных
- модель внешнего ключа (блокировка цепи/петли)
- misindexed данные
как сказал @ syedrakib, это работает, но это не долговечное решение для производства.
осторожно: выполнение перезапуска может повлиять на ваши данные с несогласованным состоянием.
кроме того, вы можете проверить, как MySQL обрабатывает ваш запрос с ключевым словом EXPLAIN и посмотреть, возможно ли что-то ускорить запрос (индексы, сложные тесты,…).
когда вы устанавливаете соединение для транзакции, вы получаете блокировку перед выполнением транзакции. Если не удается приобрести замок, то вы пытаетесь на некоторое время. Если блокировка по-прежнему недоступна, то ошибка ожидания блокировки превышена. Почему вы не сможете получить блокировку, так это то, что вы не закрываете соединение. Таким образом, когда вы пытаетесь получить блокировку во второй раз, вы не сможете получить блокировку, поскольку ваше предыдущее соединение все еще открыто и удерживает блокировку.
решение: закройте соединение или setAutoCommit (true) [в соответствии с вашим дизайном], чтобы освободить блокировку.
Goto процессы в mysql.
Так что можете видеть, что задача все еще работает.
убейте конкретный процесс или дождитесь завершения процесса.
У меня была эта проблема при попытке удалить определенную группу записей (используя MS Access 2007 с подключением ODBC к MySQL на веб-сервере). Обычно я удаляю определенные записи из MySQL, а затем заменяю их обновленными записями (каскадное удаление нескольких связанных записей, это упрощает удаление всех связанных записей для удаления одной записи).
Я попытался выполнить операции, доступные в phpMyAdmin для таблицы (оптимизация, флеш и т. д.), Но у меня возникла необходимость разрешение на перезагрузку ошибка, когда я пытался сбросить. Поскольку моя база данных находится на веб-сервере, я не смог перезапустить базу данных. Восстановление из резервной копии не было.
Я попытался запустить запрос на удаление для этой группы записей в cPanel mySQL access в интернете. Получил такое же сообщение об ошибке.
мое решение: я использовал бесплатный браузер запросов MySQL Sun (Oracle) (который я ранее установил на своем компьютере) и запустил там запрос на удаление. Это сработало сразу, проблема решена. Я затем удалось еще раз выполнить функцию с помощью скрипта доступа, используя соединение ODBC Access to MySQL.
Я столкнулся с той же проблемой с «обновлением»-заявление. Мое решение было просто запустить через операции, доступные в phpmyadmin в таблице. Я оптимизировал, смыл и дефрагментировал таблицу (не в том порядке). Не нужно сбрасывать таблицу и восстанавливать ее из резервной копии для меня.
У меня была та же проблема. Я думаю, что это была тупиковая проблема с SQL. Вы можете просто принудительно закрыть процесс SQL из Диспетчера задач. Если это не исправить, просто перезагрузите компьютер. Вам не нужно удалять таблицу и перезагружать данные.
исправил,
Убедитесь, что в запросе нет несоответствующего типа данных insert.
У меня была проблема, когда я пытался «данные агента браузера пользователя» в «VARCHAR(255)» и имел проблему с этой блокировкой, однако, когда я изменил ее на «TEXT(255)», он исправил ее.
Так что скорее всего это неправильное совпадение типа данных
Я решил проблему, сбросив таблицу и восстановив ее из резервной копии.
Rowlock timeout errors can occur in an application because of contention with transactions or uncommitted transactions. Refer to the following sections to resolve lock wait timeout errors.
Contention with Transactions
Updates and deletes in SingleStore are row locking operations. If a row is currently locked by query q1
running in transaction t1
, a second query q2
in transaction t2
that operates on the same row will be blocked until q1
completes.
Updates and deletes on a columnstore table lock the entire table if the count of rows being updated is greater than columnstore_disk_insert_threshold
. See Locking in Columnstores for more information.
The “Lock wait timeout exceeded; try restarting transaction” error will occur when a query cannot proceed because it is blocked by a rowlock.
Deadlock between Transactions
Typically, a deadlock happens when two or more transactions are writing to the same rows, but in a different order. For example, consider two concurrently running queries q1
and q2
in different transactions, where both q1
and q2
want to write to rows r1
and r2
. If the query q1
wants to write to rows r1
and then r2
, but the query q2
wants to write to row r2
first and then r1
, they will deadlock.
A single transaction that runs multiple statements should not deadlock itself, because queries are executed in the order they are defined.
Solutions
-
To resolve contention when two or more transactions are writing to the same row (in the same order), add indexes on the columns being updated. Adding indexes to the columns ensures that the row locks are taken in the same order that the write statements are specified in each transaction. Note: This solution will not resolve a deadlock (defined previously).
For example, if the following query generates a lock wait timeout exceeded error:
DELETE FROM bucket WHERE meta_uid_id = ?
Add an index on meta_uid_id.
Consider the following
INSERT ... ON DUPLICATE KEY UPDATE
statement:INSERT INTO allotments (DevID, DevName, Orders) SELECT * FROM deprAllot ON DUPLICATE KEY UPDATE DevID = VALUES(DevID), Orders = VALUES (Orders);
To reduce the chance of a lock wait timeout exceeded error, add individual indexes to the
DevID
andOrders
columns. -
You can decrease the
lock_wait_timeout
value to more quickly fail a query that is blocked by a lock. -
To resolve a deadlock (defined above) you should change the flow of your application logic execute queries that write to the same rows in the same order.
-
You can also disable
multistatement_transactions
.Note: Disabling
multistatement_transactions
to prevent deadlocks is not recommended because it can lead to data loss or other serious issues.show variables like '%multistatement_transactions%';
Shows whether multistatement transactions are on, and
SET GLOBAL multistatement_transactions = off;
turns it off.
Disabling
multistatement_transactions
turns off cross-node transactions for write queries. Hence, write queries that span across multiple nodes, commit locally when the processing finishes on the node.To persist disabling multi-statement transactions through node restart, use the update-config command to update the
memsql.cnf
file as shown below:SingleStore Tools
sdb-admin update-config --key multistatement_transactions --value off --set-global --all
By turning off multi-statement transactions, write queries that touch multiple nodes will commit locally when the processing finishes on the node. For example, if node 1 hits a duplicate key error, node 2 will still commit its transaction.
Uncommitted Transactions
Open transactions hold the locks on rows affected by the transaction until they are committed or rolled back, and any other write query modifying the same rows has to wait for the open transaction to release the locks. If the query has to wait for more than the lock_wait_timeout
(default 60 seconds), it fails. This happens most often when the open transaction is idle and unnecessarily holding the locks.
Solutions
-
To resolve the issue, identify the idle transaction and kill its connection.
-
To prevent the issue from recurring, ensure that all the transactions are committed or rolled back.
Resolving the current locking issue
If a query has failed because it waited long enough to exceed the lock_wait_timeout
, identify the transaction that is causing the timeout, and kill its connection. Killing the connection rolls back the uncommitted writes of the open transaction. For example, a write operation is performed in the following transaction, but it is not committed.
START TRANSACTION; UPDATE cust SET ORDERS = (ORDERS + 1) WHERE ID > 7680;
In another connection start a transaction, and run a query that tries to update the same set of rows as the transaction above.
START TRANSACTION; UPDATE cust SET ORDER_DATE = DATE_ADD(ORDER_DATE, INTERVAL 1 DAY) WHERE ID > 7680; **** ERROR 1205 (HY000): Leaf Error (192.168.3.152:3307): Lock wait timeout exceeded; try restarting transaction. Lock owned by connection id 76, query `open idle transaction`
To get the list of all the running transactions, query the INFORMATION_SCHEMA.PROCESSLIST
table. This management view table contains the processlist information for all nodes in the workspace, and you can join this table with the INFORMATION_SCHEMA.MV_NODES
table to identify the nodes on which each process is running.
SELECT TYPE, IP_ADDR, PORT, mvp.ID, USER, HOST, COMMAND, TIME, TRANSACTION_STATE, ROW_LOCKS_HELD FROM INFORMATION_SCHEMA.MV_PROCESSLIST mvp JOIN INFORMATION_SCHEMA.MV_NODES mvn ON mvp.NODE_ID = mvn.ID WHERE TRANSACTION_STATE = "open" AND COMMAND = "Sleep" AND TIME > 60 ORDER BY TYPE; **** +------+---------------+------+-----+-------------+---------------------+---------+------+-------------------+----------------+ | TYPE | IP_ADDR | PORT | ID | USER | HOST | COMMAND | TIME | TRANSACTION_STATE | ROW_LOCKS_HELD | +------+---------------+------+-----+-------------+---------------------+---------+------+-------------------+----------------+ | CA | 192.168.1.146 | 3306 | 143 | root | localhost:58322 | Sleep | 385 | open | 0 | | LEAF | 192.168.3.152 | 3307 | 76 | distributed | 192.168.1.146:9555 | Sleep | 385 | open | 5168 | | LEAF | 192.168.0.24 | 3307 | 125 | distributed | 192.168.1.146:7371 | Sleep | 385 | open | 5047 | | LEAF | 192.168.0.24 | 3307 | 104 | distributed | 192.168.1.146:60874 | Sleep | 385 | open | 5001 | | LEAF | 192.168.0.24 | 3307 | 115 | distributed | 192.168.1.146:63178 | Sleep | 385 | open | 5044 | | LEAF | 192.168.3.242 | 3307 | 55 | distributed | 192.168.1.146:10118 | Sleep | 385 | open | 5129 | | LEAF | 192.168.3.242 | 3307 | 77 | distributed | 192.168.1.146:21382 | Sleep | 385 | open | 5168 | | LEAF | 192.168.3.242 | 3307 | 81 | distributed | 192.168.1.146:26758 | Sleep | 385 | open | 4998 | | LEAF | 192.168.3.242 | 3307 | 122 | distributed | 192.168.1.146:55942 | Sleep | 385 | open | 5021 | | LEAF | 192.168.0.24 | 3307 | 75 | distributed | 192.168.1.146:40650 | Sleep | 385 | open | 5015 | | LEAF | 192.168.1.100 | 3307 | 131 | distributed | 192.168.1.146:23998 | Sleep | 385 | open | 5013 | | LEAF | 192.168.3.152 | 3307 | 78 | distributed | 192.168.1.146:11603 | Sleep | 385 | open | 5124 | | LEAF | 192.168.3.152 | 3307 | 83 | distributed | 192.168.1.146:21331 | Sleep | 385 | open | 5018 | | LEAF | 192.168.3.152 | 3307 | 120 | distributed | 192.168.1.146:39763 | Sleep | 385 | open | 5092 | | LEAF | 192.168.1.100 | 3307 | 79 | distributed | 192.168.1.146:1726 | Sleep | 385 | open | 5090 | | LEAF | 192.168.1.100 | 3307 | 82 | distributed | 192.168.1.146:6078 | Sleep | 385 | open | 5065 | | LEAF | 192.168.1.100 | 3307 | 114 | distributed | 192.168.1.146:21438 | Sleep | 385 | open | 5160 | | MA | 192.168.0.231 | 3306 | 490 | root | localhost:32737 | Sleep | 73 | open | 0 | +------+---------------+------+-----+-------------+---------------------+---------+------+-------------------+----------------+
In the result, each aggregator and each partition on each leaf has one idle open transaction which is holding row locks. The locks are only held on the leaves, because that is where the data is stored. Look for an aggregator process with the same run time as the leaf processes that are holding locks. In the result above, it is the process with connection ID 143
, which is running on the child aggregator on host 192.168.1.146:3306
. To resolve the current issue, connect to this aggregator and kill the connection with ID 143
.
KILL CONNECTION 143;
Alternatively, you can kill the open connections that have been idle for more than lock_wait_timeout
.
Note: Although the error message indicates that the lock is owned by the connection with ID 76
, it is not the connection that needs to be killed. It is the connection for one of the distributed leaf processes, which holds the lock that our query was waiting on. Instead, we need to kill the connection for the aggregator process, which will roll back the entire transaction.
The original connection on the child aggregator that was updating ORDERS
is now closed, and the transaction is rolled back. If you try to use that session again, it automatically re-establishes a new connection with a new ID.
SELECT COUNT(*) FROM cust; **** ERROR 2013 (HY000): Lost connection to MySQL server during query
SELECT COUNT(*) FROM cust; **** ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 160 Current database: db1 +----------+ | COUNT(*) | +----------+ | 390955 | +----------+
Preventing the Issue from Recurring
To prevent the issue from recurring, inspect the application code and ensure that all the transactions are either committed or rolled back, including the transactions in exception handling. Additionally, all manually run transactions must be committed or rolled back as well.
A common cause of this error is if the transaction is executed as part of a stored procedure, but exception handling causes the final commit to get skipped. To prevent this issue, add rollbacks for the transaction in the exception handling section of the stored procedure. For more information, see Transactions in Stored Procedures.
The impact of this error can be mitigated by setting a session timeout for the client, in order to automatically kill the idle transactions. When a client ends a session, the database rolls back the uncommitted transactions and closes the connection on its end. If the session timeout value is set lower than the lock wait timeout (default 60 seconds), then idle connections will not cause lock wait timeouts to be breached.
Note: Setting a query timeout in Resource Governance will not affect idle transactions. The query timeout limit only applies to executing queries.
@brandonkelly that makes sense. Here is batch from queue.log when I tried to force recreating the error by manually saving the entry a couple of times. This was done right after I restarted the server, so the first event you see is the first queued job after the restart, and the last event is from right after I triggered the server restart through Digital Ocean.
2021-10-02 13:42:20 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292891] Updating search indexes (attempt: 1, pid: 1628) - Started
2021-10-02 13:42:20 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292891] Updating search indexes (attempt: 1, pid: 1628) - Done (time: 0.056s)
2021-10-02 13:42:20 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292894] Updating search indexes (attempt: 1, pid: 1628) - Started
2021-10-02 13:42:20 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292894] Updating search indexes (attempt: 1, pid: 1628) - Done (time: 0.050s)
2021-10-02 13:42:21 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292893] Pruning extra revisions (attempt: 1, pid: 1628) - Started
2021-10-02 13:42:22 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292893] Pruning extra revisions (attempt: 1, pid: 1628) - Done (time: 1.023s)
2021-10-02 13:42:48 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292896] Updating element slugs and URIs (attempt: 1, pid: 1665) - Started
2021-10-02 13:42:48 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292896] Updating element slugs and URIs (attempt: 1, pid: 1665) - Done (time: 0.039s)
2021-10-02 13:42:48 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292895] Updating search indexes (attempt: 1, pid: 1665) - Started
2021-10-02 13:42:48 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292895] Updating search indexes (attempt: 1, pid: 1665) - Done (time: 0.052s)
2021-10-02 13:42:48 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292898] Updating search indexes (attempt: 1, pid: 1665) - Started
2021-10-02 13:42:48 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292898] Updating search indexes (attempt: 1, pid: 1665) - Done (time: 0.048s)
2021-10-02 13:42:48 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292897] Pruning extra revisions (attempt: 1, pid: 1665) - Started
2021-10-02 13:42:49 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292897] Pruning extra revisions (attempt: 1, pid: 1665) - Done (time: 0.788s)
2021-10-02 13:43:06 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292900] Updating element slugs and URIs (attempt: 1, pid: 1727) - Started
2021-10-02 13:43:07 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292900] Updating element slugs and URIs (attempt: 1, pid: 1727) - Done (time: 0.037s)
2021-10-02 13:43:07 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292899] Updating search indexes (attempt: 1, pid: 1727) - Started
2021-10-02 13:43:07 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292899] Updating search indexes (attempt: 1, pid: 1727) - Done (time: 0.046s)
2021-10-02 13:43:07 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292902] Updating search indexes (attempt: 1, pid: 1727) - Started
2021-10-02 13:43:07 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292902] Updating search indexes (attempt: 1, pid: 1727) - Done (time: 0.049s)
2021-10-02 13:43:07 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292901] Pruning extra revisions (attempt: 1, pid: 1727) - Started
2021-10-02 13:43:08 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292901] Pruning extra revisions (attempt: 1, pid: 1727) - Done (time: 0.654s)
2021-10-02 13:43:24 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292904] Updating element slugs and URIs (attempt: 1, pid: 1755) - Started
2021-10-02 13:43:24 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292904] Updating element slugs and URIs (attempt: 1, pid: 1755) - Done (time: 0.036s)
2021-10-02 13:43:24 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292903] Updating search indexes (attempt: 1, pid: 1755) - Started
2021-10-02 13:43:24 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292903] Updating search indexes (attempt: 1, pid: 1755) - Done (time: 0.048s)
2021-10-02 13:43:24 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292906] Updating search indexes (attempt: 1, pid: 1755) - Started
2021-10-02 13:43:24 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292906] Updating search indexes (attempt: 1, pid: 1755) - Done (time: 0.048s)
2021-10-02 13:43:25 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292905] Pruning extra revisions (attempt: 1, pid: 1755) - Started
2021-10-02 13:43:25 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292905] Pruning extra revisions (attempt: 1, pid: 1755) - Done (time: 0.749s)
2021-10-02 13:43:43 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292908] Updating element slugs and URIs (attempt: 1, pid: 1784) - Started
2021-10-02 13:43:43 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292908] Updating element slugs and URIs (attempt: 1, pid: 1784) - Done (time: 0.040s)
2021-10-02 13:43:43 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292907] Updating search indexes (attempt: 1, pid: 1784) - Started
2021-10-02 13:43:43 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292907] Updating search indexes (attempt: 1, pid: 1784) - Done (time: 0.049s)
2021-10-02 13:43:43 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292910] Updating search indexes (attempt: 1, pid: 1784) - Started
2021-10-02 13:43:43 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292910] Updating search indexes (attempt: 1, pid: 1784) - Done (time: 0.050s)
2021-10-02 13:43:44 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292909] Pruning extra revisions (attempt: 1, pid: 1784) - Started
2021-10-02 13:43:44 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292909] Pruning extra revisions (attempt: 1, pid: 1784) - Done (time: 0.780s)
2021-10-02 13:44:29 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292912] Updating element slugs and URIs (attempt: 1, pid: 1894) - Started
2021-10-02 13:44:30 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292912] Updating element slugs and URIs (attempt: 1, pid: 1894) - Done (time: 0.440s)
2021-10-02 13:44:30 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292916] Updating element slugs and URIs (attempt: 1, pid: 1897) - Started
2021-10-02 13:44:30 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292916] Updating element slugs and URIs (attempt: 1, pid: 1897) - Done (time: 0.091s)
2021-10-02 13:44:30 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292911] Updating search indexes (attempt: 1, pid: 1894) - Started
2021-10-02 13:44:30 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292911] Updating search indexes (attempt: 1, pid: 1894) - Done (time: 0.114s)
2021-10-02 13:44:30 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292915] Updating search indexes (attempt: 1, pid: 1894) - Started
2021-10-02 13:44:31 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292915] Updating search indexes (attempt: 1, pid: 1894) - Done (time: 0.204s)
2021-10-02 13:44:30 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292914] Updating search indexes (attempt: 1, pid: 1897) - Started
2021-10-02 13:44:31 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292914] Updating search indexes (attempt: 1, pid: 1897) - Done (time: 0.351s)
2021-10-02 13:44:31 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292918] Updating search indexes (attempt: 1, pid: 1894) - Started
2021-10-02 13:44:31 [-][-][-][info][craftqueueQueueLogBehavior::afterExec] [292918] Updating search indexes (attempt: 1, pid: 1894) - Done (time: 0.105s)
2021-10-02 13:44:31 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292913] Pruning extra revisions (attempt: 1, pid: 1897) - Started
2021-10-02 13:45:24 [-][-][-][error][craftqueueQueueLogBehavior::afterError] [292913] Pruning extra revisions (attempt: 1, pid: 1897) - Error (time: 53.096s): SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
The SQL being executed was: DELETE FROM `craft_structureelements` WHERE ((`lft` >= 927) AND (`rgt` <= 928)) AND (`root`=1)
2021-10-02 13:44:32 [-][-][-][info][craftqueueQueueLogBehavior::beforeExec] [292917] Pruning extra revisions (attempt: 1, pid: 1894) - Started
2021-10-02 13:47:45 [-][-][-][error][craftqueueQueueLogBehavior::afterError] [292917] Pruning extra revisions (attempt: 1, pid: 1894) - Error (time: 193.661s): SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
The only error in phperrors.log close to this timestamp is at [02-Oct-2021 13:47:45 Europe/Oslo]
which is reelated to the shutdown: «Communication link failure: 1053 Server shutdown in progress».
I was watching the queue in the admin when the above was happening and took screenshot of the 2 «Pruning extra revisions» jobs that «got stuck». The images are in the order they were in the queue overview in the admin:
And the second:
I’m not sure if it matters, but notice that the 2 jobs are related to the same SourceID and that the one with the ID 292913 that was pushed first failed right after the one with the ID 292917 was pushed to the queue. I believe it was right after the second one was pushed to the queue the server started to run slow.