Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую всех!
Дали задание по MySQL, распараллеливание запросов.
Сколько ни гуглил, ничего конкретного по этой теме не нашел. Были только теории и описания того, что такое параллельный запрос. Поэтому прошу вас помочь с объяснением того какие бывают параллельные запросы, как их использовать и прочее.
Задача в том, что на примере бд нужно показать сперва какие-нибудь тяжелые запросы которые выполняются около 5 секунд, а потом те же запросы с распараллеливанием которые дадут чудесный результат 4,5 секунд и т.д. Кто что знает, подскажите.
Неактивен
Иногда можно разбить запрос на два и получить выигрыш. Что имеется в виду под параллельными запросами - шардинг?
Неактивен
Этого точно не могу сказать) по-поводу разбиения запроса на два и прочее я приводил как пример, также нужно привести в пример запрос+ распараллеливание. Возможно я что-то не допонял в задании. В пример сделал обычную бд с 3 таблицами, в одной из них около 1000 записей, привязал ключами. Делал тяжелые запросы по всем трем таблицам и подзапросы, скринил результаты времени 3-5 сек на запрос в следующем этапе мне нужно распараллелить эти запросы чтобы время на их обработку было меньше... Может задача состоит в том что бы подключить несколько клиентов к бд и отправить с каждого по запросу и потом как то это распараллелить?
Неактивен
MySQL не умеет распараллеливать выполнение одного запроса на нескольких процессорах, если речь идет об этом.
Вы можете взять статистику запросов за один час из query log и показать, что суммарное время выполнения этих запросов составляет много больше часа, так эти запросы выполнялись параллельно. Параллельно в данном случае выполняются запросы от разных клиентов.
Неактивен
т.е. если у нас есть тяжелый запрос, который выполняется очень долго, все что мы можем сделать- это разбить его на несколько простых для уменьшения времени? А как можно реализовать одновременные запросы с нескольких клиентов и попытаться распараллелить их?
Неактивен
и подскажите пожалуйста где можно прочитать про потоки в mysql, где нужно указать их количество?
Неактивен
lobasta написал:
т.е. если у нас есть тяжелый запрос, который выполняется очень долго, все что мы можем сделать- это разбить его на несколько простых для уменьшения времени?
Тяжелый запрос нужно оптимизировать. Разбиение запроса на несколько это один из способов оптимизации, который в некоторых случаях может быть эффективным. К распараллеливанию это не имеет отношения.
lobasta написал:
А как можно реализовать одновременные запросы с нескольких клиентов и попытаться распараллелить их?
Запросы разных клиентов по умолчанию выполняются одновременно, т.е. параллельно.
thread_concurrency кол-во одновременно работающих соединений.
Неактивен
т.е. ответом на мою задачу будет пример несколькими клиентами?
Неактивен
да
Неактивен
а как это можно реализовать? у меня установлена только mysql, для этого еще нужно ставить php my admin? или можно это реализовать на самом mysql?
Неактивен
а можете объяснить как правильно запустить mysqlslap. в статьях приводят пример с созданием таблицы. как запустить проверку к уже готовой бд? и еще. при запуске выдает ошибку: Error when connetcting to server: Acces denied for user 'root' @ 'localhost' (using password: NO)
Неактивен
lobasta написал:
а можете объяснить как правильно запустить mysqlslap. в статьях приводят пример с созданием таблицы. как запустить проверку к уже готовой бд? и еще. при запуске выдает ошибку: Error when connetcting to server: Acces denied for user 'root' @ 'localhost' (using password: NO)
Фух. вроде разобрался
Неактивен
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.
C:\Documents and Settings\aa>cd "c:\Program Files\MariaDB 5.3\bin"
C:\Program Files\MariaDB 5.3\bin>mysqlslap --user=root --port=3308 --password --
create-schema=test --query="select * from city" --concurrency=5 --iterations=15
Enter password: ****
Benchmark
Average number of seconds to run all queries: 0.236 seconds
Minimum number of seconds to run all queries: 0.062 seconds
Maximum number of seconds to run all queries: 1.657 seconds
Number of clients running queries: 5
Average number of queries per client: 1
Неактивен
Спасибо!
Неактивен
Теперь такой момент. через mysqlslap можно как-нибудь назначить количество потоков, для демонстрации параллельного и последовательного выполнения запросов?
Неактивен
Неактивен
т.е. в нашем случае количество клиентов= количество потоков?
Неактивен
да
Неактивен
Огромное спасибо что помогли разобраться! Премного благодарен!
Неактивен