SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.06.2008 10:28:55

qman
Участник
Зарегистрирован: 17.06.2008
Сообщений: 2

Как сократить размер ibdata1 ?

Как сократить размер ibdata1 после удаления записей в таблицах?
P.S. на MS SQL сервере есть schrink database.. а как сделать аналогично на MySQL

Неактивен

 

#2 17.06.2008 10:35:00

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как сократить размер ibdata1 ?

Такой возможности, к сожалению, нет. Только путем пересоздания этого файла (таблицы либо восстановить из дампа, либо временно перенести в myisam).

Неактивен

 

#3 17.06.2008 14:28:58

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Как сократить размер ibdata1 ?

А если поменять my.cnf, указав меньший размер, и перезапустить сервер?

Неактивен

 

#4 17.06.2008 18:22:48

qman
Участник
Зарегистрирован: 17.06.2008
Сообщений: 2

Re: Как сократить размер ibdata1 ?

rgbeast написал:

либо временно перенести в myisam.

т.е. сменить тип базы данных на myisam? приведите пожалуйста код как это сделать?

Неактивен

 

#5 17.06.2008 18:45:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как сократить размер ibdata1 ?

ALTER TABLE tablename ENGINE=MyISAM

В будущем, если включите innodb_file_per_table, сможете уменьшать объем tablespace путем
пересоздания таблиц сразу в InnoDB (т.к. в режиме файл-на-таблицу файл при удалении таблицы
стирается) командой ALTER TABLE tablename ENGINE=InnoDB

Неактивен

 

#6 18.06.2008 03:29:29

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как сократить размер ibdata1 ?

LazY написал:

А если поменять my.cnf, указав меньший размер, и перезапустить сервер?

будет ошибка innodb

Неактивен

 

#7 18.06.2008 22:06:49

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Как сократить размер ibdata1 ?

Не понял. Почему, если таблицы пустые, нельзя написать
[syntax=shellinnodb_data_file_path=ibdata1:X;ibdata2:XM:autoextend[/syntax]
где X меньше текущего?

Неактивен

 

#8 18.06.2008 22:18:52

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как сократить размер ibdata1 ?

Написать можно, но только работать так не будет. Попробуй.

Неактивен

 

#9 19.06.2008 15:03:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как сократить размер ibdata1 ?

Нельзя, т.к. таблицы (даже пустые) могут располагаться в произвольной части tablespace.

Неактивен

 

#10 19.06.2008 16:01:30

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Как сократить размер ibdata1 ?

Если ВСЕ таблицы пустые, какая разница, в какой части tablespace они находятся?

Неактивен

 

#11 19.06.2008 16:15:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как сократить размер ibdata1 ?

Есть два ответа - простой и сложный.

1. Сложный
Пусть у тебя есть файлик из 10 байт, вот такой:
0000000010
Ты хочешь убрать "ненужную" его часть - оставить, например, три байта. И обрезать
хвост. Есть разница между тупым обрезанием и переносом единички влево и последующим
обрезанием.

2. Простой
Not implemented

Неактивен

 

#12 19.06.2008 19:00:56

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Как сократить размер ibdata1 ?

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

Неактивен

 

#13 19.06.2008 19:34:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как сократить размер ibdata1 ?

Там же куча внутренних данных все равно, даже в пустой таблице.

> create table qwe (a int) engine=innodb;
Query OK, 0 rows affected (0.05 sec)

> show table status like 'qwe'\G
*************************** 1. row ***************************
           Name: qwe
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
Auto_increment: NULL
    Create_time: 2008-06-19 19:35:24
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
Create_options:
        Comment: InnoDB free: 4096 kB
1 row in set (0.00 sec)

Неактивен

 

#14 19.06.2008 19:49:59

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как сократить размер ibdata1 ?

Если все таблицы пустые, ничего не мешает пересоздать tablespace заново и воссоздать таблицы. Реальная потребность в работе с tablespace, когда таблицы не вполне пустые или совсем не пустые. В ndb это реализовано посредством множественных tablespace - создается новый tablespace с нужными параметрами, переносятся туда таблицы с помощью ALTER TABLE, затем старый tablespace удаляется. Для Innodb такой возможности нет. В планах сделать такой механизм и для Falcon.

Неактивен

 

#15 19.06.2008 21:01:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как сократить размер ibdata1 ?

rgbeast написал:

Если все таблицы пустые, ничего не мешает пересоздать tablespace заново и воссоздать таблицы.

Не-а. MySQL будет думать, что таблицы есть (по frm-файлам), а InnoDB не будет ничего о них знать - получишь ошибку.

Неактивен

 

#16 03.07.2008 09:10:10

Айдахо
Участник
Зарегистрирован: 03.07.2008
Сообщений: 2

Re: Как сократить размер ibdata1 ?

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

Неактивен

 

#17 04.07.2008 15:59:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как сократить размер ibdata1 ?

Сделать дамп базы, удалить _все_ файлы InnoDB, запустить сервер и восстановить базу
из дампа. Не забудьте перед запуском сервера поставить innodb_file_per_table - это сэкономит
время в будущем (если, конечно, у Вас нету нескольких тысяч таблиц - тогда может замедлить
сервер).

Неактивен

 

#18 04.07.2008 16:09:07

Айдахо
Участник
Зарегистрирован: 03.07.2008
Сообщений: 2

Re: Как сократить размер ibdata1 ?

а на сколько это примерно уменьшит объем бд?

Неактивен

 

#19 04.07.2008 16:14:16

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как сократить размер ibdata1 ?

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson