В MySQL что означает «накладные расходы», что в этом плохого, и как это исправить?

157

простой вопрос, но это не давало мне покоя ...

Что такое "накладные расходы" в MySQL, и я должен беспокоиться?

Нажатие "оптимизировать таблицу" исправляет это на самом деле?

johnnietheblack
источник

Ответы:

147

Похоже, что накладные расходы - это временное дисковое пространство, которое база данных использовала для выполнения некоторых запросов, поэтому вам следует беспокоиться только о том, насколько оно велико.

Вы можете сравнить «Оптимизация таблицы» с дефрагментацией вашего жесткого диска.

Я цитирую:

Каждая база данных со временем потребует определенной формы обслуживания, чтобы поддерживать ее на оптимальном уровне производительности. Очистка удаленных строк, повторное упорядочение, сжатие, управление путями индекса, дефрагментация и т. Д. - это то, что известно как ОПТИМИЗАЦИЯ в mysql и другие термины в других базах данных. Например, IBM DB2 / 400 называет это ПЕРЕЗАГРУЗИТЬ ФИЗИЧЕСКИЙ ЧЛЕН ФАЙЛА.

Это похоже на замену масла в вашей машине или настройку. Вы можете подумать, что на самом деле это не нужно, но при этом ваша машина работает намного лучше, вы получаете больший пробег бензина и т. Д. Автомобиль, который получает большой пробег, требует частой настройки. База данных, которая получает интенсивное использование, требует того же самого. Если вы выполняете много операций UPDATE и / или DELETE, и особенно если в ваших таблицах есть столбцы переменной длины (VARCHAR, TEXT и т. Д.), Вам нужно держать их в курсе.

Джаспер
источник
1
@Jasper Таблицы полностью заблокированы (не могут читать / писать) во время оптимизации?
Пейсер
4
Откуда взялась эта цитата? Я нахожу много результатов в Google.
Ян Хантер
Как мы узнаем, что вызывает накладные расходы снова и снова?
mahen3d
спасибо за прекрасный и простой пример, независимо от сумасшедших технических терминов.
shyammakwana.me
1
Что считается «действительно высоким»?
TV-C-15
87

Если вы говорите о том, что phpMyAdminвызывает overhead, то это фактический размер файла данных таблицы относительно идеального размера того же файла данных (как если бы он был только что восстановлен из резервной копии).

Из соображений MySQLпроизводительности не сжимает файлы данных после удаления или обновления строк.

Это overheadплохо для сканирования таблиц, т. Е. Когда ваш запрос должен выполняться по всем значениям таблицы, ему нужно искать больше пустого пространства.

Вы можете избавиться от этого overhead, запустив, OPTIMIZE TABLEчто сократит вашу таблицу и индексы.

Quassnoi
источник
7
Размер документации mysql говорит: «OPTIMIZE TABLE следует использовать, если вы удалили большую часть таблицы или если вы внесли много изменений в таблицу со строками переменной длины», это мой случай, спасибо :)
boclodoa
8

Служебные данные - это Data_free таблицы, то есть количество выделенных, но неиспользуемых байтов. Мы можем найти его командой SQL SHOW TABLE STATUS . Это свободное место в выделенном размере для вашего стола.

Шанкар Пракаш Г
источник
1

Оптимизировать таблицу может быть очень проблематично. Например, если таблица интенсивно используется на сайте.

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

После удаления большой части таблицы MyISAM или ARCHIVE или внесения множества изменений в таблицу MyISAM или ARCHIVE со строками переменной длины (таблицы со столбцами VARCHAR, VARBINARY, BLOB или TEXT). Удаленные строки сохраняются в связанном списке, и последующие операции INSERT повторно используют старые позиции строк. <

Я считаю, что я подтвердил это поведение. И это действительно было бы очень полезно.

Томас Линдегард Дженсен
источник