Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Насколько важна дефрагментация? MyISAM 
V
    Опции темы
maxipub
Дата 18.11.2014, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Добрый день!

Кому-то мои вопросы могут опять показаться незначительными. Ребята, мне в первую очередь просто интересно для себя знать! Итак, поехали. smile 

Есть таблица с юзерами, 200к записей, 30Мб весит. В таблице есть такое поле:

`confirm_code` varchar(40) DEFAULT NULL

1.

Это код подтверждения email адреса, который высылается в письме при регистрации. Ну все знают такие штуки. Заполняется рандомом, при успешном подтверждении его значение устанавливается в NULL. Понятно, что при этом возникает фрагментация таблицы (смотрю через phpmyadmin). Но что мне интересно! По мере заполнения таблицы эта фрагментация "мигает". Т.е. кто-то подтвердил регистрацию - она возникла, кто-то новый зарегался - пропала. Как такое может быть? OPTIMIZE TABLE точно ни где нет, 100%. Просто я думал что в MyISAM дефрагментация таблицы сводится к ее блокировке, дампу, и дальнейшему полному восстановлению из дампа и снятия блокировки. Ведь если UPDATE происходит где-то в середине таблицы, оттуда вырезается 40 байт инфы, вставляется NULL - возникает дыра, на которую надо сдвинуть оставшуюся часть файла (или просто перезаписать его целиком заново). Вот не пойму, почему так происходит, чего фрагментация при вставке пропадает? Или перед INSERT принудительно вызывается OPTIMIZE TABLE? Вроде бы нет...

2.

Как в принципе лучше быть? Ставить OPTIMIZE TABLE после каждого UPDATE с confirm_code=NULL ? Просто это каждый раз перезапись 30Мб файл, да еще и блокировать на полсекунды... Прикидываю какая лишняя нагрузка на дисковую подсистему даже при 1000 подобных запросов в день. Не то чтобы капец, но зачем, из-за такой мелочи то!? Лучше повозиться и перенести конфирмкоды в отдельную таблицу, где их просто удалять? Или не стоит на это обращать внимание? smile 
PM MAIL   Вверх
baldina
Дата 18.11.2014, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



в myisam файл данных может иметь свободные блоки (в т.ч. в середине), которые могут использоваться повторно; смежные объединяются в один. это возможно за счет использования внешнего индексного файла.
Цитата(maxipub @  18.11.2014,  12:20 Найти цитируемый пост)
Ставить OPTIMIZE TABLE после каждого UPDATE с confirm_code=NULL

у вас файл 30М весит, это почти ничего по нынешним меркам. не мешайте базе работать.
PM MAIL   Вверх
Akina
Дата 18.11.2014, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



А ты хотя бы понимаешь, что такое фрагментация? в терминах phpmyadmin... 



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
baldina
Дата 18.11.2014, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



maxipub, если вас все еще беспокоят пустые поля кодов, вынесите их в отдельную таблицу
PM MAIL   Вверх
maxipub
Дата 18.11.2014, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(baldina @  18.11.2014,  12:33 Найти цитируемый пост)
в myisam файл данных может иметь свободные блоки (в т.ч. в середине), которые могут использоваться повторно; смежные объединяются в один. это возможно за счет использования внешнего индексного файла.

Т.е. они просто останутся свободными, пока не найдется подходящая инфа для записи туда?

Если так, то эта инфа должна быть только из соседней записи, или туда впихнется любая, подходящая по размеру?
PM MAIL   Вверх
Akina
Дата 18.11.2014, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  18.11.2014,  14:12 Найти цитируемый пост)
Т.е. они просто останутся свободными, пока не найдется подходящая инфа для записи туда?

Если не будет превышен предел доли свободного пространства в блоке. Иначе будет выполнено перераспределение.

Цитата(maxipub @  18.11.2014,  14:12 Найти цитируемый пост)
эта инфа должна быть только из соседней записи, или туда впихнется любая, подходящая по размеру? 

При наличии кластерного индекса - нет. Иначе - возможно, да (см. системную переменную concurrent_insert). Поскольку у тебя MyISAM - однозначно второе.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 18.11.2014, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Получается, данные физически в файле будут храниться вперемешку, а не последовательно, и ориентиром на них будет просто индекс?
PM MAIL   Вверх
Akina
Дата 18.11.2014, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Эммм... http://dev.mysql.com/doc/refman/5.6/en/myi...age-engine.html читать не пробовал? там много чего забавного.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 18.11.2014, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Код
Dynamic-sized rows are much less fragmented when mixing deletes with updates and inserts. This is done by automatically combining adjacent deleted blocks and by extending blocks if the next block is deleted.

Речь об этом?
PM MAIL   Вверх
Akina
Дата 18.11.2014, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Ну и об этом тоже - но в десятую очередь...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 18.11.2014, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Понятно... Мне маны по MySQL даются туго, без примеров. Ну, в общем вопрос решен. Пока не буду париться об этом, а как нечего будет делать, повыношу в отдельные таблицы.

Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0847 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.