|
|
|
индексация в 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 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
может с переменными поиграться например @@FOREIGN_KEY_CHECKS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 13:08:57 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
bochkov, да это я знаю, позволит не делать проверку ключа внешнего: при проверке, если не может быть ребёнка без родителя, всегда идёт проверка наличия родителя... и времени не хило занимает но большей проблемой являеться то, что внешний ключ, означает наличие индекса - а вот добавление в индекс...вот это время сжирает страшно при генерации данных и вставкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 13:14:44 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453но большей проблемой являеться то, что внешний ключ, означает наличие индекса - а вот добавление в индекс...вот это время сжирает страшно при генерации данных и вставкой. Внешний ключ не означает наличие индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 13:32:09 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
MasterZiv, не понял... это как? в мускле можно создать констрейн без индексов?...круто... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:10:40 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan. In the referencing table, there must be an index where the foreign key columns are listed as the first columns in the same order. Such an index is created on the referencing table automatically if it does not exist. This index might be silently dropped later, if you create another index that can be used to enforce the foreign key constraint. index_name, if given, is used as described previously. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:45:33 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453MasterZiv, не понял... это как? в мускле можно создать констрейн без индексов?...круто... в Оракле же можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:06:13 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
давай еще раз. ты СНАЧАЛА делаешь нужный индекс а ПОТОМ вешаешь на него констрейнт? или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:07:46 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
автор, так как форумы говорят что не возможно без написания своего мини протокола и обмена через сокеты. ЧЕГО???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:10:29 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html авторTo avoid copying the table, disable foreign_key_checks during constraint creation. начиная с Mysql 5.6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:13:54 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
ScareCrow https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html авторTo avoid copying the table, disable foreign_key_checks during constraint creation. начиная с Mysql 5.6 как я и сказал, то что кажеться не решаемым, вполне может иметь очень простое решение. так ..смайлика обнимашки целовашки нету... ну ты понял . СПАСИБИЩЕ! ЧЕЛОВЕЧИЩЕ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:36:31 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
bochkovможет с переменными поиграться например @@FOREIGN_KEY_CHECKS и тебе спасибо, я просто подумал что ты гадаешь, и думал что перезапись таблицы связана с имменением структуры, как при добавке примари кея было, и что отключение проверок ничего не даст. спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:38:07 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453ScareCrow https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html пропущено... начиная с Mysql 5.6 как я и сказал, то что кажеться не решаемым, вполне может иметь очень простое решение. так ..смайлика обнимашки целовашки нету... ну ты понял . СПАСИБИЩЕ! ЧЕЛОВЕЧИЩЕ! чорт, у меня 5.5. вообщем всёравно копирует таблицу. У меня счас есть, таблицы - куда я нагенерировал кучу данных. Туда уже добавлены индексы которые должны быть. теперь пытаюсь добавить ограничения - внешние ключи типа такого команда Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 16:40:23 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
авторначиная с Mysql 5.6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 17:06:09 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
ScareCrow, да я видел это... так мне то что теперь делать... мнеж надо както базу создать на том что есть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 17:09:01 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
alex564657498765453 , а может, просто влопп ? Код: sql 1. 2. 3. new_table - пустая таблица со всеми индексами сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 17:46:12 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, и сколько по времени оно будет один милиард записей закидывать?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 18:31:26 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
Cygapb-007 alex564657498765453 , а может, просто влопп ? Код: sql 1. 2. 3. new_table - пустая таблица со всеми индексами сразу. вообщем попробовал, после того как процесс дошол до милиона записей, скорость установилась 1250 записей в секунду. и потихоньку продолжает падать... похоже оно индексы заново строит. так что не быстрей счас чем копирование таблицы, но в перспективе будет медленее.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 18:51:00 |
|
||
|
индексация в innodb
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторначиная с Mysql 5.6 может я чтото не так делаю. обновил до версии 5.6 Код: sql 1. 2. 3. делаю Код: sql 1. 2. 3. 4. 5. 6. убеждаюсь что стали фолс значениями. в новом подключении к базе убеждаюсь что проверка отключена и запускаю свой Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. и всеравно процес пошол copy to tmp table ктото может подсказать что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 11:21:13 |
|
||
|
|

start [/forum/topic.php?all=1&fid=47&tid=1834970]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 431ms |

| 0 / 0 |
