Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Исправить ошибки MySQL


samironov89

Recommended Posts

Добрый день!

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

Сейчас перестала работать корзина, и невозможно редактировать заказы в админке.

 

Текст ошибки:

Fatal error: Uncaught exception 'Exception' with message 'Error: MySQL server has gone away<br />Error No: 2006<br />SELECT COUNT() AS total FROM `oc_order` WHERE (order_status_id = '21' OR order_status_id = '12' OR order_status_id = '2' OR order_status_id = '15' OR order_status_id = '9' OR order_status_id = '19' OR order_status_id = '7' OR order_status_id = '1' OR order_status_id = '8' OR order_status_id = '26' OR order_status_id = '22' OR order_status_id = '18' OR order_status_id = '16' OR order_status_id = '17' OR order_status_id = '20')' in /home/u383099728/domains/vseskidki.96.lt/public_html/system/library/db/mysqli.php:40 Stack trace: #0 /home/u383099728/domains/vseskidki.96.lt/public_html/system/library/db.php(16): DB\MySQLi->query('SELECT COUNT()...', Array) #1 /home/u383099728/domains/vseskidki.96.lt/public_html/system/storage/modification/admin/model/sale/order.php(331): DB->query('SELECT COUNT(*)...') #2 [internal function]: ModelSaleOrder->getTotalOrders(Array) #3 /home/u383099728/domains/vseskidki.96.lt/pub in /home/u383099728/domains/vseskidki.96.lt/public_html/system/library/db/mysqli.php on line 40

 

Очень нужна помощь знающего человека.

Надіслати
Поділитися на інших сайтах


1 час назад, samironov89 сказал:

Добрый день!

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

Сейчас перестала работать корзина, и невозможно редактировать заказы в админке.

 

Текст ошибки:

Fatal error: Uncaught exception 'Exception' with message 'Error: MySQL server has gone away<br />Error No: 2006<br />SELECT COUNT() AS total FROM `oc_order` WHERE (order_status_id = '21' OR order_status_id = '12' OR order_status_id = '2' OR order_status_id = '15' OR order_status_id = '9' OR order_status_id = '19' OR order_status_id = '7' OR order_status_id = '1' OR order_status_id = '8' OR order_status_id = '26' OR order_status_id = '22' OR order_status_id = '18' OR order_status_id = '16' OR order_status_id = '17' OR order_status_id = '20')' in /home/u383099728/domains/vseskidki.96.lt/public_html/system/library/db/mysqli.php:40 Stack trace: #0 /home/u383099728/domains/vseskidki.96.lt/public_html/system/library/db.php(16): DB\MySQLi->query('SELECT COUNT()...', Array) #1 /home/u383099728/domains/vseskidki.96.lt/public_html/system/storage/modification/admin/model/sale/order.php(331): DB->query('SELECT COUNT(*)...') #2 [internal function]: ModelSaleOrder->getTotalOrders(Array) #3 /home/u383099728/domains/vseskidki.96.lt/pub in /home/u383099728/domains/vseskidki.96.lt/public_html/system/library/db/mysqli.php on line 40

 

Очень нужна помощь знающего человека.

Ваш сервер базу данных падает. Напишите в поддержку хостинга, пусть они решают.

Надіслати
Поділитися на інших сайтах

27 minutes ago, Rassol2 said:

Ваш сервер базу данных падает.

нет. у gone away другие причины: как правило, это истечение одного из таймаутов или ограничение по размеру пакета.

 

2 hours ago, samironov89 said:

MySQL server has gone away<br />Error No: 2006<br />SELECT COUNT() AS total FROM `oc_order` WHERE (order_status_id = '21' OR order_status_id = '12' OR order_status_id = '2' OR order_status_id = '15' OR order_status_id = '9' OR order_status_id = '19' OR order_status_id = '7' OR order_status_id = '1' OR order_status_id = '8' OR order_status_id = '26' OR order_status_id = '22' OR order_status_id = '18' OR order_status_id = '16' OR order_status_id = '17' OR order_status_id = '20')'

судя по запросу, тут какая-то попытка посчитать количество заказов с тем или иным статусом. и у Вас просто отсутствуют индексы в БД, из-за чего запрос выполняется слишком долго.

 

в пхпмайадмине убедитесь что присутствует индекс в таблице oc_order для поля order_status_id

вот тут можно посмотреть и создать, по необходимости

Spoiler

283611671_.thumb.png.2bc0cdbbbe73eda6330ed178031b01f9.png

ЗЫ: запрос к базе непутевый. множественные OR работают и оптимизируются плохо. заменить их на union - было бы намного быстрее... впрочем, и без этого, добавление индекса должно решить проблему

Надіслати
Поділитися на інших сайтах

Сервевр падает - не потому что запрос выполняется долго, а потому что всей системенне хватает памяти и watchdog прибиввает процесс mysql.
А памяти может не хватать - не только потому что где-то запросы поодвисли, а по еще сотне неявных причин!

Надіслати
Поділитися на інших сайтах


 я б сдела запос так SELECT COUNT(*) AS total FROM `oc_order` WHERE order_status_id IN(1,2,3 и пр);

 

вот пример запроса из модели sale.php 

$query = $this->db->query("SELECT COUNT(*) AS total, date_added FROM `" . DB_PREFIX . "order` WHERE order_status_id IN(" . implode(",", $implode) . ") AND DATE(date_added) >= DATE('" . $this->db->escape(date('Y-m-d', $date_start)) . "') GROUP BY DAYNAME(date_added)");

 

а судя из ошибки, не указан вариант подсчета - нужно или задать *, то есть считать все записи, или, например  COUNT(order_id)

Змінено користувачем esculapra
Надіслати
Поділитися на інших сайтах

 

44 minutes ago, Yoda said:

не потому что запрос выполняется долго, а потому что всей системенне хватает памяти и watchdog прибиввает процесс mysql

1 hour ago, Rassol2 said:

/home/u383099728/domains/vseskidki.96.lt/public_html/

вряд ли. это же шаред.

едва ли OOM killer там грохнет демона субд - все пользователи ноды бы заметили

Надіслати
Поділитися на інших сайтах

14 минут назад, 100napb сказал:

 

вряд ли. это же шаред.

едва ли OOM killer там грохнет демона субд - все пользователи ноды бы заметили

 

Ну начнем с того, что это был Hostineger (Sick!).

И там 36к товаров)))

И генерация страниц была 5-7 секунд, поэтому отчетом в админке все добивалось в хлам!

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.