|
|
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Есть вот база данных, в которую очень активно пишутся данные, и так же активно удаляются, пример 1-2кк записей за сутки по ней проходит. Проблема в том, что через некоторое время таблица становится сильно фрагментированной и нужно делать оптимизацию, чтобы вернуть неиспользуемое дисковое пространство. Проблема в том, что оптимизация этой таблице происходит достаточно долго, даже на ССД дисках, а нужно 100% доступность данных всегда. Сделал партиционирование, но даже тут пока не нашел способов решения проблемы, думал может можно как-то отдельные партишены выводить из работы и делать с ними что захочется, но нифига... Партиционирование осуществляется по дням месяца, и обычно нужны данные за сегодня и вчера, поэтому остальные партишены можно было бы и оптимизировать, но вся база при этом все равно лочится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 13:13:56 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что через некоторое время таблица становится сильно фрагментированной и нужно делать оптимизацию, чтобы вернуть неиспользуемое дисковое пространство. На основе чего ты сделал такие выводы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 13:23:31 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
На основе личных наблюдений. Вообще в документации сказано, что команда OPTIMIZE нужна для оптимизации данных в случае с динамическим размером строки, у меня хоть размер и статичный, специально сейчас провел эскперимент: -rw-rw---- 1 mysql mysql 201326592 Jan 16 09:24 /var/lib/mysql/db/fh_download#P#p15.ibd -rw-rw---- 1 mysql mysql 385875968 Jan 16 09:25 /var/lib/mysql/db/fh_download#P#p16.ibd удаляем 1000 строк из 15-ой секции: -rw-rw---- 1 mysql mysql 201326592 Jan 16 09:31 /var/lib/mysql/db/fh_download#P#p15.ibd -rw-rw---- 1 mysql mysql 390070272 Jan 16 09:31 /var/lib/mysql/db/fh_download#P#p16.ibd вуаля.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 13:32:51 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Возможно если удалить все данные из партиции и потом сделать оптицизацию ее, то это будет быстро... надо попробовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 13:39:40 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
HettВозможно если удалить все данные из партицииЕсть TRUNCATE PARTITION и DROP PARTITION. Что именно вы используете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 13:40:47 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
miksoftЕсть TRUNCATE PARTITION и DROP PARTITION. Что именно вы используете? Я честно говоря еще только разбираюсь в партишенах и даже не знал про TRUNCATE, видимо это как раз то, что нужно. На данный момент данные удалялись просто с помощью DELETE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 13:47:28 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Hett, Не надо DELETE, это медленно и печально. Скорее всего вам нужен DROP PARTITION. Ведь пустая секция потом не нужна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 14:01:43 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
miksoftHett, Не надо DELETE, это медленно и печально. Скорее всего вам нужен DROP PARTITION. Ведь пустая секция потом не нужна? Да понимаю что ненадо, раньше поток данных был небольшой, данные записывались и удалялись, не было партиционирования. Сейчас я сделал просто 31 партицию, так сказать на каждый день. Думаю просто транкейтом очищать старые. Как вариант, конечно, можно еще автоматически создавать новые (где-то видел вариант с хранимкой, но что-то мне он не понравился, лишние напряги для мускуля). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 14:09:25 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Еще в доках мускуля нашел, что оптимизация партишена нужна только в случае с динамическим размером строки http://dev.mysql.com/doc/refman/5.5/en/partitioning-maintenance.html но прям не знаю, у меня они чего-то файлы данных очищались сами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 14:11:55 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
HettЕще в доках мускуля нашел, что оптимизация партишена нужна только в случае с динамическим размером строки http://dev.mysql.com/doc/refman/5.5/en/partitioning-maintenance.html Про динамический размер - не страшно, у вас же данные не изменяются, насколько я понял. http://dev.mysql.com/doc/refman/5.5/en/partitioning-maintenance.html If you have deleted a large number of rows from a partition or if you have made many changes to a partitioned table with variable-length rows (that is, having VARCHAR, BLOB, or TEXT columns), you can use ALTER TABLE ... OPTIMIZE PARTITION to reclaim any unused space and to defragment the partition data file. А вот это интереснее: http://dev.mysql.com/doc/refman/5.5/en/partitioning-maintenance.html Some MySQL storage engines, including InnoDB, do not support per-partition optimization ; in these cases, ALTER TABLE ... OPTIMIZE PARTITION rebuilds the entire table . In MySQL 5.5.30 and later, running this statement on such a table causes the entire table to rebuilt and analyzed, and an appropriate warning to be issued. (Bug #11751825, Bug #42822) Use ALTER TABLE ... REBUILD PARTITION and ALTER TABLE ... ANALYZE PARTITION instead, to avoid this issue. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 14:32:22 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
HettНа основе личных наблюдений. Вообще в документации сказано, что команда OPTIMIZE нужна вуаля.... Жаль, что там не сказано, что она не нужна. Кратковременный эффект от optimize основан на том, что все данные таблицы помещаются в кеш в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 15:07:32 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Я, как понял вообще, OPTIMIZE просто пересоздает таблицу... хотя честно говоря я им никогда не пользовался, т.к. он какой-то бесмысленный, т.к. блокирует всю таблицу и на долго... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 15:13:30 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
попробуйте другие sorage engine использовать для хранения данных, если транзакции и внешние ключи не сильно важны -MyISAM, одна из веток эволюции Mysql, - MariaDB имеет myisam с транзакциями(Area), есть аналог Innodb не помню как называется, у маши многие глюки mysql исправлены, дома попробовал все культурно работает, теперь везде машу по возможности ставить буду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 17:01:28 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
bochkovодна из веток эволюции Mysql, - MariaDB имеет myisam с транзакциями(Area), есть аналог Innodb не помню как называется, у маши многие глюки mysql исправлены, дома попробовал все культурно работает, теперь везде машу по возможности ставить буду А, это тот продукт где совместимость функций regex сломали и все сайты на DLE перестали работать ? да ставьте, конечно. https://mariadb.com/kb/en/pcre-regular-expressions/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 18:29:19 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
все равно regexep у мускл работает корректно только на латинице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 00:59:03 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
В общем поимел геморою с этим партиционированием. Почти сутки все работало хорошо, но потом вдруг сервер показал нагрузку 800% В SHOW PROCESSLIST было очень много запросов к этой таблице в стадии 'Sending data', перезапуски мускуля и т.п. потуги ничего не дали, в итоге пришлось закомментировать пару маловажных запросов в коде, после чего сервер БД поднялся с колен и продолжал работу с нагрузкой в пару раз больше чем обычно. Потом убрал партиционирование и все заработало нормально.... Что это было? Боюсь теперь даже его использовать. И оттестить то не оттестишь нормально, сутки вот проработало ведь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 10:05:49 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Причем закомеентированные вопросы 100% использовали индекс (составной из 4х полей, они просто проверяли наличие данных в таблице, по сути ничего не выбирали там особо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 10:06:44 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Hett, Хорошо бы было включить slow query log и посмотреть запросы с "затыками". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 10:10:06 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
miksoftHett, Хорошо бы было включить slow query log и посмотреть запросы с "затыками". Дело в том, что я их просто в SHOW PROCESSLIST видел, они не то чтобы долго выполнялись, они вообще просто висели не выполнялись, это было видно по времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 10:39:23 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Hett, ну раз посоветовали включить, почему бы не включить? ответ на вопрос "что это было?" - это была непродуманная политика сбора информации о производительности сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:06:55 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
bochkovвсе равно regexep у мускл работает корректно только на латинице что касается эпизода с CMS DLE, то все там корректно работает с regex. Там циферки используются. Плохой запрос на выбор категорий, однако он есть. И в Mariadb он сломался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:08:16 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
netwindHett, ну раз посоветовали включить, почему бы не включить? ответ на вопрос "что это было?" - это была непродуманная политика сбора информации о производительности сервера. Не знаю тогда как продумывать, обычно нагрузка 100% (исходя из 8 ядер процессора, нужно считать что это 1/8), потом в один прекрасный момент нагрузка становится 800, данные вообще не обрабатываются, все висит, не понятно что происходит. Как нужно было продумывать я не знаю. Я конечно мог бы предоложить, что в какой-то момент не хватило кэша процессора и все встало, но тогда хоть как-то данные бы должны были обрабатываться, а оно вообще все стояло ступором... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:13:00 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Hett, ну как продумывать? заранее продумывать ! так slow log не был включен ? Если нет информации, то и нет идей. А предположений может быть слишком много. Там еще и наверняка у вас не только mysql крутится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:17:50 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
Hettчто в какой-то момент не хватило кэша процессорауж это тут точно ни при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:20:26 |
|
||
|
Оптимизация данных
|
|||
|---|---|---|---|
|
#18+
netwindHett, ну как продумывать? заранее продумывать ! так slow log не был включен ? Если нет информации, то и нет идей. А предположений может быть слишком много. Там еще и наверняка у вас не только mysql крутится. Только MySQL. Лог был выключен на тот момент. Но я не знаю, чтобы он мог дать, я во время проявления проблемы смотрел какие запросы висят в обработке, но чем бы это могло помочь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:30:56 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38528120&tid=1835386]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 366ms |

| 0 / 0 |
