powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / mysql max cpu
19 сообщений из 19, страница 1 из 1
mysql max cpu
    #38348124
SergeyPerm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть 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?
...
Рейтинг: 0 / 0
mysql max cpu
    #38348142
V2oD2o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
25% это максимальная нагрузка на двухядерный четырехпотоковый процессор
...
Рейтинг: 0 / 0
mysql max cpu
    #38348144
V2oD2o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
25х4=100
...
Рейтинг: 0 / 0
mysql max cpu
    #38348146
V2oD2o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а чтобы жарил, дай сюда запрос
...
Рейтинг: 0 / 0
mysql max cpu
    #38348170
SergeyPerm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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

в принципе то все
...
Рейтинг: 0 / 0
mysql max cpu
    #38348180
SergeyPerm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V2oD2o,

tab1 - это исходная таблица, постоянный рост, важны все данные, около 2 млн записей.
tab2 - это выборка из tab1 по WHERE f1 = 123, значительно ускорило расчет
tab3 - это результат, можно распиливать на старые и новые данные, около 2 млн записей. делать пока не спешу, так как пока не вижу тормозов в этом
...
Рейтинг: 0 / 0
mysql max cpu
    #38348206
SergeyPerm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergeyPerm,

LIMIT 500 нужен потому, что не нужна вся выборка из tab1. фильтрация через ORDER BY

ORDER BY sum DESC - нужен как раз потому, что LIMIT 500, так как нужное может не войти в эти 500 :-)
...
Рейтинг: 0 / 0
mysql max cpu
    #38348228
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyPermВопрос скорее в том почему MySQL использует только один поток.потому что, грубо говоря, один запрос=один поток(одно ядро)
распараллеливания запроса как в мсскл, например, тут нет
...
Рейтинг: 0 / 0
mysql max cpu
    #38348380
pomoev.u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тут интересный тред, будет полезен.
http://dba.stackexchange.com/questions/5666/possible-to-make-mysql-use-more-than-one-core
...
Рейтинг: 0 / 0
mysql max cpu
    #38348394
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pomoev.u, ТС хочет, чтобы одиночные запросы использовали более одного ядра. А этого не добиться, как ни вертись.
...
Рейтинг: 0 / 0
mysql max cpu
    #38348630
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirpomoev.u, ТС хочет, чтобы одиночные запросы использовали более одного ядра. А этого не добиться, как ни вертись.
запустить три скрипта одновременно?
...
Рейтинг: 0 / 0
mysql max cpu
    #38348642
V2oD2o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не согласен, вот пример выполнения запроса, длительностью 4-5 секунд на FX-4100, 4 ядра

используется как видим - 2, возможно не все 4 - изза денвера
...
Рейтинг: 0 / 0
mysql max cpu
    #38348658
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow, ну да... только они у ТСа стоят в некой "очереди", и ХШ говорит, что одновременно запускать их нельзя :)
...
Рейтинг: 0 / 0
mysql max cpu
    #38348690
SergeyPerm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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

Очереди в несколько тысяч элементов отлично отрабатываются, могут быть размещены в памяти. Наложений тоже нет, когда запущено несколько десятков или сотен экземпляров обработчика очереди.
...
Рейтинг: 0 / 0
mysql max cpu
    #38348752
pomoev.u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V2oD2o,

Насколько я понимаю, там есть основной тред, который обрабатывает запрос и отдельные треды, которые осуществляют чтение/запись, плюс наверняка существует тред, который переносит изменения из транзакционного лога в сами таблицы. Распараллелить основной тред судя по всему невозможно, но остальные треды вполне себе будут выполняться на других ядрах и при стечении обстоятельств наверное могут также нагружать процессор, как и основной тред.
...
Рейтинг: 0 / 0
mysql max cpu
    #38349409
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyPermV2oD2o,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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





как-то некузяво выглядит. Не имеет ли смысла

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
....
select 
  '123',
  count(1)
from t1,t2
where t2.f1=123
   and t1.mm=1
   and t2.mm=1
   and t1.pos=t2.pos
group by t1 
....



возможно все пойдет веселее по (правильным) индексам.
...
Рейтинг: 0 / 0
mysql max cpu
    #38349412
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправленому -- верить:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
....
select 
  '123',
  t1.f1,
  count(1)
from t1,t2
where t2.f1=123
   and t1.mm=1
   and t2.mm=1
   and t1.pos=t2.pos
group by t1.f1 
....
...
Рейтинг: 0 / 0
mysql max cpu
    #38349527
SergeyPerm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbcИсправленому -- верить:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
....
select 
  '123',
  t1.f1,
  count(1)
from t1,t2
where t2.f1=123
   and t1.mm=1
   and t2.mm=1
   and t1.pos=t2.pos
group by t1.f1 
....



непонятненько про единички... у меня логическое "И" используется между двумя u/bigint, которое заполнено именно битами со своим порядком (то есть там пофиг какое число), они перемножаются (пересечение), что остается считается, а потом суммируется внутри группы. вот
...
Рейтинг: 0 / 0
mysql max cpu
    #38349540
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
....
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / mysql max cpu
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]