|
|
|
| Добрый день,
Есть БД, таблицы типа innodb.
Общее кол-во записей в таблицах больше 20 млн. Соответсвенно и файл ibdata1 весит 10 гигабайт. Решил поудалять записи из таблиц с целью уменьшить как кол-записей так и размер БД, НО сам файл ibdata1 как весил 10Гб, так и остался, при том что кол-во записей сократилось втрое.
Что такое может быть? Вроде и комп и mysql перегружал - не помогает | |
|
|
|
|
|
|
|
для: mstf
(23.05.2006 в 11:33)
| | запрос OPTIMIZE TABLE таблица пробовали? | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2006 в 11:44)
| | OPTIMIZE TABLE делать по таблицам в которых я удалял записи ? или по всем таблицам БД? | |
|
|
|
|
|
|
|
для: mstf
(23.05.2006 в 11:49)
| | Для тех, где число записей уменьшилось в разы. | |
|
|
|
|
|
|
|
для: mstf
(23.05.2006 в 11:33)
| | InnoDB-таблицы хранятся в едином табличном пространстве, объём которого определяется в конфигурационном файле my.cnf или my.ini - даже если в этот табличном пространстве не будет ни одной записи - оно всё равно будет занимать 10 Gb. | |
|
|
|
|
|
|
|
для: cheops
(23.05.2006 в 12:44)
| | И вправду... не заметил тип хранилища....
Да, касательно освобождения пространства из-под InnoD, мануал дает весьма грустные советы:
На данный момент нельзя удалить файл данных из InnoDB. Чтобы уменьшить размер своей базы данных, необходимо воспользоваться mysqldump, чтобы сделать дамп всех своих таблиц, создать новую базу данных и импортировать таблицы в новую базу данных. | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2006 в 12:58)
| | ой ёёё,
а попроще никак??
это к примеру я ежедневно совершаю какието опреации по уменьшению кол-ва записей, и ежедневно мне надо будет делать mysqldump для того, чтобы и размеры в мегабайтах тоже уменьшились?? | |
|
|
|
|
|
|
|
для: mstf
(23.05.2006 в 13:10)
| | А что Вас смущает? Пространство внутри файла всё равно используется повторно.
Вы же не будете выполнять глобальные чистки ежедневно. И даже раз в месяц.
А раз в год такое можно сделать. | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2006 в 13:14)
| | в том то и дело, что ежемесячно надо будет такое делать.
кол-во записей в некоторых таблицах БД растет большими темпами(за месяц 20-30 млн. записей) и делать склейку данных - просто необходимо. Я вообщето планировал написать крон, который ЕЖЕДНЕВНО будет такое делать, но видать не судьба.
:((( | |
|
|
|
|
|
|
|
для: mstf
(23.05.2006 в 13:31)
| | Если Вы будете запускать cron-процесс ежедневно, и он будет удерживать базу от раздувания, база будет оставаться в пределах порядка 1Гб. Тогда зачем Вам её систематически сжимать через дамп, рискуя каждый раз, что что-то пойдет наперекосяк? | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2006 в 12:58)
| | ответьте пожалуйста на еще один вопрос.
mysqldump корректно работает с типом Innodb и большим объемом информации? Вроде я гдето читал, что в моем случае mysqldump'ом нужно пользоваться осторожно. Если можно, то синтаксис такой mysqldump --opt БАЗА > 1.sql ? никаких дополнительных ключей не надо? | |
|
|
|
|
|
|
|
для: cheops
(23.05.2006 в 12:44)
| | в my.cnf не указан объем БД, или я не то смотрю? не подскажите какая запись?
кроме как вот этой
innodb_data_file_path = ibdata1:10M:autoextend
ничего с мегабайтами не нашел.
Но с другой стороны если указан объем данных, то почему у меня файл постоянно растет, а не содает новый файл по достижению указанных размеров? | |
|
|
|
|
|
|
|
для: mstf
(23.05.2006 в 13:06)
| | >innodb_data_file_path = ibdata1:10M:autoextend
Означает, что первоначально хранилище занимает 10 Мб, но ему разрешено расширяться в случае необходимости. Вот оно и выросло до 10 гигов. "Сдуваться " оно само не умеет. | |
|
|
|