tag:blogger.com,1999:blog-1386140445493682484.post8552079435029067911..comments2023-09-25T12:25:21.359+01:00Comments on Stable IT: Cлишком большой файл ibdata1 в MySQLPavel Odintsovhttp://www.blogger.com/profile/05424682716332865946noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-1386140445493682484.post-78299354469150424052015-04-14T21:23:36.393+01:002015-04-14T21:23:36.393+01:00Я уже долго смотрел всякие тулзы, в итоге везде пр...Я уже долго смотрел всякие тулзы, в итоге везде приходят к выводу что только жесткое удаление файла может спасти от перерасходования места.<br />Да и тут я сделал drop table, потом импорт, и уже получаю 3.9 гига вместо 1.3, навряд ли это из-за хранения каких-то транзакций так получилось, видимо просто формат хранения данных такой с большим излишком. Попробую ещё на досуге импортнуть на голую mysql с выключенным innodb_file_per_table, чтобы понять сколько в таком режиме база займет.Murzhttps://www.blogger.com/profile/15326385533936312212noreply@blogger.comtag:blogger.com,1999:blog-1386140445493682484.post-88017674988190914932015-04-14T21:10:59.985+01:002015-04-14T21:10:59.985+01:00Вроде бы есть возможность очистить старые транзакц...Вроде бы есть возможность очистить старые транзакции и сжать Innodb файл, посмотрите тулзы от Percona.Pavel Odintsovhttps://www.blogger.com/profile/05424682716332865946noreply@blogger.comtag:blogger.com,1999:blog-1386140445493682484.post-36768839421539428222015-04-14T21:09:45.875+01:002015-04-14T21:09:45.875+01:00Мда, результаты эксперимента печальные ;(
Конверт...Мда, результаты эксперимента печальные ;(<br /><br />Конвертнул сейчас базы свои в innodb_file_per_table, до конвертации был один общий файл ibdata1 - весил 6 гигов, в нем было 2 базы по 2.1 GiB там (информация об объеме данных из phpmyadmin).<br /><br />Сейчас те же самые базы, но каждая папка базы стала весить по 3.9 гига, итого почти 8 гигов заняло вместо 6 :(<br /><br />И это сразу после экспорта-импорта, без каких-либо других действий по чтению-записи.<br /><br />В качестве эксперимента конвертнул одну из баз в формат MyISAM - стала занимать 1.3 гига, обратно в InnoDB - снова 3.9 гига.Murzhttps://www.blogger.com/profile/15326385533936312212noreply@blogger.comtag:blogger.com,1999:blog-1386140445493682484.post-68329416461373974422015-04-14T20:18:39.211+01:002015-04-14T20:18:39.211+01:00Жаль, попробую тогда у себя конвертнуть сейчас и п...Жаль, попробую тогда у себя конвертнуть сейчас и проверить спустя пару недель, главное не забыть отписаться тут ;)<br /><br />И ещё один вопрос, который меня волнует - это быстродействие: наверное mysql быстрее должен работать с одним общим файлом ibdata1 чем с кучей отдельных файлов на каждую таблицу при innodb_file_per_table <br />Плюс к этому получаем ещё фрагментацию файлов в самой файловой системе. Хотя, наверное, это не сильно тормозов добавит, т.к. myisam тоже работает с отдельным файлом на таблицу.Murzhttps://www.blogger.com/profile/15326385533936312212noreply@blogger.comtag:blogger.com,1999:blog-1386140445493682484.post-11089327451586020922015-04-14T19:32:14.898+01:002015-04-14T19:32:14.898+01:00У меня сейчас нету крупных Innodb баз :(У меня сейчас нету крупных Innodb баз :(Pavel Odintsovhttps://www.blogger.com/profile/05424682716332865946noreply@blogger.comtag:blogger.com,1999:blog-1386140445493682484.post-27897704817345859642015-04-14T18:24:11.147+01:002015-04-14T18:24:11.147+01:00Хм, исходя из этого http://stackoverflow.com/quest...Хм, исходя из этого http://stackoverflow.com/questions/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#4056261 поста получается что все же при innodb_file_per_table данные хранятся немного по-другому, поэтому размеры файлов могут уменьшаться в обратную сторону. Так что вроде как не все так грустно ;)<br />А Вы можете проверить, если не сложно, сейчас на своих данных при innodb_file_per_table какой оверхед в размерах файлов присутствует на текущий момент?Murzhttps://www.blogger.com/profile/15326385533936312212noreply@blogger.comtag:blogger.com,1999:blog-1386140445493682484.post-20018290609407957102015-04-14T18:13:40.659+01:002015-04-14T18:13:40.659+01:00Ну если постоянно следить за размером всех файлов ...Ну если постоянно следить за размером всех файлов то да, смысл понятен, но ведь это в теории, а на практике времени следить за этим не будет, в итоге в каждой таблице будет расти оверхед понемногу.... и точно также не будет уметь уменьшаться назад.<br /><br />В итоге при активной работе с БД сумма размеров всех файлов со временем получится значительно больше чем размер ibdata1 файла с общей помойкой.<br /><br />Т.е. этим действием мы просто создаем иллюзию освобождения места, а на самом деле откладываем проблему на попозже ;)<br /><br />Так что хотелось бы какую-то опцию вида innodb_file_per_database вместо innodb_file_per_table чтобы потом когда место загадится оверхедом - вычищать его не по одной табличке, а сразу целыми базами оперировать.<br /><br />Вообще конечно очень странно, что до сих пор не изобрели каких-то методов пересоздать ibdata1 файл без жесткого удаления базы ручками и перезапуска mysql.Murzhttps://www.blogger.com/profile/15326385533936312212noreply@blogger.comtag:blogger.com,1999:blog-1386140445493682484.post-14410394845790712612015-04-14T17:13:42.573+01:002015-04-14T17:13:42.573+01:00Тут вопрос двоякий. С пер файл становится ясно - к...Тут вопрос двоякий. С пер файл становится ясно - какая таблица расползлась и ее можно сжать банальным дамп/ресторе (и только ее одну - а не всю бд). А вот когда все в одном файле - во-первых, не ясно, кем оно забито.Pavel Odintsovhttps://www.blogger.com/profile/05424682716332865946noreply@blogger.comtag:blogger.com,1999:blog-1386140445493682484.post-87057402001498088462015-04-14T17:08:43.822+01:002015-04-14T17:08:43.822+01:00Благодарю за информацию, а не приведет ли этот пер...Благодарю за информацию, а не приведет ли этот перевод на "отдельный файл для каждой базы данных и таблицы" к усугублению ситуации? <br /><br />Ведь файл ibdata1 растет не просто так сам по себе, он просто не умеет уменьшаться. Т.е. если временно понадобилось больше места для хранения данных в БД то файл вырос, а потом мы БД почистили, а файл уменьшиться не может.<br /><br />Если мы переведем в режим "отдельный файл для каждой базы данных и таблицы", то, насколько я понимаю, такой оверхед начнет копиться не в общем файле, а по-немногу в файле каждой таблицы.<br /><br />И в итоге общий размер файлов получится со временем гораздо больше чем общий файл ibdata1 в котором все таблицы делят пустое место на равных.<br /><br />Я верно понимаю? Или в режиме innodb_file_per_table mysql уже умеет уменьшать размер файла, если табличка становится меньше?Murzhttps://www.blogger.com/profile/15326385533936312212noreply@blogger.com