Войти

Показать полную графическую версию : Производительность MYSQL-2


evpu
30-08-2016, 14:30
Добрый день!

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

Для теста провожу много раз простейший запрос.

SELECT * FROM `data` WHERE `hexkey` = '0010005D04FB'

Вот время ответа:
0.0006
0.0048
0.1391
0.0005
5.1097
0.0005
0.6763

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

Хотя целиком комп живет на core2duo и 1 ГБ ОЗУ, перед безусловно обязательным мероприятием - заменой сервера на XEON и т.д очень бы хотелось разобраться - что можно оптимизировать в этой ситуации.

на Хабре и в Гугле достаточно всякого на эту тему, но может, кто конкретно знает куда копать?

lxa85
30-08-2016, 16:25
evpu, вы уверены, что ваш тест корректен?
Кроме самого запроса, его можно оптимизировать как "руками", так и средствами MySQL (план выполнения запроса).
Если прям так надо, вытаскивайте таблицу в виртуальную.
что можно оптимизировать в этой ситуации »
Структуру БД, в частности провести индексацию полей.
Посмотреть, какая подсистема (банально жесткий диск) стопорит работу системы.
Посмотреть, насколько эффективно настроена работа с ОЗУ (пальцем в небо).
Опять же, если углубляться, должны существовать системы нагрузочного тестирования, которые формируют подробный отчет о слабостях установки. Это будет более весомо для начальства, более подробно для вас, и разумеется более корректно, чем банальная множественная выборка.

Малость гугления
sysbench (http://amiweb.ru/linux/testiruem-proizvoditelnost-mysql)
hp loadrunner (http://www8.hp.com/ru/ru/software-solutions/loadrunner-load-testing/)
jmeter (jmeter.apache.org)

evpu
18-10-2016, 22:13
Спасибо, изучим.

Ну, пока проблему решили брутально - переносом системы на SSD и кардинальной сменой конфигурации сервера.
С core2duo на i5, и памятью с 1ГБ ДДР2 на 8ГБ ДДР3. Debian 8.1 без ничего лишнего... Только мое ядро ПО, LAMP, и админский минимум.

В дальнейшем хочу создать зеркалирующий RAID из нескольких SSD только под хранение базы, а сама система на другом SSD.

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

С тех пор нагрузка возросла еще вдвое, тормоза как в ноль ушли так там пока и остались.

evpu
03-01-2017, 23:00
Нагрузка возросла еще вчетверо, снова пошли замедления... присмотрелся к базе - некоторые поля почему-то имели тип varchar хотя логичнее было бы integer. Поменял - опять было приятно отнаблюдать, как время ответа ушло почти в ноль...


Решил новую тему пока не открывать... вопрос, по работе коннектора mysqlclient.so
Пока коротко - дебаггинг этого - целая эпопея.. отпишусь позже, опишу структуру приложения.

Вопрос такой - если основательно наговнокодить, с эффектом - целый шквал запросов будет пытаться ломануться на неоткрытое соединение (ну не открылось оно... или забыл открыть) - это я про MySQL - может ли быть такое, что в результате этот коннектор затупит настолько, что продолжит ужасающе глючить после отработки указанного шквала запросов?

Т.е есть приложение (опишу позже) - оно fork-ом генерирует пару десятков дочерних потоков. В какой-то момент, один из потоков вдруг выдает резко пару десятков попыток запросов без открытия соединения, и как эффект - это ложит все 30 потоков, но не начисто, а где-то наполовину. Приложение работает, но часть данных теряется. Помогает банальный перезапуск приложения.

Зарезал генерацию этого конкретного потока - там были обособленные по смыслу специфические процедуры - все исчезло начисто.

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

itkrondotcom
16-02-2017, 16:18
Суть понял, только вот как проделать оптимизацию (http://itkron.com/en/)это вопрос




© OSzone.net 2001-2012