Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / индексация в innodb / 25 сообщений из 43, страница 1 из 2
09.04.2014, 12:27:20
    #38609649
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
значит сгенерировал таблицу на милиард записей, без ключей и прочего. (чтобы быстро генерировать)

теперь индексирую, пол суток прошло, обработано только 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.
CREATE TABLE `files` (
	`PK` BIGINT(20) NOT NULL AUTO_INCREMENT,
	`f1` BINARY(20) NOT NULL,
	`f2` BINARY(20) NOT NULL,
	`f3` INT(11) NULL DEFAULT NULL,
	`f4` BIGINT(20) NOT NULL,
	`f5` VARBINARY(255) NULL DEFAULT NULL,
	`f6` BINARY(32) NOT NULL,
	`f7` SMALLINT(6) NULL DEFAULT NULL,
	`f8` SMALLINT(6) NULL DEFAULT '0',
	`f9` VARCHAR(255) NULL DEFAULT NULL,
	`f10` BIGINT(20) NULL DEFAULT NULL,
	`f11` SMALLINT(6) NULL DEFAULT NULL,
	`f12` INT(11) NULL DEFAULT NULL,
	`f13` SMALLINT(6) NULL DEFAULT '0',
	`f14` TINYINT(4) NULL DEFAULT '1',
	`f15` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	`f16` TIMESTAMP NULL DEFAULT NULL,
	PRIMARY KEY (`f1`),
	UNIQUE INDEX `uk1` (`f2`, `f4`),
	UNIQUE INDEX `uk2` (`f1`) USING BTREE,
	INDEX `ak1_idx` (`f4`),
	INDEX `ak2_idx` (`f3`),
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB



Тоесть таблица была без единого ключа, сгенерировал данные, теперь одним альтером хочу добавить все ключи.


ЗЫ поменял названия полей, чтоб не сбивать с толку что и зачем. ведь логика полей не влияет на медлительность индексации :)
...
Рейтинг: 0 / 0
09.04.2014, 12:31:28
    #38609664
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
сколько выделено памяти?
есть подозрение, что время уходит на дисковые операции
...
Рейтинг: 0 / 0
09.04.2014, 12:42:15
    #38609688
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
Код: plaintext
1.
2.
3.
Воссоздайте индексы при помощи команды myisamchk -r -q /path/to/db/tbl_name. 
Эта процедура создает индексное дерево в памяти, перед тем как записать его на диск, 
что гораздо быстрее за счет исключения большого количества дисковых операций. 
Индексное дерево, получившееся в результате, к тому же отлично сбалансировано. 

http://linux.yaroslavl.ru/docs/www/mysql/doc/Insert_speed.html
...
Рейтинг: 0 / 0
09.04.2014, 13:05:43
    #38609750
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
вадяВоссоздайте индексы при помощи команды myisamchkтам же InnoDB
...
Рейтинг: 0 / 0
09.04.2014, 13:07:54
    #38609758
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
miksoftвадяВоссоздайте индексы при помощи команды myisamchkтам же InnoDB


не заметил... :)
...
Рейтинг: 0 / 0
09.04.2014, 13:23:47
    #38609797
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
вадясколько выделено памяти?
есть подозрение, что время уходит на дисковые операции

Та тоже подумал, только какие имено параметры смотреть надо, там же много по памяти?!

ЗЫ
кслову на сервере 16Гб оперативки, работает только Mysql и только одна база. так что можно не экономить
...
Рейтинг: 0 / 0
09.04.2014, 13:38:06
    #38609839
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
судя по всему у тебя разовая операция - можно отдать всю
и посмотреть заогрузку диска - разными прогами, в зависимости от оси
...
Рейтинг: 0 / 0
09.04.2014, 13:50:29
    #38609874
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
вадясудя по всему у тебя разовая операция - можно отдать всю
и посмотреть заогрузку диска - разными прогами, в зависимости от оси

так всю отдать не проблема, но куда именно??? там с десяток настроек по памяти??

key_buffer_size ?

я эту переменную на лету изменил в базе быстрее не стало, или её только через конфиг можно менять ?
...
Рейтинг: 0 / 0
09.04.2014, 14:43:53
    #38609978
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
как правило, сколько генерил, столько и будет индексироваться.

alex564657498765453Тоесть таблица была без единого ключа, сгенерировал данные, теперь одним альтером хочу добавить все ключи.


При alter mysql обычно (так всегда традиционно было, может поменяли в последних версиях) копирует данные в новую таблицу. Это в общем-то полная Ж.

Так что обычный паттерн "Залил -- проиндексировал" с MySQL не прокатывает -- становится антипаттерном.

Если там только индексы, может быть всё лучше, но тем не менее.

Про Inno -- там у таблицы первичный ключ всегда кластерный, поэтому его надо создавать заранее, иначе -- опять таки полное копирование таблицы в новое место, но это уже безотносительно идиотизма ядра MySQL.

Ну и на последок -- миллиард -- вовсе не шуточки, по хорошему это вообще не для MySQL.

MySQL -- хранить говноданные говноинтернетпользователей на говношардингах. Это например 1000 маленьких MySQL-иков по миллиону записей в каждом. С миллионом он справляется легко.
...
Рейтинг: 0 / 0
09.04.2014, 15:12:48
    #38610031
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
MasterZivПри alter mysql обычно (так всегда традиционно было, может поменяли в последних версиях) копирует данные в новую таблицу. Это в общем-то полная Ж.Не встречал такого ни разу. Новая копия возникает при изменении типов/состава полей. Но не при создании индексов.
...
Рейтинг: 0 / 0
09.04.2014, 15:18:17
    #38610041
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
авторНу и на последок -- миллиард -- вовсе не шуточки, по хорошему это вообще не для MySQL.
у вас какие то странные представления о MySql
...
Рейтинг: 0 / 0
09.04.2014, 15:19:25
    #38610046
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
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`),


авторТоесть таблица была без единого ключа, сгенерировал данные, теперь одним альтером хочу добавить все ключи.

или ктото не договаривает или ктото первичный ключ меняет.
...
Рейтинг: 0 / 0
09.04.2014, 15:20:39
    #38610048
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
авторПри alter mysql обычно (так всегда традиционно было, может поменяли в последних версиях) копирует данные в новую таблицу. Это в общем-то полная Ж.

ms sql server в лог копирует таблицу целиком при alter. и ничего никто еще не умер.
...
Рейтинг: 0 / 0
09.04.2014, 15:23:34
    #38610052
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
ScareCrowmiksoftпропущено...
Не встречал такого ни разу. Новая копия возникает при изменении типов/состава полей. Но не при создании индексов.

авторPRIMARY KEY (`f1`),
UNIQUE INDEX `uk1` (`f2`, `f4`),
UNIQUE INDEX `uk2` (`f1`) USING BTREE,
INDEX `ak1_idx` (`f4`),
INDEX `ak2_idx` (`f3`),


авторТоесть таблица была без единого ключа, сгенерировал данные, теперь одним альтером хочу добавить все ключи.

или ктото не договаривает или ктото первичный ключ меняет.Да, согласен насчет первичного ключа.
Его создание в InnoDB потребует полной перезаписи таблицы.

Про него сгоряча не подумал, т.к. не привык к таблицам без ПК.
...
Рейтинг: 0 / 0
09.04.2014, 15:30:48
    #38610067
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
alex564657498765453так всю отдать не проблема, но куда именно??? там с десяток настроек по памяти??

key_buffer_size ?Нет, key_buffer_size это только для MyISAM.
Для начала проверьте, что innodb_buffer_pool_size приличного размера. Например, 8G.

Но лучше, наверное, пересоздать табличку с ПК заново. Думаю, выйдет быстрее.
...
Рейтинг: 0 / 0
09.04.2014, 15:40:09
    #38610090
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
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млн записей, или он копирует сразу создавая индексы?

ЗЫ
нащо сразу первичного ключа, я подумал что это замедлит генерацию данных, вставку.

ЗЫЗЫ - генерировала хранимая процедура.
...
Рейтинг: 0 / 0
09.04.2014, 15:50:10
    #38610117
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
alex564657498765453нащо сразу первичного ключа, я подумал что это замедлит генерацию данных, вставку.Скорее, даже ускорит.
У InnoDB есть фича. Поскольку без ПК в нем таблицы не могут существовать в принципе, в тех случаях, когда пользователь не указал ПК явно и нет ни одного уникального ключа, создается невидимое целочисленное поле размером 6 байт, которое и используется как ПК.
Т.е. помимо данных таблицы придется на диск писать еще и 6 ГБ бесполезных данных.
...
Рейтинг: 0 / 0
09.04.2014, 15:51:09
    #38610118
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
вообщем решил ещо раз рестартануть, только теперь без опции
innodb_flush_method = O_DIRECT
(это же виртуальный сервер, и диск у него виртуальный ,то есть прямой работы один чорт не будет, а вот лишний геморой может сделать)

ну и пулсайз 12 гб сделал.

обработка во временую таблицу вроде пошла быстрее. до этого было за секунду гдето 1-3 тыщи записей, теперь около 10тыщ
...
Рейтинг: 0 / 0
09.04.2014, 15:52:32
    #38610124
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
miksoftalex564657498765453нащо сразу первичного ключа, я подумал что это замедлит генерацию данных, вставку.Скорее, даже ускорит.
У InnoDB есть фича. Поскольку без ПК в нем таблицы не могут существовать в принципе, в тех случаях, когда пользователь не указал ПК явно и нет ни одного уникального ключа, создается невидимое целочисленное поле размером 6 байт, которое и используется как ПК.
Т.е. помимо данных таблицы придется на диск писать еще и 6 ГБ бесполезных данных.


мдя, походу я немного соврал, говоря что я подумал. похоже то ли не думал, то ли не тем девайсом думал., я же знал про "невидимый" первичный ключ :):):)
...
Рейтинг: 0 / 0
09.04.2014, 15:52:59
    #38610126
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
alex564657498765453это же виртуальный сервер, и диск у него виртуальныйБоюсь, еще тут могут быть потери по скорости дисков в разы... Зависит от того, как именно подключен диск.
...
Рейтинг: 0 / 0
09.04.2014, 19:23:05
    #38610414
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
У меня идея, может дабы не перегенерировать данные на милиард записей, и связаные 2млрд
(там функция ша1 пару раз вызываеться, плюс формул хватает)

а создать рядом таблицу, только уже с явнозаданым примари кеем и перекопировать данные? в исходной таблице данные уже размещены в порядке возрастания этого поля, что для ПК.

?!
...
Рейтинг: 0 / 0
09.04.2014, 19:31:13
    #38610418
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
alex564657498765453а создать рядом таблицу, только уже с явнозаданым примари кеем и перекопировать данные?Собственно, создание ПК именно это и делает.
Но по неизвестным мне причинам бывает, что ручное действие происходит быстрее, чем неявное. Так что пробуйте.
...
Рейтинг: 0 / 0
16.04.2014, 12:18:14
    #38616315
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
Опять проблема.

раньше при индексации таблиц на милиард записей, я столкнулся что с добавлением примари кея, таблица заново пересоздаёться на винчестере, и поэтому долго.

сделал как советовали, заново сгенерировал таблици на 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 - второй уникальный ключ по двум полям шифрованая строка(имя) плюс сссылка на родителя. ибо имена могут совпадать у елементов, но при условии разного родителя.

=======
подойдёт любая помощь , как и по генерации быстрой подобной базы, так возможно кто-то покритикует ещо структуру.
...
Рейтинг: 0 / 0
16.04.2014, 12:31:27
    #38616342
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
alex564657498765453,

Когда узнаешь как, расскажи и мне.
Я например не знаю, что в этом случае делать.
Ну кроме как патчить код мыскля.
...
Рейтинг: 0 / 0
16.04.2014, 13:04:28
    #38616401
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексация в innodb
MasterZiv,

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

оказываеться проблема решаема, более того, её решение помогает и в задаче ускорения работы серверной части защёт распаралеливания.

вот так вот бывает.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / индексация в innodb / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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