|
|
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
значит сгенерировал таблицу на милиард записей, без ключей и прочего. (чтобы быстро генерировать) теперь индексирую, пол суток прошло, обработано только 12 милионов записи, тоесть весь процес займёт около 40 суток...мне кажеться что сдесь чтото не то. ТАБЛИЦА Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Тоесть таблица была без единого ключа, сгенерировал данные, теперь одним альтером хочу добавить все ключи. ЗЫ поменял названия полей, чтоб не сбивать с толку что и зачем. ведь логика полей не влияет на медлительность индексации :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 12:27:20 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
сколько выделено памяти? есть подозрение, что время уходит на дисковые операции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 12:31:28 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. http://linux.yaroslavl.ru/docs/www/mysql/doc/Insert_speed.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 12:42:15 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
вадяВоссоздайте индексы при помощи команды myisamchkтам же InnoDB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 13:05:43 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
miksoftвадяВоссоздайте индексы при помощи команды myisamchkтам же InnoDB не заметил... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 13:07:54 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
вадясколько выделено памяти? есть подозрение, что время уходит на дисковые операции Та тоже подумал, только какие имено параметры смотреть надо, там же много по памяти?! ЗЫ кслову на сервере 16Гб оперативки, работает только Mysql и только одна база. так что можно не экономить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 13:23:47 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
судя по всему у тебя разовая операция - можно отдать всю и посмотреть заогрузку диска - разными прогами, в зависимости от оси ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 13:38:06 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
вадясудя по всему у тебя разовая операция - можно отдать всю и посмотреть заогрузку диска - разными прогами, в зависимости от оси так всю отдать не проблема, но куда именно??? там с десяток настроек по памяти?? key_buffer_size ? я эту переменную на лету изменил в базе быстрее не стало, или её только через конфиг можно менять ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 13:50:29 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
как правило, сколько генерил, столько и будет индексироваться. alex564657498765453Тоесть таблица была без единого ключа, сгенерировал данные, теперь одним альтером хочу добавить все ключи. При alter mysql обычно (так всегда традиционно было, может поменяли в последних версиях) копирует данные в новую таблицу. Это в общем-то полная Ж. Так что обычный паттерн "Залил -- проиндексировал" с MySQL не прокатывает -- становится антипаттерном. Если там только индексы, может быть всё лучше, но тем не менее. Про Inno -- там у таблицы первичный ключ всегда кластерный, поэтому его надо создавать заранее, иначе -- опять таки полное копирование таблицы в новое место, но это уже безотносительно идиотизма ядра MySQL. Ну и на последок -- миллиард -- вовсе не шуточки, по хорошему это вообще не для MySQL. MySQL -- хранить говноданные говноинтернетпользователей на говношардингах. Это например 1000 маленьких MySQL-иков по миллиону записей в каждом. С миллионом он справляется легко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 14:43:53 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
MasterZivПри alter mysql обычно (так всегда традиционно было, может поменяли в последних версиях) копирует данные в новую таблицу. Это в общем-то полная Ж.Не встречал такого ни разу. Новая копия возникает при изменении типов/состава полей. Но не при создании индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:12:48 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
авторНу и на последок -- миллиард -- вовсе не шуточки, по хорошему это вообще не для MySQL. у вас какие то странные представления о MySql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:18:17 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
miksoftMasterZivПри alter mysql обычно (так всегда традиционно было, может поменяли в последних версиях) копирует данные в новую таблицу. Это в общем-то полная Ж.Не встречал такого ни разу. Новая копия возникает при изменении типов/состава полей. Но не при создании индексов. авторPRIMARY KEY (`f1`), UNIQUE INDEX `uk1` (`f2`, `f4`), UNIQUE INDEX `uk2` (`f1`) USING BTREE, INDEX `ak1_idx` (`f4`), INDEX `ak2_idx` (`f3`), авторТоесть таблица была без единого ключа, сгенерировал данные, теперь одним альтером хочу добавить все ключи. или ктото не договаривает или ктото первичный ключ меняет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:19:25 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
авторПри alter mysql обычно (так всегда традиционно было, может поменяли в последних версиях) копирует данные в новую таблицу. Это в общем-то полная Ж. ms sql server в лог копирует таблицу целиком при alter. и ничего никто еще не умер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:20:39 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
ScareCrowmiksoftпропущено... Не встречал такого ни разу. Новая копия возникает при изменении типов/состава полей. Но не при создании индексов. авторPRIMARY KEY (`f1`), UNIQUE INDEX `uk1` (`f2`, `f4`), UNIQUE INDEX `uk2` (`f1`) USING BTREE, INDEX `ak1_idx` (`f4`), INDEX `ak2_idx` (`f3`), авторТоесть таблица была без единого ключа, сгенерировал данные, теперь одним альтером хочу добавить все ключи. или ктото не договаривает или ктото первичный ключ меняет.Да, согласен насчет первичного ключа. Его создание в InnoDB потребует полной перезаписи таблицы. Про него сгоряча не подумал, т.к. не привык к таблицам без ПК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:23:34 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453так всю отдать не проблема, но куда именно??? там с десяток настроек по памяти?? key_buffer_size ?Нет, key_buffer_size это только для MyISAM. Для начала проверьте, что innodb_buffer_pool_size приличного размера. Например, 8G. Но лучше, наверное, пересоздать табличку с ПК заново. Думаю, выйдет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:30:48 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
miksoftalex564657498765453так всю отдать не проблема, но куда именно??? там с десяток настроек по памяти?? key_buffer_size ?Нет, key_buffer_size это только для MyISAM. Для начала проверьте, что innodb_buffer_pool_size приличного размера. Например, 8G. Но лучше, наверное, пересоздать табличку с ПК заново. Думаю, выйдет быстрее. innodb_buffer_pool_size поставил 10Гб а также innodb_buffer_pool_size = 10G innodb_flush_log_at_trx_commit = 0 - пойдёт innodb_thread_concurrency = 8 - нашол формулу типо число ядер на два, ядер 8 но подозреваю что их 4, 8 это виртуальные ядра(8 потоков) innodb_flush_method = O_DIRECT, написано рекомендуеться для очень больших файлов данных(200Гб это достаточно большой) ну а нащот пересоздать файл данных, там же связаная таблица есть ещо, где 2+млрд записей вообщем это двое суток генерировалося в таблицы без индексов. или даже чуть больше. вообщем счас пошло копирование во временную таблицу медленно... за час всего 3млн записей, или он копирует сразу создавая индексы? ЗЫ нащо сразу первичного ключа, я подумал что это замедлит генерацию данных, вставку. ЗЫЗЫ - генерировала хранимая процедура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:40:09 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453нащо сразу первичного ключа, я подумал что это замедлит генерацию данных, вставку.Скорее, даже ускорит. У InnoDB есть фича. Поскольку без ПК в нем таблицы не могут существовать в принципе, в тех случаях, когда пользователь не указал ПК явно и нет ни одного уникального ключа, создается невидимое целочисленное поле размером 6 байт, которое и используется как ПК. Т.е. помимо данных таблицы придется на диск писать еще и 6 ГБ бесполезных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:50:10 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
вообщем решил ещо раз рестартануть, только теперь без опции innodb_flush_method = O_DIRECT (это же виртуальный сервер, и диск у него виртуальный ,то есть прямой работы один чорт не будет, а вот лишний геморой может сделать) ну и пулсайз 12 гб сделал. обработка во временую таблицу вроде пошла быстрее. до этого было за секунду гдето 1-3 тыщи записей, теперь около 10тыщ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:51:09 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
miksoftalex564657498765453нащо сразу первичного ключа, я подумал что это замедлит генерацию данных, вставку.Скорее, даже ускорит. У InnoDB есть фича. Поскольку без ПК в нем таблицы не могут существовать в принципе, в тех случаях, когда пользователь не указал ПК явно и нет ни одного уникального ключа, создается невидимое целочисленное поле размером 6 байт, которое и используется как ПК. Т.е. помимо данных таблицы придется на диск писать еще и 6 ГБ бесполезных данных. мдя, походу я немного соврал, говоря что я подумал. похоже то ли не думал, то ли не тем девайсом думал., я же знал про "невидимый" первичный ключ :):):) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:52:32 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453это же виртуальный сервер, и диск у него виртуальныйБоюсь, еще тут могут быть потери по скорости дисков в разы... Зависит от того, как именно подключен диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 15:52:59 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
У меня идея, может дабы не перегенерировать данные на милиард записей, и связаные 2млрд (там функция ша1 пару раз вызываеться, плюс формул хватает) а создать рядом таблицу, только уже с явнозаданым примари кеем и перекопировать данные? в исходной таблице данные уже размещены в порядке возрастания этого поля, что для ПК. ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 19:23:05 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453а создать рядом таблицу, только уже с явнозаданым примари кеем и перекопировать данные?Собственно, создание ПК именно это и делает. Но по неизвестным мне причинам бывает, что ручное действие происходит быстрее, чем неявное. Так что пробуйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2014, 19:31:13 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
Опять проблема. раньше при индексации таблиц на милиард записей, я столкнулся что с добавлением примари кея, таблица заново пересоздаёться на винчестере, и поэтому долго. сделал как советовали, заново сгенерировал таблици на 1 и 2 млрд записей(родитель, дочерняя) и индексация прошла сравнительно быстро, за сутки что одна что другая проиндексировались. Но теперь когда я попытался добавить внешние ключи, опять теже грабли - идёт копирование таблицы во временый файл, приблизительно 1000 записей в секунду обрабатывает, так что перспектива - 1000 000 секунд. ожидания. Но , если я сразу сделаю таблицу с примари кеем, и внешними ключами = индексами, то я буду долго генерировать этот обьём данных. там вставка капец как медленно пойдёт. вот и возникает вопрос...так как же создать тогда для тестов базу с таким обьёмом данным, с внешними ключами. ЗЫ база получаеться такой FK - внешний ключ EK- уникальный ключ AK - индекс C - мощность(число записей) t1: FK->t2(bigint) EK(varchar[40]) C=150K t2: FK->t1(int) FK->t2(bigint) EK(binary[20]) EK(varbinary[255],bigint[=FK->t2]) C=16M t3: FK->t1(int) FK->t2(bigint) EK(binary[20]) EK(varbinary[255],bigint[=FK->t2]) C=1G t4: FK->t3(bigint) AK(int) AK(int) AK(int) C=2G t2,t3 - второй уникальный ключ по двум полям шифрованая строка(имя) плюс сссылка на родителя. ибо имена могут совпадать у елементов, но при условии разного родителя. ======= подойдёт любая помощь , как и по генерации быстрой подобной базы, так возможно кто-то покритикует ещо структуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 12:18:14 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Когда узнаешь как, расскажи и мне. Я например не знаю, что в этом случае делать. Ну кроме как патчить код мыскля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 12:31:27 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
MasterZiv, дык отпишу сюда, только давайте подумаем... как сделать. ведь часто что-то кажеться не возможным, оказываеться не только возможным, а ещо и болле простым. я вон недавно в пхп столкнулся с проблемой, колега при аналогичной проблеме на ноуд-джиес перешол, так как форумы говорят что не возможно без написания своего мини протокола и обмена через сокеты. оказываеться проблема решаема, более того, её решение помогает и в задаче ускорения работы серверной части защёт распаралеливания. вот так вот бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 13:04:28 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=181&tid=1834970]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 321ms |

| 0 / 0 |
