SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.05.2015 14:56:53

Valentin
Участник
Зарегистрирован: 08.05.2015
Сообщений: 1

Помогите разобратся с производительностью!

Есть таблица:
-- Структура таблицы `work`
CREATE TABLE IF NOT EXISTS `work` (
`id` int(11) NOT NULL,
`first_name` int(11) DEFAULT NULL,
`last_name` int(11) DEFAULT NULL,
`bdate` date DEFAULT NULL,
`day` tinyint(2) NOT NULL,
`month` tinyint(2) NOT NULL,
`year` int(5) NOT NULL,
`country` int(11) DEFAULT NULL,
`city` int(11) DEFAULT NULL,
`data` longtext,
`pr` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `bdate` (`bdate`),
KEY `pr` (`pr`),
KEY `day` (`day`),
KEY `month` (`month`),
KEY `year` (`year`),
KEY `first_name` (`first_name`),
KEY `last_name` (`last_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

В таблице 10 миллионов записей.
Делаю выборку исключительно по цифровым полям, которые проиндексированы:

SELECT id FROM work where first_name = '11' AND last_name = '22' AND day = '5' AND month = '10' AND year = '2001'"
В результате по времени такой запрос работает так:
Поиск записи: 3 sec.
Поиск записи: 0 sec.
Поиск записи: 1 sec.
Поиск записи: 0 sec.
Поиск записи: 28 sec.
Поиск записи: 3 sec.
Поиск записи: 112 sec.
Поиск записи: 1 sec.
Поиск записи: 2 sec.
Поиск записи: 0 sec.
Поиск записи: 34 sec.
Поиск записи: 11 sec.

Соответственно поиск 1000 записей занимает несколько часов! Никаких update и delete параллельно не ведётся.
При этом mysql совсем не занимает процессор – меньше 1%!!!
Mysql установлена на локальной машине WIN 7.
Вопросы:
1. Что я сделал не так, почему так долго проходит поиск, почему такой разброс по времени и что делать?
2. Почему совсем не занят процессор, как заставить mysql пользоваться для поиска всеми ресурсами ПК?

Неактивен

 

#2 08.05.2015 15:16:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите разобратся с производительностью!

На такой запрос помог бы составной индекс на связку (first_name,last_name,day,month,year).
Покажите explain без него и с ним.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 08.05.2015 16:09:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите разобратся с производительностью!

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

По второму вопросу - у вас очевидно полный скан таблицы, поэтому процессор и не загружен.

P.S. На всякий случай, план это результат команды
EXPLAIN ваш запрос;

Неактивен

 

#4 10.05.2015 19:18:30

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Помогите разобратся с производительностью!

Индекс от такой большой таблицы может не помещаться в буфер ключей.
Перезапустите сервер, выполните несколько исследуемых запросов, а затем посмотрите статистику использования буфера ключей с помощью запроса
SHOW STATUS like 'key%';
Key_read_requests - это количество обращений к ключу в буфере, Key_reads - количество обращений к ключу на диске, без использования буфера.
Первая величина должна превосходить вторую на несколько порядков.

Если у вас не так, значит, под буфер ключей выделено слишком мало места (посмотреть текущее значение можно запросом SELECT @@key_buffer_size;) и в память они не помещаются, что значительно замедляет работу (возможно, скачки во времени выполнения типа 100 с после 3 с - это и есть случаи, когда соответствующий ключ не загружен в буфер и потому читается с диска).
Выполните запрос SHOW TABLE STATUS LIKE 'work' и посмотрите, чему равна величина Index_length - это и есть общий размер ключей вашей таблицы. Соответственно, чтобы ключи полностью помещались в буфер в памяти, его размер должен быть больше этой величины; плюс еще нужно учесть, что есть другие таблицы и их ключи также будут использовать буфер (впрочем, можно выделить свой буфер ключей под конкретную таблицу).

Неактивен

 

#5 09.06.2017 20:41:04

KitaecKrg
Участник
Зарегистрирован: 09.06.2017
Сообщений: 2

Re: Помогите разобратся с производительностью!

Привет ребят! Подскажите что делать уже не знаю все перепробовал!!! Установлена Linux ubuntu 14.04 LTS никаких программ ничего нет, она свежая на винте, только я захожу в мозилу смотреть фильмы, фильмы тормозят и загрузка Цп 100%!!! Сегодня купил термопасту, поменял на процессоре, делал все как в ютубе показывают практически одинаково у всех!!! Но все равно цп 100% и комп глючит долго думает, уже менял с ubuntu на xubuntu и ничего не помогает, до этого всего стояла система windows 7 максимальная,  думал из за этого тормозит, из за того что не поддерживает системник такие требования от ОС, решил поставить ubuntu. Системные требования: Intel Pentium 4 CPU 3.00Ghz *2, графика intel 915G x86/mmx/sse2. Винт на 80гб. Я не очень шарю в компах, но желаю чтобы помог кто смог сделать мне его. Поставил систему на 32 бита. Что делать?

Неактивен

 

#6 12.06.2017 09:33:14

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите разобратся с производительностью!

А какое Ваш вопрос имеет отношение к MySQL? Лучше спросите на форуме Ubuntu.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 12.06.2017 09:45:04

KitaecKrg
Участник
Зарегистрирован: 09.06.2017
Сообщений: 2

Re: Помогите разобратся с производительностью!

Дело не в Убунту, дело в компе самом.

Неактивен

 

#8 12.06.2017 10:48:23

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Помогите разобратся с производительностью!

KitaecKrg написал:

Дело не в Убунту, дело в компе самом.

smile Сразу все стало понятно. Вам нужно на форум поддержки компа. К сожалению Вы не указали производителя, поэтому сложно Вас сортировать точно.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson