powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обработка большого объема данных в MySQL.
14 сообщений из 14, страница 1 из 1
Обработка большого объема данных в MySQL.
    #33740137
30region.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всех приветствую!

Итак, начну сначала. Возникла необходимость в обработке большого количества информации... каждый месяц в базу будет добавляться (в одну таблицу или в разные?) примерно 16 000 000 записей. Таблица состоит из 3 полей: дата, MAC-адрес, IP-адрес.


CREATE TABLE `stat` (
`dt` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`mac` varchar(18) NOT NULL default '',
`ip` varchar(255) NOT NULL default '',
KEY `mac` (`mac`),
KEY `login` (`ip`)
) ENGINE=MyISAM;

Ни одно из полей не является уникальным, т. к. уникальных связок "дата - MAC-адрес - IP-адрес" нет. Каждый IP может быть в любое время под любым MAC-адресом. Надеюсь, я понятно объяснил?!

В данный момент в таблице находится 32 000 000 записей.

mysql> select ip from stat group by ip order by ip limit 1, 10;
...
10 rows in set (51.47 sec)

mysql> select count(ip) from stat group by ip order by ip;
...
320 rows in set (22 min 26.78 sec)

Время выборки меня конечно же не устраивает :( А теперь, внимание, впорос!

Как ускорить выполнение запроса? Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33740153
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очередной биллинг?

А нужно ли хранить эти данные в "сыром виде" более месяца-двух?
И есть ли смысл выполнять приведенные запросы на данных за период в который попадет более одного календарного месяца?
И нельзя ли привести более "практические" запросы, чем те, которые приведены? кому нужны 10 наименьших ip-адерсов?

я бы по прошедшим календарным месяцам хранил результаты приведенных запросов в отдельной табличке и либо сразу брал данные оттуда, либо, при необходимости, объединял бы результаты с результаттами, полученными из "сырых" данных.

кстати, время само по себе мало о чем говорит...
сколько времени занимат повторное выполнение этих же запросов?
какие настроены буфера, выделение памяти и т.п.?
какое железо, диски, рейды и т.п.?
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33740155
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, данные будут добавлятся скопом за какой-то период или равномерно, по мере поступления?
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33740172
30region.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не биллинг, но делается для провайдера. Так можно вычислить с каких компьютеров (MAC) выходят в сеть под несколькими логинами (IP).

Запрос, который я выполнил, не будет иметь практического применения. Я решил что он будет потяжелее, чем SELECT count(*) FROM stat; и можно будет видеть какая нагрузка будет при таком объёме данных.

Фактически мне нужен список уникальных IP и список MAC, соответствующих каждому из этих IP.
Также, наоборот: список уникальных MAC и список IP, соответствующие каждому из этих MAC.

Данные можно разбить по месяцам, например, но, как я уже сказал выше, их будет не менее 15 000 000 за каждый месяц. Данные буду поступать скопом раз в неделю, например. Получается что сразу будут добавляться примерно по 3 000 000 новых данных.

Время на повтор первого запроса: 31.17 sec. Второй запрос всё ещё выполняется :)

OS: FreeBSD
CPU: Intel(R) Celeron(R) CPU 2.53GHz
RAM: 256 Мб.
HDD: SCSI, 40 Gb.
MySQL 4.1.19.

Вот выборка по памяти:

mysqladmin variables | grep mem
| innodb_additional_mem_pool_size | 1048576 |
| innodb_buffer_pool_awe_mem_mb | 0 |
| locked_in_memory | OFF |

mysqladmin variables | grep buf
| bdb_log_buffer_size | 32768 |
| bulk_insert_buffer_size | 8388608 |
| innodb_buffer_pool_awe_mem_mb | 0 |
| innodb_buffer_pool_size | 8388608 |
| innodb_log_buffer_size | 1048576 |
| join_buffer_size | 131072 |
| key_buffer_size | 8388600 |
| myisam_sort_buffer_size | 8388608 |
| net_buffer_length | 16384 |
| preload_buffer_size | 32768 |
| read_buffer_size | 131072 |
| read_rnd_buffer_size | 262144 |
| sort_buffer_size | 2097144 |


Может быть нужно что-то ещё?
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33740176
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
30region.comФактически мне нужен список уникальных IP и список MAC, соответствующих каждому из этих IP.
Также, наоборот: список уникальных MAC и список IP, соответствующие каждому из этих MAC.это можно сделать одним запросом:
Код: plaintext
SELECT ip, mac FROM stat GROUP BY ip, mac ORDER BY ip, mac
30region.comДанные можно разбить по месяцам, например, но, как я уже сказал выше, их будет не менее 15 000 000 за каждый месяц. Данные буду поступать скопом раз в неделю, например. Получается что сразу будут добавляться примерно по 3 000 000 новых данных.а почему нельзя сразу из очередных 3 000 000 записей рассчитывать нужную статистику и объединять ее с уже накопленной? а "сырые" данные после этого вообще не хранить...
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33740202
30region.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное так и прийдется поступить... буду сначала обрабатывать входную информацию, а в таблицы записывать результат... чтобы не было дубликата. Спасибо за помощь.

Ну и вопрос в тему. Какое количество данных в MySQL уже может считать критическим для быстрой обработки? 16 млн. записей обрабатываются, как мы видим, даются уже с трудом. Ясное дело что всё зависит от железа, от типа информации и т. д., но всё же. Например, моя таблица описана выше. Какое количество запией для ьаблицы уже критично? Мне необходимо чтобы запросы выполнялись не более нескольких минут (уж никак не 20 минут!) :) Есть мысли?
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33740242
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На "тяжесть" выполнения запросов кроме количества записей, еще влияют индексы и, главное, сами запросы! Сколько записей затрагивают эти запросы, сколько выдают, каков план выполнения - все это играет свою роль.
Вполне возможны запросы которые на миллиарде записей будут отрабатывать за доли секунды, а возможно и на тысяче получить дикие тормоза.
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33740393
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
30region.com
Вот выборка по памяти:

mysqladmin variables | grep buf
| bdb_log_buffer_size | 32768 |
| bulk_insert_buffer_size | 8388608 |
| innodb_buffer_pool_awe_mem_mb | 0 |
| innodb_buffer_pool_size | 8388608 |
| innodb_log_buffer_size | 1048576 |
| join_buffer_size | 131072 |
| key_buffer_size | 8388600 |
| myisam_sort_buffer_size | 8388608 |
| net_buffer_length | 16384 |
| preload_buffer_size | 32768 |
| read_buffer_size | 131072 |
| read_rnd_buffer_size | 262144 |
| sort_buffer_size | 2097144 |

Может быть нужно что-то ещё?

Да, нужно. Похоже ваш mysql просто страдает от недостатка места в буферах.
key_buffer_size = 8 мегабайт при миллионах записей - это очень очень мало.

Давайте для проверки посмотрим Ваш show status
В частности соотношение key_reads и key_read_requests. Нормальное рабочее key_reads/key_reads_requests должно быть порядка 0.01 Если оно больше (как я сильно подозреваю) - надо увеличивать key_buffer_size. Скажем, до трети всей RAM
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33740616
Фотография Dinky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
30region.comКакое количество данных в MySQL уже может считать критическим для быстрой обработки? 16 млн. записей обрабатываются, как мы видим, даются уже с трудом.
странно что он вообще еще работает с такой таблицей! :->
ну скажите на милось - зачем вам под ip поле varchar(255)???
ip адрес прекрасно можно хранить в int! есть в mysql ф-ции для перевода - INET_ATON(), INET_NTOA()
тоже самое с mac-адресом, сконвертируйте все в числовые поля - ваш текущий сервер прекрасно потянет в 10 раз больше

--
Dmitry
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33741237
braindancer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХренДа, нужно. Похоже ваш mysql просто страдает от недостатка места в буферах.
key_buffer_size = 8 мегабайт при миллионах записей - это очень очень мало.

Давайте для проверки посмотрим Ваш show status
В частности соотношение key_reads и key_read_requests. Нормальное рабочее key_reads/key_reads_requests должно быть порядка 0.01 Если оно больше (как я сильно подозреваю) - надо увеличивать key_buffer_size. Скажем, до трети всей RAM

Прошу прощения за оффтоп и thread hijacking, но не подскажете ли других "диагностических" показателей такого рода, а еще лучше - линки, где почитать на эту тему? Есть достаточно нагруженный MySQL-сервер в полностью дефолтной конфигурации - хочется понять, можно ли его "заточить" под конкретные задачи, не анализируя каждый запрос в отдельности.
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33741250
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
braindancerне подскажете ли других "диагностических" показателей такого рода, а еще лучше - линки, где почитать на эту тему?
В документации , в частности Server System Variables и Server Status Variables
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33741470
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в поставке MySQL идёт несколько примеров конфигурационных файлов, рассчитаных на различный уровень нагрузки и используемого железа. Под FreeBSD их можно найти в /usr/local/share/mysql/, для других *nix систем я столь точного указания пути привести не могу, но обычно это какой-нибудь /usr/share/mysql или что-то вроде. Насчёт винды -- увы, не в курсе.
...
Рейтинг: 0 / 0
Обработка большого объема данных в MySQL.
    #33742111
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlНасчёт винды -- увы, не в курсе.На винде "треннировочные" конфы лежат в каталоге самой СУБД.

их там штук 5.
путь - что-то типа "C:\Program Files\MySQL\MySQL Server 5.0\my-innodb-heavy-4G.ini"
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Обработка большого объема данных в MySQL.
    #39946105
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любо-дорого читать такой топик!

Все общаются корректно, грамотно, с уважением... Советы дают благожелательно, не пытаясь при этом непременно показать свой исключительный уровень.

2006-ой год.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обработка большого объема данных в MySQL.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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