|
|
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть Windows 7 x64 + MySQL 5.6 на десктопе i5-3470 2.2 GHz RAM 16 GB, RAID 1 для данных, RAID 0 для временных файлов. MySQL установлен "из коробки", особого тюнинга не производилось. Установлен при помощи мастера в конфигурации Server Machine (там есть еще Developer и Dedicated). Но так как переустанавливать уже лень/долго/проблемно, хочу переконфигурировать сервер. Проблема в следующем: MySQL не использует больше 25% CPU! Может снижаться до 19-20%, но потом возвращается до 24-25%. MySQL не обслуживает левые запросы откуда-то из вне, используется тупо для расчетов и выполняет однотипный запрос по очереди по миллионам записей (читает из одной, пишет в другую). На каждый тратится по 13-14 сек. Хочется что бы он "жарил" как следует :) По данным диспетчера задач подгружается всегда первое ядро, хотя галки стоят на всех четырех. Если отключить первое, то загрузка становится на втором или на третьем. Каких-то запредельных значений по использованию диска не отмечено, все очень скромно, по данным монитора ресурсов 1-3 Мбит Так как нигде тормозов не отмечено, полагаю, что MySQL просто скромничает с процессором и время запроса можно было бы сократить раза в 3-4 только процессором. Any ideas? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 09:07:55 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
25% это максимальная нагрузка на двухядерный четырехпотоковый процессор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 09:24:03 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
а чтобы жарил, дай сюда запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 09:25:05 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
V2oD2o, Вопрос скорее в том почему MySQL использует только один поток. Фотошоп например кушает все и процент загрузки у него до 100% доходить может. Запрос примерно такого вида: f1,f2 - составной индекс уникальных элементов в tab3 123 - целое число f1,pos - составной индекс уникальных элементов в tab1, tab2 INSERT INTO tab3 (f1,f2,f3) ( SELECT '123', tab1.f1, @sum := SUM(( SELECT BIT_COUNT(tab1.mm&tab2.mm) FROM tab2 WHERE tab2.f1 = 123 AND tab2.pos = tab1.pos)) sum FROM tab1 GROUP BY f1 ORDER BY sum DESC LIMIT 500 ) ON DUPLICATE KEY UPDATE f3 = @sum в принципе то все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 09:53:57 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
V2oD2o, tab1 - это исходная таблица, постоянный рост, важны все данные, около 2 млн записей. tab2 - это выборка из tab1 по WHERE f1 = 123, значительно ускорило расчет tab3 - это результат, можно распиливать на старые и новые данные, около 2 млн записей. делать пока не спешу, так как пока не вижу тормозов в этом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 10:07:16 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
SergeyPerm, LIMIT 500 нужен потому, что не нужна вся выборка из tab1. фильтрация через ORDER BY ORDER BY sum DESC - нужен как раз потому, что LIMIT 500, так как нужное может не войти в эти 500 :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 10:28:57 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
SergeyPermВопрос скорее в том почему MySQL использует только один поток.потому что, грубо говоря, один запрос=один поток(одно ядро) распараллеливания запроса как в мсскл, например, тут нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 10:48:35 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
Вот тут интересный тред, будет полезен. http://dba.stackexchange.com/questions/5666/possible-to-make-mysql-use-more-than-one-core ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 11:57:55 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
pomoev.u, ТС хочет, чтобы одиночные запросы использовали более одного ядра. А этого не добиться, как ни вертись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 12:04:38 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
tanglirpomoev.u, ТС хочет, чтобы одиночные запросы использовали более одного ядра. А этого не добиться, как ни вертись. запустить три скрипта одновременно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 13:25:10 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
не согласен, вот пример выполнения запроса, длительностью 4-5 секунд на FX-4100, 4 ядра используется как видим - 2, возможно не все 4 - изза денвера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 13:30:45 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
ScareCrow, ну да... только они у ТСа стоят в некой "очереди", и ХШ говорит, что одновременно запускать их нельзя :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 13:40:31 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
tanglirScareCrow, ну да... только они у ТСа стоят в некой "очереди", и ХШ говорит, что одновременно запускать их нельзя :) Очередь есть, но запускать то как раз можно... попробую. Очередь формируется по другим законам, это просто таблица с одним столбцом с идентификаторами, и имеет размеры от 1000-5000, периодически пополняется/оптимизируется по крону... один скрипт берет идентификаторы и удаляет из очереди, другой пополняет :) это удобно когда имеется большой поток данных. P.S. кстати, если интересно, очередь в другом месте сделана так (фрагмент скрипта bash): for ID in `mysql -N ... db -e 'SET @uids := null; UPDATE queue SET do = (SELECT @uids := domainId) WHERE do IS NULL LIMIT 1; SELECT @uids'`; do ... тут все остальное с ид=ID ... потом удаляем элемент из очереди done Очереди в несколько тысяч элементов отлично отрабатываются, могут быть размещены в памяти. Наложений тоже нет, когда запущено несколько десятков или сотен экземпляров обработчика очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 14:04:27 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
V2oD2o, Насколько я понимаю, там есть основной тред, который обрабатывает запрос и отдельные треды, которые осуществляют чтение/запись, плюс наверняка существует тред, который переносит изменения из транзакционного лога в сами таблицы. Распараллелить основной тред судя по всему невозможно, но остальные треды вполне себе будут выполняться на других ядрах и при стечении обстоятельств наверное могут также нагружать процессор, как и основной тред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 14:31:57 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
SergeyPermV2oD2o, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. как-то некузяво выглядит. Не имеет ли смысла Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. возможно все пойдет веселее по (правильным) индексам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 20:53:54 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
Исправленому -- верить: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 20:55:39 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
javajdbcИсправленому -- верить: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. непонятненько про единички... у меня логическое "И" используется между двумя u/bigint, которое заполнено именно битами со своим порядком (то есть там пофиг какое число), они перемножаются (пересечение), что остается считается, а потом суммируется внутри группы. вот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 23:40:37 |
|
||
|
mysql max cpu
|
|||
|---|---|---|---|
|
#18+
SergeyPerm, пардон, да, я предположил что там просто да/нет, 1/0. Осталось только проверить не ускорит ли такое (ускорит если (t2.mm&t1.mm) > 0 выполняется для 1-3% записей). хотя и получается двойной подсчет: .... select '123', t1.f1, count(t2.mm&t1.mm) from t1,t2 where t2.f1=123 and (t2.mm&t1.mm) > 0 and t1.pos=t2.pos group by t1.f1 .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 00:38:52 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38348228&tid=1836354]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 441ms |

| 0 / 0 |
