MySQLTuner и оптимизация БД

12
danforth
На сайте с 18.12.2015
Offline
153
1187

Всем привет.

Есть две VPSки:

1. 2 ядра, 2ГБ, SSD

2. 1 ядро, 1ГБ, SSD

На обоих проводил эксперимент: ставил MariaDB 10.2.9, немного нагружал VPSку (для сбора статистики), потом запускал mysqltuner, выполнял рекомендации, которые он говорил. Как результат, производительность падала в разы (с ~13 rps, до 1-4 rps).

Пробовал тюнить вручную, по рекомендациям на хабре и других ресурсах. Как не пытайся, а дефолтный конфиг оказался самым быстрым, в лучшем случае мой конфиг оказывался не медленнее, но и не быстрее.

Вот сам эксперимент, результаты для VPS#2

Команда:

siege -t 1M -c 20 --no-parse --no-follow -f /vagrant/urls.txt

Бенчмарк производится сразу после mysql restart

Дефолтный конфиг:

Transactions:                    793 hits
Availability: 100.00 %
Elapsed time: 59.84 secs
Data transferred: 24.84 MB
Response time: 1.49 secs
Transaction rate: 13.25 trans/sec
Throughput: 0.42 MB/sec
Concurrency: 19.78
Successful transactions: 793
Failed transactions: 0
Longest transaction: 5.51
Shortest transaction: 0.51

Конфиг после этих рекомендаций

Transactions:                    115 hits
Availability: 100.00 %
Elapsed time: 59.90 secs
Data transferred: 3.65 MB
Response time: 9.46 secs
Transaction rate: 1.92 trans/sec
Throughput: 0.06 MB/sec
Concurrency: 18.15
Successful transactions: 115
Failed transactions: 0
Longest transaction: 20.23

Какие ещё можно попробовать рекомендации, чтобы ускорить работу базы? Сами запросы переписать не могу, так как они в ядре.

Спасибо!

Junior Web Developer
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#1

Ну как минимум включите лог медленных запросов, которые больше 2-х секунд выполняются. И смотрите их. Далее расстановка индексов.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
danforth
На сайте с 18.12.2015
Offline
153
#2
LEOnidUKG:
Ну как минимум включите лог медленных запросов, которые больше 2-х секунд выполняются. И смотрите их. Далее расстановка индексов.

Лог медленных запросов включал, больше 1 секунды редко что выполняется (если не долбануть одновременно на не закешированный запрос), также включал лог запросов без индексов. Тогда начинает сыпать всяким, например вот:

# Query_time: 0.000676  Lock_time: 0.000067  Rows_sent: 47  Rows_examined: 208

# Rows_affected: 0
# Full_scan: Yes Full_join: No Tmp_table: No Tmp_table_on_disk: No
# Filesort: No Filesort_on_disk: No Merge_passes: 0 Priority_queue: No
SET timestamp=1509474982;
SELECT * FROM shop_category WHERE (
`left_key` >= 283 AND
`right_key` <= 376
) AND (type = 0);

SELECT c.* FROM shop_category c LEFT JOIN shop_category_routes cr ON c.id = cr.category_id WHERE (c.`depth` <= 2) AND (c.status = 1) AND (cr.route IS NULL OR cr.route = 'shop.quasar.cc/*') ORDER BY c.`left_key`;

# User@Host: danforth[danforth] @ localhost []
# Thread_id: 771 Schema: shop_db QC_hit: No
# Query_time: 0.000286 Lock_time: 0.000073 Rows_sent: 5 Rows_examined: 6
# Rows_affected: 0
# Full_scan: Yes Full_join: No Tmp_table: No Tmp_table_on_disk: No
# Filesort: No Filesort_on_disk: No Merge_passes: 0 Priority_queue: No
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#3

У вас таблицы в Innodb или myaism ?

Сколько весят базы?

Сколько на сервер памяти выделено?

Вижу у вас магазин, какая у вас CMS?!

danforth
На сайте с 18.12.2015
Offline
153
#4
LEOnidUKG:
У вас таблицы в Innodb или myaism ?
Сколько весят базы?
Сколько на сервер памяти выделено?

Вижу у вас магазин, какая у вас CMS?!

Таблицы разные, есть и InnoDB, есть и MyISAM. Думаю больше InnoDB, основные так точно.

База весит 75 мб.

На самой VPS 1ГБ всего. Как узнать сколько на сервер БД выделено?

CMS Shop-Script.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#5

Так переводите всё в InnoDB, оно всё будет в памяти хранится.

innodb_buffer_pool_size только выставите в 128 МБ что на запас.

Если после этого будет нагружать, ну тогда только файловый кэш.

Evas EvaSystems
На сайте с 31.05.2012
Offline
104
#6

Почему вы поставили такой замечательный форк mysql, но используете обычный InnoDB?

MariaDB может работать с XtraDB, который лучше и основан на InnoDB и совместим с ним.

Но ещё лучше будет с ним работать не MariaDB, а Percona Server.

Потом сразу же в глаза бросается наличие включенного binlog'а. Зачем он вам?

А рекомендациям тюнера вы следуете не до конца. И, конечно, их недостаточно.

Тюнер хорош для очень удобного сбора статистики, но его рекомендации лишь часть всей картины.

Пробовал тюнить вручную, по рекомендациям на хабре и других ресурсах. Как не пытайся, а дефолтный конфиг оказался самым быстрым, в лучшем случае мой конфиг оказывался не медленнее, но и не быстрее.

Это хорошо, но прежде чем тюнить вручную необходимо понимать то, как тот или иной параметр влияет на работу.

Просто так выставлять значения, взятые с чужих рекомендаций не надо. Они ведь были рекомендованы

в конкретной ситуации, при наличии конкретного железа, они не подходят вам и могут вызвать лишь падение

производительности.

А вообще не очень понимаю, зачем вы используете InnoDB... У вас почти все операции это чтение с базы,

записей очень мало. MyISAM в этом плане будет работать шустрее и ему понадобится меньше памяти, чем InnoDB.

Ему надо выделить память под индексы, в то время как у InnoDB надо выделить память размером со все базы.

Учитывая, что памяти на VPS у вас очень мало, что вы будете делать, когда база вырастет в размерах?)

Разумеется, при использовании такого форка как MariaDB, MyISAM надо заменить на Aria.

Кроме того - помимо mysql надо настраивать и остальное. Особенно если у вас есть вебсервер, там тоже

очень много параметров, которые влияют на производительность. А главное настроить и саму операционную

систему, иначе все эти вышеперечисленные манипуляции подействуют не полностью.

Системный администратор Linux. Настройка, сопровождение и оптимизация серверов. Отзывы - searchengines.guru/ru/forum/1017473
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#7
MariaDB может работать с XtraDB, который лучше и основан на InnoDB и совместим с ним.

С добрым утром. Мария с 10,2 перешла на чистый оригинальный InnoDB читайте новости. Связанно это с тем, что разработчики mysql допилили все плюшки, которые были в марии. И теперь совместно работают над InnoDB

Также XtraDB чистого нет, это была надстройка над InnoDB и всё. Структура и т.д. было точно такое же. Поддержка была прозрачная, просто драйвер для работы назывался XtraDB отдельно его выбирать нельзя было.

Evas EvaSystems
На сайте с 31.05.2012
Offline
104
#8
LEOnidUKG:
С добрым утром. Мария с 10,2 перешла на чистый оригинальный InnoDB читайте новости. Связанно это с тем, что разработчики mysql допилили все плюшки, которые были в марии. И теперь совместно работают над InnoDB

С добрым :) Спасибо, почитал, буду знать...

Тогда тем более Percona будет лучше, как я и писал. Но вопрос - зачем ТС'у InnoDB остаётся открытым, а также то, что mysql его надо ещё настраивать и настраивать.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#9
Evas:
Но вопрос - зачем ТС'у InnoDB остаётся открытым, а также то, что mysql его надо ещё настраивать и настраивать.

Нечего там настраивать. Узкое место просто сама CMS и много запросов в БД для любому чиху, тут нужен кэш файловый.

Evas EvaSystems
На сайте с 31.05.2012
Offline
104
#10
LEOnidUKG:
Нечего там настраивать. Узкое место просто сама CMS и много запросов в БД для любому чиху, тут нужен кэш файловый.

Для максимальной производительности надо настраивать всё.

Да кэш понятное дело, но это ведь не панацея. Сервер должен быть настроен хорошо, стандартные параметры не подходят для реальных задач.

Код и БД, а также запросы к ней тоже должны быть оптимизированы должным образом. Но это в идеале, что в данном случае ТС сделать не может(

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий