MySQL Чрезвычайно большой размер таблицы

Наша организация использует MySQL для своей системы тикетов heklpdesk, там есть таблица с 14 тысячами строк и размером таблицы 5,7 ГБ! Вот структура таблицы.

swticketposts

Любые идеи, почему эта таблица может стать такой большой, и какие-либо мысли, как я могу уменьшить ее размер? Я исправил, проверил и оптимизировал операции, и я на грани очистки старых записей, но не могу понять, что делает эту таблицу такой большой! Много среднего текста?


person James Dykes    schedule 23.04.2012    source источник
comment
5 Гб это мало-средне по современным меркам, не много :)   -  person Sergio Tulentsev    schedule 23.04.2012
comment
Вы также вставляете тело письма в эту таблицу? Если да, то размер этой таблицы увеличивается из-за текста тела письма.   -  person Atul Yadav    schedule 23.04.2012
comment
Столбец contents выглядит вероятным виновником. Можете ли вы запустить запрос, чтобы выбрать average(char_length(contents))?   -  person eggyal    schedule 23.04.2012
comment
+1 для столбца содержания. Если система тикетов просто сбрасывает тела писем в базу данных, они также содержат любые вложения. Однажды я настроил экземпляр OTRS, который делал это по умолчанию. Он заполнил максимально допустимый размер БД MySQL в 100 МБ за считанные дни...   -  person Simon    schedule 23.04.2012
comment
Средняя длина содержимого составляет 425089,7, поэтому я думаю, что это и есть причина, умножая эту цифру на 14 000, мы получаем где-то около 5 ГБ, так что немного, кроме архивации, которую мы можем сделать, а!   -  person James Dykes    schedule 23.04.2012
comment
5 Гб это мало. У меня есть таблицы с более чем 1 миллиардом строк и диапазоном 800 ГБ, и они по-прежнему эффективно реагируют. Средний текст - ваша проблема. Так вас только размер волнует? Или стол медленный? Немного потерялся в том, в чем собственно вопрос.   -  person Namphibian    schedule 23.04.2012
comment
Привет, мне просто любопытно, пропустил ли я какие-либо другие операции по эффективному уменьшению размера таблицы и действительно ли что-то было повреждено. Я заархивирую некоторые строки, поскольку полагаю, что многие данные больше не актуальны.   -  person James Dykes    schedule 23.04.2012


Ответы (1)


Вы можете переместить поле contents в другую таблицу.

нравится

 ticketpostid |   contents  |
_____________________________

затем извлекайте содержимое на основе ticketpostid только при необходимости.

person Naveen Kumar    schedule 23.04.2012
comment
Значит, он переместит 5 ГБ данных в другую таблицу? Сомневаюсь, что это будет иметь большое значение, поскольку вы просто перемещаете данные в другую таблицу. - person Namphibian; 23.04.2012
comment
Столбцы среднего текста (BLOB) хранятся в MySQL в виде указателя (от 9 до 12 байт). Фактические большие двоичные объекты хранятся вне данных таблицы. Пока вы не ссылаетесь на столбец BLOB-объектов в запросе, не должно быть заметной разницы в наличии столбца. - person Ami; 23.04.2012
comment
@ Ами, ты прав на 100%. Если вы сделаете SELECT * FROM Table, он будет читать BLOB-объекты и вызывать проблемы. Однако разделение на две таблицы не улучшит производительность, если запрос, например, SELECT ticketpostid FROM table. До сих пор остается загадкой, о чем идет речь. - person Namphibian; 23.04.2012