Очень большие наборы данных MySQL
Я использую Snort вместе с MySQL для ведения журнала, который генерирует ОГРОМНЫЕ наборы данных (в настоящее время таблица событий превышает 2,5 миллиона, я не знаю точно, сколько, потому что она возрастает до 2,5 миллионов, прежде чем она перестает работать от использования) много памяти).
К сожалению, эти данные больше не очень полезны, потому что я не могу вытащить их где-либо еще (хранимая процедура приводит к сбою сервера).
У меня вопрос: есть ли способ оптимизировать MySQL для этих огромных наборов данных или это выходит за рамки технических возможностей MySQL, и мне нужно перейти на что-то вроде Oracle, MS SQL или PostgreSQL?
У нас есть экземпляр Oracle и MS SQL Server, но оба они являются критически важными производственными серверами, и было бы очень плохой новостью отключить один из этих серверов или отключить их возможности.
Есть мысли по этому поводу?
3 ответа
Как говорят другие - 2.5M это не огромное количество рядов. посмотрите на схему вашей схемы - может ли ваша отчетность выполнить полное сканирование таблицы, где могут использоваться индексы [предупреждение: введение новой индексации снизит производительность вставки].
ты пытался оптимизировать innodb? убедитесь, что по крайней мере индексы помещаются в память пула буферов. попробуйте mysqltuner.pl или, если у вас есть больше времени, погрузитесь в http://mysqlperformanceblog.com/.
Может быть, innodb не лучший выбор для журналов?
У меня есть централизованный сервер системного журнала, и он настроен так, что каждый месяц данные отправляются в другую / новую таблицу, и есть представление со всеми этими таблицами. Затем старые журналы сжимаются в myisampack, поэтому они занимают намного меньше места, читаются быстрее и становятся доступными только для чтения. Работает очень быстро.
2,5 миллиона записей должны быть без проблем. Совместное использование схемы поможет. Кроме того, mysqltuner.pl (упомянутый в другом ответе) предупредит вас о некоторых проблемах my.cnf, таких как innodb_buffer_pool, который меньше размера ваших индексов. Определенно запустите это. innodb_buffer_pool должен быть установлен как можно выше.
Если у вас есть столбцы TEXT, любые запросы, включающие сканирование большого количества строк, будут работать намного лучше, если вы переместите эти столбцы в отдельную таблицу. Более того, используйте плагин InnoDB, Percona Server или MariaDB и включите сжатие для этих новых таблиц текстовых столбцов.