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 :: Версия для печати :: файл ibdata1 растёт в ширину
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » файл ibdata1 растёт в ширину

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

1. grafillo - 01 Февраля, 2019 - 12:31:06 - перейти к сообщению
Создал бд на mysql, сами таблицы с которыми работает скрипт занимают 5 мегабайт, зато файл ibdata1 занимает 1.5 гегабайт и растёт постоянно, я так понимаю там пишутся логи, кто знает как сделать так чтобы этот файл не рос? и что там записывается?
2. LIME - 01 Февраля, 2019 - 13:44:27 - перейти к сообщению
3. grafillo - 01 Февраля, 2019 - 14:22:11 - перейти к сообщению
так что этот файл нельзя удалить или уменьшить чтоли?
4. LIME - 01 Февраля, 2019 - 14:26:18 - перейти к сообщению
Цитата:
в том ibdata как раз и хранятся данные и индексы всех innodb таблиц.
удаляй
5. grafillo - 01 Февраля, 2019 - 19:01:11 - перейти к сообщению
а почему оно всё время растёт если у меня таблица на 5 метров, какие индексы и данные всех таблиц? там всех данных на пять мегабайт а индексов на 1.5 гигабайт? х)
как такое может быть?
6. LIME - 01 Февраля, 2019 - 20:17:38 - перейти к сообщению
я не dba
могу только предполагать из того скудного что знаю
лучше тебе дождаться мелкого...он хоть и пг но думаю пояснит лучше меня
короче...
глянь количество индексов
пойми что каждый индекс это почти новая копия таблицы только с данными входящими в индекс...+ в мускуле действует btree++ ... это значит что в каждом индексе повторяются данные которые участвуют в индексе + верхние страницы индекса
проверь свою архитектуру на индексы
для проверочки удали все индексы и проверь размер файла
потом верни их и подумай есть ли лишние
новички очень часто индексируют всё направо и налево
индекс помогает в выборке но это несет в себе некие расходы
надо уметь индексировать и понимать как устроены индексы
погугли как устроено дерево индексов... "btree для школьников"
7. Мелкий - 01 Февраля, 2019 - 22:55:13 - перейти к сообщению
Что могу однозначно процитировать, так это вот тут: https://dev[dot]mysql[dot]com/doc/refman[dot][dot][dot]ystem_tablespace
Цитата:
keep all InnoDB tables and indexes inside the system tablespace, often causing this file to become very large. Because the system tablespace never shrinks, storage problems could arise if large amounts of temporary data were loaded and then deleted.

То есть два момента:
- в этом файле хранятся все таблицы и индексы созданные при выключенном innodb_file_per_table.
- mysql просто не умеет уменьшать этот файл

Насколько знаю, единственный выход - сдампить всё, удалить все innodb объекты, полностью стопнуть базу, удалить ibdata и ib_log, запустить базу и восстановить таблички. Ну или сдампить всё нужное и полностью переинициализировать инстанс.

Как именно он переиспользует свободное место - не знаю.
8. LIME - 02 Февраля, 2019 - 00:51:59 - перейти к сообщению
Мелкий пишет:
Насколько знаю, единственный выход
нуу
а как насчет table optimize
не вакуум но хоть чтото
я точно знаю что ты знаешь
не будь пг шовинистом
хотя в случае мскл это по сути и есть новая бд
LIME пишет:
лучше тебе дождаться мелкого...он хоть и пг но думаю пояснит лучше меня
не...не смог он
(Добавление)
Мелкий привет)) даже не поправил мну.... я что все правильно сказал?)) ураааа)))
9. Мелкий - 02 Февраля, 2019 - 15:48:28 - перейти к сообщению
LIME пишет:
а как насчет table optimize

Я намеренно даже выделил never shrinks.
mysql никогда не обрезает этот файл. Не умеет. Перестроение таблицы каким-либо образом переместит данные в другое место внутри этого файла-tablespace или в другой файл при включенном per file, но файл этот уменьшить не может. Вообще. Штука очень древняя.
https://bugs[dot]mysql[dot]com/bug.php?id=1341

Для btree - да, всё верно, индекс хранит копии индексируемых значений. Поэтому индексы занимают место, но и потому по btree можно сделать index only scan. Специфика кластеризованного innodb - во вторичные индексы всегда неявно входит ещё и значение первичного ключа.
10. LIME - 02 Февраля, 2019 - 16:28:31 - перейти к сообщению
Мелкий пишет:
во вторичные индексы всегда неявно входит ещё и значение первичного ключа.
перевожу на людской
в ключе иннодиби хранится не ссылка на данные а значение пк(второй поиск)
эдакий симлинк
Мелкий пишет:
mysql никогда не обрезает этот файл. Не умеет.
жееесть...спасибо за инфо...но капееец
(Добавление)
Мелкий пишет:
Поэтому индексы занимают место, но и потому по btree можно сделать index only scan.
извините синьор но это уже особенности алгоритма
в любой субд
и приемчики и триксы
но это уже совсем другая история)
(Добавление)
для любознательных это называется покрывающий индекс
11. grafillo - 04 Февраля, 2019 - 10:11:55 - перейти к сообщению
кароч если в ручную бахнуть этот файл то потом как его востсановить7
всё должно заработать же?
таблицы то у меня все есть.

 

Powered by ExBB FM 1.0 RC1