|
|
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть таблица, состоящая из 6 млрд записей. Нужно добавить индекс по одному из столбцов (тип integer). Пробовал делать Код: sql 1. 2. MySQL задумался на неделю, в итоге ничего не сделал (наверное, таймаут какой-то вышел, хз). Нагуглил "Fast Index Creation". Подскажите, пожалуйста, пример, как в моем случае можно этот подход применить. Заранее большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 14:01:02 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
Какой движок у таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 22:43:08 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
Движок InnoDB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 10:43:26 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
kt368, Покажите полный DDL таблицы. Во время создания индекса еще какая-нибудь нагрузка была? Данная таблица еще как либо использовалась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 10:46:24 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
В документации под fast index creation для innodb подразумевалось, что создание ДВУХ индексов одним оператором ALTER одновременно может быть быстрее чем последовательное создание. Так что не поможет ничем. Почему было принято решение хранить в innodb ? Если это данные с автоматики не связанные с финансами и чем-то эдаким, то может не мучаться и хранить в myisam ? В низкоконкурентной среде и с небольшим объемом памяти myisam почти всегда выигрывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 11:28:14 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
CREATE TABLE `raw_data` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `case_index` int(10) DEFAULT NULL, `index_in_case` tinyint(3) unsigned DEFAULT NULL, `ampl` float DEFAULT NULL, `ph` float DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6614310478 DEFAULT CHARSET=latin1$$ Это вывод MySQL Workbench на запрос ПК по таблице - Copy to Clipboard - Create Statement. Во время создания индекса не было никакой нагрузки, ничего не выполнялось (смотрел при помощи show processlist, хотя я и без него знаю, что я ничего не запускал). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 11:30:09 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
Этор данные моделирования работы электрической схемы, я их храню в MySQL, потом - обрабатываю с помощью скриптов на Python'e. В них уже ничего не вносится, только выборка данных по определённым критериям. Вот для одной из выборок тут предложили создать индекс по полю "case_index". Вот я и пытаюсь это сделать. Насчёт MyISAM или InnoDB - я с БД новичёк, подскажите почему в данном случае лучше MyISAM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 11:35:04 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
kt368, у вас вообще фактически однопользовательская система ? Опасно делать обобщения, но в вашем случае рискну предположить, что все же будет лучше использовать myisam. Система у вас однопользовательская ведь. Не забудьте подкрутить настройку key_buffer_size. Действительно в одной электрической схеме можно найти первичных фактов для бд на 365 гб ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 11:44:37 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
Да, система однопользовательская. Насчёт размера - в БД хранятся частотные характеристики (графики АЧХ и ФЧХ) схемы из 48 элементов, номиналы которых варьировались независимо один от другого, методом перебора. Всего получилось 65 млн комбинаций номиналов элементов схемы. Для каждой комбинации хранятся значения модуля и фазы для 101 частоты. Итого имеем более 6 млрд строк в таблице. Тут можно примерно в 4 раза уменьшить кол-во данных (есть повторяющиеся из-за симметричности схемы), но для того чтоб с такой огромной таблицей получалось работать и пытаюсь создать индекс. Примерно так. Ладно, буду пробовать перейти на MyISAM, попробую там. З.Ы. это часть научного исследования в университете, аспирантура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 11:58:03 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
kt368 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Это вывод MySQL Workbench на запрос ПК по таблице - Copy to Clipboard - Create Statement. Во время создания индекса не было никакой нагрузки, ничего не выполнялось (смотрел при помощи show processlist, хотя я и без него знаю, что я ничего не запускал).Объясните, пожалуйста, с какой целью создаются 2 одинаковых индекса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 12:09:25 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
Cygapb-007Объясните, пожалуйста, с какой целью создаются 2 одинаковых индекса?тут у кого-то недавно воркбенч уже чудил... kt368, Код: sql 1. то же самое выдаёт, или там всё же этого "unique key" нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 12:25:23 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
kt368, мне кажется такие задачи не решаются с помощью python и mysql. Как-то же проектируют схемы с гораздо большим числом элементов. Наверняка, такие САПР все в памяти держат и используют какие-то алгоритмы для исключения полного перебора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 12:35:35 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
Ответ для tanglir : Сейчас пока не могу это проверить, запустил команду преобразования таблицы из InnoDB в MyISAM. Да, а подскажите ещё, Код: sql 1. Сначала создаст новую таблицу с движком MyISAM, а потом скопирует все из старой таблицы в новую, удалит старую и переименует новую в tbl1? Т.е. если моя таблица весит 365 Гб, то для операции смены движка мне нужно ещё хотя бы 365 Гб пустого пространства на диске? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 12:36:15 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
О, выдало ошибку: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 12:38:37 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
kt368 Т.е. если моя таблица весит 365 Гб, то для операции смены движка мне нужно ещё хотя бы 365 Гб пустого пространства на диске? возможно немного меньше, ведь это myisam, но порядки примерно те же. я думаю никак не меньше 300 гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 13:00:19 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
netwindkt368, мне кажется такие задачи не решаются с помощью python и mysql. Как-то же проектируют схемы с гораздо большим числом элементов. Наверняка, такие САПР все в памяти держат и используют какие-то алгоритмы для исключения полного перебора. Может быть, не уверен. Мне нужно исследовать форму АЧХ и ФЧХ большого количества вариантов комбинаций, я как мог минимизировал кол-во этих комбинаций при создании на питоне списка комбинаций параметров элементов, но всё учесть не смог. Считал в Micro-Cap, запуская его питоном через интерфейс командной строки, при этом подсовывал Micro-Cap'у файлик с параметрами. Микрокап генерировал текстовые файлы с численными значениями АЧХ и ФЧХ, которые питон вводил в БД MySQL. Вот теперь у меня такая огромная таблица. [quot tanglir]Cygapb-007 Код: sql 1. то же самое выдаёт, или там всё же этого "unique key" нет?Вот что он выдает: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. netwindвозможно немного меньше, ведь это myisam, но порядки примерно те же. я думаю никак не меньше 300 гб.Вот чёрт, надо где-то места раздобыть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 13:36:02 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
kt368netwindвозможно немного меньше, ведь это myisam, но порядки примерно те же. я думаю никак не меньше 300 гб.Вот чёрт, надо где-то места раздобыть...Так для индекса тоже места надо немало. Конечно, не столько же, но, на глазок, примерно половину от размера таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 13:42:30 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
Полуоффтоп: Я бы для такой задачи использовал плоский файл, а не таблицу в БД. Тогда поле `id`, вероятно, стало бы не нужно. От `case_index` можно было бы избавиться позиционированием блоков данных с шагом в 100 условных записей. Тогда и объем хранимых данных заметно сократился бы. А некоторые операции поиска выполнялись бы за константное время, а не логарифмическое, как в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 13:58:40 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
kt368, аспирантура... странно как-то всё это. 1. 65млн комбинаций параметров к 48 элементам... может быть... но сразу возникает вопрос: а метод "градиентного спуска" не применим совсем или это после него столько осталось? (ежели бы я так оптимизировал оптические схемы в свою практику - наверное кое-что, до сих пор обсчитывалось, а не стояло где надо) 2. надо исследовать форму АЧХ и ФЧХ ... это понятно, но сразу возникает другой вопрос: их надо исследовать во взаимосвязи или это можно делать последовательно? если да, тогда непонятен предыдущий вопрос по выборке по 101 записи... взаимосвязи исследуются "поперек" частотного разреза - по параметрам... и потребуется "другой" индекс. если нет - то зачем пихать все АЧХ и ФЧХ в одну таблицу? Получили в микрокапе результат - исследовали, получаем следующий... он вроде как на это даже заточен... нет? Если надо "потом" сравнивать результаты, то опятьже правильнее их и собирать в одну таблицу... да и сравнивать проще, нет? 3. запустить и пересчитать через тот же скрипт на Питоне - дорого и невозможно? Если это можно повторить, то создайте табличку со всеми нужными индексами сразу в MyISAM и "в путь"... по второму разу. Это по-крайней мере не потребует реконфигурации всей системы (я так понимаю, что "лишних" 300-700 гектаров в ней нет)... ... не знаю, может я и не прав... но как-то странно всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 14:25:25 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
Arhat109kt368, 1. 65млн комбинаций параметров к 48 элементам... может быть... но сразу возникает вопрос: а метод "градиентного спуска" не применим совсем или это после него столько осталось?Незнаю как его прикрутить к моей задаче. Мне нужно именно иметь на винчестере все таблицы с данными АЧХ и ФЧХ, чтоб потом можно было их по-разному исследовать, например определить минимальное количество частот, на которых нужно провести измерение частотной характеристики для того, чтоб по полученным данным можно с заданной погрешностью аппроксимировать эту частотную характеристику, чтоб не пропустить на частотной характеристики какие-то "интересные" моменты, перегибы, и т.д. Arhat1092. надо исследовать форму АЧХ и ФЧХ ... это понятно, но сразу возникает другой вопрос: их надо исследовать во взаимосвязи или это можно делать последовательно?Можно последовательно Arhat109если да, тогда непонятен предыдущий вопрос по выборке по 101 записи... взаимосвязи исследуются "поперек" частотного разреза - по параметрам... и потребуется "другой" индекс.Вы меня не так поняли, каждая частотная характеристика (для каждой комбинации параметров элементов схемы) состоит из 101-го значения, вот их я и выбираю. Все это в одной таблице, поле case_index содержит счётчик комбинаций, т.е. для определённой комбинации (например номер 1) есть 101 строка со значением case_index=1. Для комбинации номер 2, соответственно есть 101 строка с case_index=2. и т.д. Arhat109если нет - то зачем пихать все АЧХ и ФЧХ в одну таблицу? Получили в микрокапе результат - исследовали, получаем следующий... он вроде как на это даже заточен... нет? Если надо "потом" сравнивать результаты, то опятьже правильнее их и собирать в одну таблицу... да и сравнивать проще, нет?Потому что пока моделировалось я придумывал алгоритмы, по которым можно исследовать эти частотные характеристики. Теперь у меня есть база с АЧХ и ФЧХ, и я хочу над ними проводить разные "эксперименты" - получать разные интегральные параметры. Arhat1093. запустить и пересчитать через тот же скрипт на Питоне - дорого и невозможно? Если это можно повторить, то создайте табличку со всеми нужными индексами сразу в MyISAM и "в путь"... по второму разу. Это по-крайней мере не потребует реконфигурации всей системы (я так понимаю, что "лишних" 300-700 гектаров в ней нет)...Ой, не хочу, больше месяца считало...лучше где-нибудь раздобуду ещё один винчестер, места есть где его добыть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 14:46:40 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
kt368, :) Правильно я вас понял... только "задача у вас другая"... вам захотелось собрать все варианты, а потом их исследовать (может как раз аспирантура по методам исследования, а не получению оптимавльного варианту)... собрали - радуйтесь :). Ничего акромя "прикупить" нужного объема - в голову не приходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 15:20:54 |
|
||
|
Создать индекс огромной таблицы
|
|||
|---|---|---|---|
|
#18+
kt368, попробуйте перевести InnoDB на формат хранения файлов Barracuda со сжатием. Создайте резервную копию БД и файла my.ini из каталога, где установлен MySQL. Затем в этот файл, в раздел с параметрами InnoDB нужно добавьте: innodb_file_per_table innodb_file_format=Barracuda После этого нужно перезапустить службу MySQL. Затем для вышей таблицы (можно также и для всех других таблиц), выполните команду: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 21:33:20 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38382377&tid=1836144]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 427ms |

| 0 / 0 |
