[Настройка] Ускорение MD на слабых компьютерах (MYSQL)

Описание настройки чего либо

Модераторы: immortal, newz20

Ответить
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

[Настройка] Ускорение MD на слабых компьютерах (MYSQL)

Сообщение Ivan » Чт июл 06, 2017 10:22 am

Если у вас в качестве процессора на сервере используется ATOM или что то подобное то эта тема для вас.
Вставлено позже: После всех исследований оказалось что эта проблема из за того что в новых системах таблицы создаются в InnoDB. Подробнее

Как узнать справляется ли ваш сервер с системой MD?
Можно посмотреть на загрузку процессора.
В linux вам поможет команда top.
В Windows "Диспетчер приложений". Но как оказалось это не очень важный параметр для MD. И даже если показывает загрузку 20%, система всё равно будет тормозить.

А что же тогда является показателем для MD?
MD очень сильно завязана на MySQL. Хоть и оптимизировали её в последний год с использованием кешевых таблиц в памяти, всё рано от журналов никуда не деться. Журналы - это дополнительные файлы, в которые пишется информация о изменении данных в таблице. Перед их изменением. Это нужно для того чтобы если были проблемы во время изменения таблиц, сервис MySQL смог откатить и восстановить данные ваших таблиц (Надёжность, так сказать). И пока журнал не будет записан на диск, таблица не обновляется. Ну а если данных много или диск сильно занят. А журналы имеют избыточную информацию, что приводит к сильному торможению системы при частом обновлении данных в таблицах.

Как измерить нагрузку системы?
Самое простое это посмотреть загрузку системы ввода вывода.
В Linux это можно увидеть через туже команду top. В верху будут параметры "load average". В идеале они не должны превышать N (Количество ядер). Более подробно читать здесь. Также вам очень поможет утилита iotop -a -o. Она точно покажет кто виноват. И если в верху вы увидите что процесс jdb2 занимает большой процент работы (>40%) значит эта статья точно про ваш комп
В Windows можно перейти на "Производительность" или "Монитор ресурсов" (Зависит от версии Win) и посмотреть на сколько у вас загружен винчестер. Точно сказать процесс не могу, всё проверял на debian

Как с этим бороться?
Можно настроить MySQL так чтобы он не делал эти журналы или делал но в памяти, а потом сбрасывал его на диск через какое то время. Это значительно ускорит вашу систему. НО при аварии, вы потеряете эти данные. Потому рекомендую включать эту опцию, только для тех компьютеров у которые есть UPS

Вот что вам нужно добавить в конец /etc/mysql/my.cnf

Код: Выделить всё

[mysqld]
innodb_flush_log_at_trx_commit=2
После нужно перегрузить MySQL и MajorDomo. Ну или компьютер

Какой прирост получился?
У меня стоит не совсем обычная система. А сервер виртуализации ProxMox (О нём я напишу в другом посте. Если интересно). на нём крутится 10 виртуальных машин (они не виртуальные а контейнеры), 6 сайтов, 1 - MajorDomo, 1 - Samba, 1 - Nginx для форвардинга, 1 - Zabbix сервер. И всё это на обычном NetBook c Atom процессором (Почему так: Малое потребление, встроенный UPS)
До оптимизации MySQL average показывал до 4 единиц. Что является просто катастрофичным для системы.
После оптимизации я получил коэффициент 0,9 единиц. Что является удовлетворительным для работы (Но тоже не супер. Задумался о новом железе)

Итог: MajorDomo нуждается в тонкой настройке MySQL, что является не тривиальным для обычного пользователя
За это сообщение автора Ivan поблагодарили (всего 7):
itank (Чт июл 06, 2017 11:05 am) • dmw (Чт июл 06, 2017 11:23 am) • tarasfrompir (Чт июл 06, 2017 4:16 pm) • Amarok (Чт июл 06, 2017 11:59 pm) • gans (Пт мар 29, 2019 9:45 am) • antpino (Пт авг 16, 2019 8:54 am) • kolizeyalex (Пн апр 11, 2022 10:09 am)
Рейтинг: 8.14%
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Ускорение MD на слабых компьютерах (MYSQL)

Сообщение skysilver » Чт июл 06, 2017 11:06 am

Ivan писал(а):До оптимизации MySQL average показывал до 4 единиц.
Где такое смотрят?
Ivan писал(а):Вот что вам нужно добавить в конец /etc/mysql/my.cnf
innodb_flush_log_at_trx_commit=2
А оно вообще влияет на БД MJD? В ней же все таблицы MyISAM.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
itank
Сообщения: 9
Зарегистрирован: Вт мар 17, 2015 6:45 pm
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Re: Ускорение MD на слабых компьютерах (MYSQL)

Сообщение itank » Чт июл 06, 2017 11:11 am

skysilver писал(а):
Ivan писал(а):До оптимизации MySQL average показывал до 4 единиц.
Где такое смотрят?
утилита top
правый верхний угол
load average: 6,78, 4,19, 3,42
нагрузка читается как среднее за 1, 5 и 15 минут соответственно

или в утилите uptime
# uptime
11:10:01 up 22 days, 21:00, 1 user, load average: 6,54, 5,27, 4,00
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Ускорение MD на слабых компьютерах (MYSQL)

Сообщение skysilver » Чт июл 06, 2017 11:23 am

itank писал(а):утилита top
правый верхний угол
load average: 6,78, 4,19, 3,42
А, понятно. Я думал, есть какая-то утилита именно по загрузке MySQL.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Ускорение MD на слабых компьютерах (MYSQL)

Сообщение Ivan » Чт июл 06, 2017 12:24 pm

skysilver писал(а):
Ivan писал(а):Вот что вам нужно добавить в конец /etc/mysql/my.cnf
innodb_flush_log_at_trx_commit=2
А оно вообще влияет на БД MJD? В ней же все таблицы MyISAM.
Вот как раз сейчас разбираюсь. Я ставил систему 4 года назад, и до сих пор накатывал просто обновления. Похоже уже давно всё поменялось.
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Ускорение MD на слабых компьютерах (MYSQL)

Сообщение tarasfrompir » Чт июл 06, 2017 4:03 pm

В помощь к описанию - АФФтору респект
СпойлерПоказать
Три варианта значений

innodb_flush_log_at_trx_commit = 1

Значение "1" означает, что любая завершенная транзакция будет синхронно сбрасывать лог на диск. Это вариант по-умолчанию, он является самым надежным с точки зрения сохранности данных, но самым медленным по скорости работы.

innodb_flush_log_at_trx_commit = 2

Значение "2" делает то же самое, только сбрасывает лог не на диск, а в кеш операционной системы (т.е. не происходит flush после каждой операции). Это значение подойдет в большинстве случаев, т.к. не выполняет дорогой операции записи после каждой транзакции. При этом лог пишется на диск с задержкой в несколько секунд, что весьма безопасно с точки зрения сохранности данных.

innodb_flush_log_at_trx_commit = 0

Значение "0" даст наибольшую производительность. В этом случае буфер будет сбрасываться в лог файл независимо от транзакций. В этом случае риск потери данных возрастает.
А почитать вообще интересно здесь https://ruhighload.com/post/my.cnf
За это сообщение автора tarasfrompir поблагодарили (всего 3):
Strangeman (Вс сен 09, 2018 1:24 pm) • gans (Пт мар 29, 2019 9:45 am) • antpino (Пт авг 16, 2019 8:54 am)
Рейтинг: 3.49%
Спасибо нам ПОМОЖЕТ..!
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Ускорение MD на слабых компьютерах (MYSQL)

Сообщение Ivan » Пт июл 07, 2017 4:35 pm

Ну и в заключении.
Проблема оказалась в том что я ставил систему на ubuntu с использованием последних версий MySQL. А в них по умолчанию таблицы создаются с типом таблиц InnoDb. А MajorDomo предполагает по умолчанию MyISAM

Хоть MyISAM - и устаревшая модель но она гораздо быстрее InnoDb. MajorDomo не использует фишки InnoDb

В итоге было решено переключить все таблицы с InnoDb на MyISAM (Статус бета тестера не позволяет отходить за рамки установленных стандартов)

Как переключить:
В консоли либо в phpMyAdmin

Код: Выделить всё

SELECT CONCAT('ALTER TABLE ', table_name, ' ENGINE=MyISAM;') as ExecuteTheseSQLCommands
FROM information_schema.tables WHERE table_schema = 'db_terminal'
AND ENGINE = 'InnoDB' 
ORDER BY table_name DESC; 
Ну и чтобы будущие таблицы были MyISAM в /etc/mysql/my.cnf

Код: Выделить всё

[mysqld]
innodb_flush_log_at_trx_commit=2
default-storage-engine=myisam
Но я всё же рекомендую остаться на InnoDB
За это сообщение автора Ivan поблагодарили (всего 3):
Strangeman (Вс сен 09, 2018 1:25 pm) • gans (Пт мар 29, 2019 9:45 am) • antpino (Пт авг 16, 2019 8:54 am)
Рейтинг: 3.49%
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Кулибин
Сообщения: 66
Зарегистрирован: Пн ноя 25, 2019 10:05 pm
Благодарил (а): 12 раз
Поблагодарили: 0

Re: [Настройка] Ускорение MD на слабых компьютерах (MYSQL)

Сообщение Кулибин » Вс дек 08, 2019 12:55 am

Не работает в консоли. Ошибку выдаёт. Вообще беда тормозит msql дико не понятно делать что , рыл интеренет дня 3.
Не уже ли нет ничего лучшего чем эта дрянь.
Ответить