Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: InnoDB
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » InnoDB

Страниц (1): [1]
 

1. Phantik - 28 Декабря, 2009 - 15:33:46 - перейти к сообщению
Столкнулся со следующей проблемой.

При попытке оптимизировать таблицы innoDB выдается сообщение
'wins_idb.wins', 'optimize', 'note', 'Table does not support optimize, doing recreate + analyze instead'

Версия MySQL 5.1.41 community

Хотя в документации написано:
OPTIMIZE TABLE works only for MyISAM, InnoDB, and ARCHIVE tables. It does not work for tables created using any other storage engine, including NDBCLUSTER Disk Data tables.

Вот ссылка http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]imize-table[dot]html


InnoDB хранит данные в файлах ib_data1, ib_logfile0, ib_logfile1,...
которые только растут, даже когда дропаю базу и пересоздаю заного.

Нашел в инете хитрый способ сжатия

mysql> alter table wins engine=MyISAM;
Query OK, 205616 rows affected (3.48 sec)
Records: 205616 Duplicates: 0 Warnings: 0

mysql> optimize table wins;
+---------------+----------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------+----------+----------+----------+
| wins_idb.wins | optimize | status | OK |
+---------------+----------+----------+----------+
1 row in set (0.58 sec)

mysql> alter table wins engine=InnoDB;
Query OK, 205616 rows affected (11.31 sec)
Records: 205616 Duplicates: 0 Warnings: 0

Но файлы абсолютно никак не уменьшаются. Даже когда база пустеет полностью.

Посоветуйте пожалуйста как бороться с этим InnoDB. Может есть какие-нибудь хитрые способы дефрагментации?
Как мне экономить физическое место жесткого диска? Может в настройках сервера есть какие-нибудь параметры на ограничения или автоматического сжатия?
Заранее благодарен.
2. EuGen - 28 Декабря, 2009 - 15:43:53 - перейти к сообщению
Заметьте, что там же уточняется:
CODE (text):
скопировать код в буфер обмена
  1.  
  2.  For InnoDB tables, OPTIMIZE TABLE is mapped to ALTER TABLE, which rebuilds the table to update index statistics and free unused space in the clustered index. Beginning with MySQL 5.1.27, this is displayed in the output of OPTIMIZE TABLE  when you run it on an InnoDB table, as shown here:
  3.  
  4. mysql> OPTIMIZE TABLE foo;
  5. +----------+----------+----------+-------------------------------------------------------------------+
  6. | Table    | Op       | Msg_type | Msg_text                                                          |
  7. +----------+----------+----------+-------------------------------------------------------------------+
  8. | test.foo | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
  9. | test.foo | optimize | status   | OK                                                                |
  10. +----------+----------+----------+-------------------------------------------------------------------+
  11.  
  12. You can make OPTIMIZE TABLE work on other storage engines by starting mysqld with the --skip-new or --safe-mode option. In this case, OPTIMIZE TABLE is just mapped to ALTER TABLE.
  13.  
  14. OPTIMIZE TABLE returns a result set with the following columns.
  15.  

Проблема сохраняется при:
0. TRUNCATE + пересоздание индексов
1. DROP + пересоздание индексов
?
3. Phantik - 28 Декабря, 2009 - 15:57:27 - перейти к сообщению
Прошу прощения за мой корявый английский. Но я не понял, как в итоге сжимать то?
4. EuGen - 28 Декабря, 2009 - 16:14:47 - перейти к сообщению
Пересозданием таблицы и индексов
5. Phantik - 28 Декабря, 2009 - 16:41:19 - перейти к сообщению
Заполнил базу до 230МБ
Дропнул базу, пересоздал новую.

Дальше удалил индексы основной таблицы и заного их создал.
ALTER TABLE wins DROP INDEX main_index;
ALTER TABLE wins ADD INDEX main_index(`LID`,`DrawNum`,`Module`,`Tour`,`TckNum`);

На размер файла это не повлияло никак(остался 230 МБ).

А как правильно делать пересоздание таблицы? Не совсем понял что это значит. Сохраняться ли в ней данные?

 

Powered by ExBB FM 1.0 RC1