Перейти к содержимому


Фотография
- - - - -

timestamp / mysql-slow-queries / что делать БД падает :)

mysql-slow-queries

  • Закрытая тема Тема закрыта
Сообщений в теме: 20

#1 CB9TOIIIA

CB9TOIIIA

Отправлено 21 October 2014 - 10:20

Все доброго дня :)

 

Дано : Joomla: 3.3.6     JBZoo: 2.1.4 Pro     Zoo: 3.1.6    

 

Посещаемость: 30 000 и просмотры до 100 000.

Сервер XServer: CPU: Core i7 4770 4x3.4GHz; RAM: 16Gb; HDD: 2x 1Tb RE, 1x 60 Gb ssd

 

Spoiler

 

Сайт периодически падает (сапорт отвечает, сервер генерирует в какой-то момент тучу запросов и ложится) в логе mysql-slow-queries.log : 

 

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


Сообщение отредактировал CB9TOIIIA: 07 May 2015 - 07:24

  • 0

#2 SmetDenis

SmetDenis

Отправлено 21 October 2014 - 11:02

Я бы отключил учет хитов (количество просмотров материалов).
Ибо на каждый хит идет запись в базу, а запись - это очень дорогая операция.
sco_200x0.png а их у вас 100 000 в сутки
+ она не дает ничего сделать с таблицей (например чтение), пока запись не закончится.

administrator\components\com_zoo\tables\item.php
o5n_200x0.png

Если не нужно учитывать даты начала и публикации, то их тоже можно отключить
http://forum.jbzoo.c...y-jbzoo-dlya-r/

Можно (и нужно) попробовать самые большие таблицы перевести в InnoDB, чтобы не было проблем с блокировками при записи.
Или вообще все таблицы. Но сервер к этому должен быть готов, ибо квота есть общая на все таблицы InnoDB. Обычно 2Гб

Если аккуратно, то можно добавить return false сюда
media\zoo\applications\jbuniversal\framework\helpers\jbtables.php
gz6_200x0.png
НО(!) но ручная переиндексация из админки сломается. С другой стороны вы её там используете редко.
не уверен что отключение createTable даст большой производительности
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 SmetDenis

SmetDenis

Отправлено 21 October 2014 - 11:14

А каким образом контент добавляется на сайт?
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#4 CB9TOIIIA

CB9TOIIIA

Отправлено 21 October 2014 - 11:17

Через админку редакторы.
 
Вот так с хитами?

  1. public function hit($object) {
  2.  
  3. //denis
  4. return true;
  5. // get database
  6. $db = $this->database;
  7. $key = $this->key;
  8.  
  9. // increment hits
  10. if ($object->$key) {
  11. $query = "UPDATE ".$this->name
  12. ." SET hits = (hits + 1)"
  13. ." WHERE $key = ".(int) $object->$key;
  14. $db->query($query);
  15. $object->hits++;
  16. return true;
  17. }
  18.  
  19. return false;
  20. }

или просто?

  1. public function hit($object) {
  2.  
  3. return true;
  4.  
  5. }

Сообщение отредактировал CB9TOIIIA: 21 October 2014 - 11:22

  • 0

#5 SmetDenis

SmetDenis

Отправлено 21 October 2014 - 11:26

Первый вариант позволит быстро откатится.
В остальном варианты эквивалентны.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#6 CB9TOIIIA

CB9TOIIIA

Отправлено 21 October 2014 - 11:44

Можете описать: Если вам не важны данные о начале и окончании публикации материала

 

Мне важен порядок на сайте и дата в материале, окончание публикации - никогда. Мне это не трогать?


  • 0

#7 SmetDenis

SmetDenis

Отправлено 21 October 2014 - 12:24

У материала есть разные даты
- дата создания
- последней модификации
- дата начала публикации
- дата окончания публикации

Последние 2 редко используются, но при больших объемах добавляют нагрузку
0ns_200x0.png
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#8 CB9TOIIIA

CB9TOIIIA

Отправлено 22 October 2014 - 05:25

Обновил ZOO и JBZOO :)

 

Изменить запрос необходимо для категории в самом Zoo и в JBZoo
 
1. Файл - administrator\components\com_zoo\tables\item.php . Метод getByCategory.

Изменился сам файл.

  1. /*
  2. Function: getByCategory
  3. Method to retrieve all items of a category.
  4.  
  5. Parameters:
  6. $category_id - Category id(s)
  7.  
  8. Returns:
  9. Array - Array of items
  10. */
  11. public function getByCategory($application_id, $category_id, $published = false, $user = null, $orderby = "", $offset = 0, $limit = 0, $ignore_order_priority = false)

2. 2. Файл - media\zoo\applications\jbuniversal\framework\models\jbmodel.php . Метод _getItemSelect

 

Избавляемся от кода:

  1. ->where('tItem.' . $this->app->user->getDBAccessString())
  2. ->where('(tItem.publish_up = ' . $this->_dbNull . ' OR tItem.publish_up <= ' . $this->_dbNow . ')')
  3. ->where('(tItem.publish_down = ' . $this->_dbNull . ' OR tItem.publish_down >= ' . $this->_dbNow . ')')
  4.  

А в файле: 

  1. $select = $this->_getSelect()
  2. ->select('tItem.*')
  3. ->from(ZOO_TABLE_ITEM . ' AS tItem')
  4. ->where('tItem.' . $this->app->user->getDBAccessString())
  5. ->where('tItem.state = ?', 1)
  6. ->where('(tItem.publish_up = ' . $this->_dbNull . ' OR tItem.publish_up <= ' . $this->_dbNow . ')')
  7. ->where('(tItem.publish_down = ' . $this->_dbNull . ' OR tItem.publish_down >= ' . $this->_dbNow . ')');

Как правильно поступить?)


  • 0

#9 SmetDenis

SmetDenis

Отправлено 22 October 2014 - 07:16

Приложите именно ваши файлы в сообщение, я изменю их отдам вам обратно.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#10 CB9TOIIIA

CB9TOIIIA

Отправлено 22 October 2014 - 07:49

SmetDenis сказал(а) 22 Окт 2014 - 06:16:

Приложите именно ваши файлы в сообщение, я изменю их отдам вам обратно.

Прикрепленные файлы

  • Прикрепленный файл  jbzoo-edit.zip   35.87К   99 Количество загрузок:

  • 0




Click to return to top of page in style!