powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / дефрагментация данных
24 сообщений из 24, страница 1 из 1
дефрагментация данных
    #33927398
softic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, в ближайшее время я планирую на ряде таблиц урезать избыточные типы данных (например, с year to fraction(5) до date) и удалить часть столбцов.
Данная операция планируется как:
Код: plaintext
alter table ... modify ()

В связи с этим встают вопросы физической организацией обновлённых таблиц:
1. Для обновлённой таблицы потребуется меньше места - изменится ли количество выделенных под неё страниц автоматически?
2. Как я понимаю, будет определённая фрагментация данных, ведь заполнение страниц будет меньше филлфактора - нужно ли от этого избавляться или фрагментированные данные будут автоматически добиваться до филлфактора?

Если есть какая-то стандартная методика урезания избыточных данных, не связанная с пересозданием таблиц целиком - поделитесь, пожалуйста!

Заранее большое спасибо!
...
Рейтинг: 0 / 0
дефрагментация данных
    #33929354
softic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок, пока ссуть да дело, кое-какие мысли пришли в голову:
Код: plaintext
1.
2.
3.
4.
5.
BEGIN WORK;
SET LOCK MODE TO NOT WAIT;
LOCK TABLE <tablename> IN EXCLUSIVE MODE;
ALTER INDEX <some_index_on_tablename> TO CLUSTER;
ALTER INDEX <some_index_on_tablename> TO NOT CLUSTER;
COMMIT WORK;
Кто что скажет? Комментарии?
...
Рейтинг: 0 / 0
дефрагментация данных
    #33929663
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитайте performance Guide, раздел Altering a Table Definition

Altering a Table Definition
The database server uses one of several algorithms to process an ALTER
TABLE statement in SQL:
n Slow alter
n In-place alter
n Fast alter

В зависимости от изменений, у вас будет либо slow alter ( с созданием копии таблицы), либо in-place alter (данные будут модифицироваться сервером по мере надобности, для полной модицикации надо запустить что-то типа update table where a=a ).
...
Рейтинг: 0 / 0
дефрагментация данных
    #33929665
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fill-factor относится к индексу, а не к даннным. Данные заполняют страницу "до упора".
При slow alter число занятых страниц, скорей всего, изменится. При alter in-place - нет.

В таком вот аксепте
...
Рейтинг: 0 / 0
дефрагментация данных
    #33929713
softic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выбегалло
При slow alter число занятых страниц, скорей всего, изменится. При alter in-place - нет.

В таком вот аксепте
Спасибо большое!
По факту тестирования вариантов постараюсь отписать, как всё происходило.

Кстати, возник ещё вопрос - в некоторых случаях есть проблемы конвертации:
Код: plaintext
NCHAR(1500)
в
Код: plaintext
LVARCHAR(1500)
почему-то при конвертации оставляет за собой пробелы, а TRIM() на таких объёмах не работает :(
Может, подскажете, как решить такую проблему?
...
Рейтинг: 0 / 0
дефрагментация данных
    #33929752
Leonid Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> с fraction(5) до date
> удалить часть столбцов.
> изменится ли автоматически?
Если я что-то понимаю в этом деле, такие внутренние вещи совершенно не докуметированы, поэтому поможет только эксперимент (наверное, к сожалению). Например, не очень давно я менял паре десяков таблиц тип первичного ключа (INT не хватило), а с ним и все REFERENCES на DEC( 12, 0 ), так знаешь, результат превзошёл все ожидания (я тоже использовал ALTER MODIFY) - на миллионных таблицах всё произошло практически мнгновенно! Но и размеры таблиц никак не изменились. А вот, помню, приходилось менять CHAR на VARCHAR (или наоборот, уже не помню), так это просто кирдык - до трёх суток один ALTER работал - зато фрагментация идеальная! :-) Так что...

> филлфактор
Это не в тему. Тут про индексы...
...
Рейтинг: 0 / 0
дефрагментация данных
    #33953549
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid VorontsovЕсли я что-то понимаю в этом деле, такие внутренние вещи совершенно не докуметированы, поэтому поможет только эксперимент (наверное, к сожалению). Например, не очень давно я менял паре десяков таблиц тип первичного ключа (INT не хватило), а с ним и все REFERENCES на DEC( 12, 0 ), так знаешь, результат превзошёл все ожидания (я тоже использовал ALTER MODIFY) - на миллионных таблицах всё произошло практически мнгновенно! Но и размеры таблиц никак не изменились. А вот, помню, приходилось менять CHAR на VARCHAR (или наоборот, уже не помню), так это просто кирдык - до трёх суток один ALTER работал - зато фрагментация идеальная! :-) Так что...
Как раз достаточно неплохо документировано. Как минимум читай все то же приведенное Выбегалло
ВыбегаллоПочитайте performance Guide, раздел Altering a Table Definition
Altering a Table Definition
The database server uses one of several algorithms to process an ALTER
TABLE statement in SQL:
n Slow alter
n In-place alter
n Fast alter

Поэтому и твои результаты конвертации сильно отличались по времени, так как в одном случае все изменения происходили только в описании таблицы и физически ее страницы не перезаписывались (это перезаписывание просто отложено во времени и будет происходить по мере обычной модификации страниц и т.о. одновременно будут существовать разные версии страниц одной таблицы), а в другом случае требовалась полная перезапись всех страниц таблицы.
Если в первом случае (In-place alter) есть время и желание привести все страницы к одной структуре то:
Выбегалло... для полной модицикации надо запустить что-то типа update table where a=a ).
Хотя я обычно предпочитаю init fragment в тот же самый dbspace.
...
Рейтинг: 0 / 0
дефрагментация данных
    #33975408
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
ага init fragment рулит, но на не очень больших объемах.

а еще есть хорошее правило, прежде чем делать такие вещи на продуктивной БД ВСЕГДА надо проводить адекватный эксперимент вне зависимости от полноты документации по предполагаемым действиям.
...
Рейтинг: 0 / 0
дефрагментация данных
    #33977907
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cprага init fragment рулит, но на не очень больших объемах.
А что такое "не очень больших объемах" ?
И почему ?
...
Рейтинг: 0 / 0
дефрагментация данных
    #33978097
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
vasilis cprага init fragment рулит, но на не очень больших объемах.
А что такое "не очень больших объемах" ?
И почему ?

В своей практике я обычно таблицы до 4 Гигов именно Альтер фрагментом перебрасываю. А вот скажем те, которые десятки Гиг занимают - предпочитаю через выгрузку-удаление-загрузку.

Дело в том, что альтер фрагмент по видимому полностью перестраивает индексы (или перепроверяет). Во всяком случае наблюдение за поведением сервера наводит именно на эти мысли т.к. сначала идет чтение из чанков старого дбспэйса в новое, а затем ситывание уже перенесенных данных и сортировки. Суммарно выигрыша в производительности никакого (есть подозрение что медленнее), при том что процесс переноса не разделим на этапы. Например в случае перевыгрузки допустим по какой то причине отключается питание во всем здании и мне нужно тушить сервер, тогда я к примеру не успеваю достроить один индекс, а в случае с альтерфрагментом прерывание процесса отбрасывает ДБА к началу процесса.
...
Рейтинг: 0 / 0
дефрагментация данных
    #33978214
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cprДело в том, что альтер фрагмент по видимому полностью перестраивает индексы (или перепроверяет).конечно альтер фрагмент изменяет индексы, ведь rowid'ы меняются

cprага init fragment рулит, но на не очень больших объемах.ага, на больших еще может длинная транзакция случиться при перекладывании
...
Рейтинг: 0 / 0
дефрагментация данных
    #33978683
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpr[Дело в том, что альтер фрагмент по видимому полностью перестраивает индексы (или перепроверяет). Во всяком случае наблюдение за поведением сервера наводит именно на эти мысли т.к. сначала идет чтение из чанков старого дбспэйса в новое, а затем ситывание уже перенесенных данных и сортировки.
Конечно же, индексы перестраиваются, ведь данные физически изменяют свое местоположение. Но зачем же перестраивать индексы все время ? Значительно проще выключить индексы на период перезаписи и затем включить, для однократной перестройки. Будет значительно быстрее.
Конечно же, онлайновый режим работы (системы в целом) страдает, но то же самое получится и при выгрузке-загрузке.
К сожалению, уже упомянутая проблема длинной транзакции значительно более тяжелая и о ней я успел забыть (спасибо Тане за напоминание).
...
Рейтинг: 0 / 0
дефрагментация данных
    #33979024
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
vasilis cpr[Дело в том, что альтер фрагмент по видимому полностью перестраивает индексы (или перепроверяет). Во всяком случае наблюдение за поведением сервера наводит именно на эти мысли т.к. сначала идет чтение из чанков старого дбспэйса в новое, а затем ситывание уже перенесенных данных и сортировки.
Конечно же, индексы перестраиваются, ведь данные физически изменяют свое местоположение. Но зачем же перестраивать индексы все время ? Значительно проще выключить индексы на период перезаписи и затем включить, для однократной перестройки. Будет значительно быстрее.
Конечно же, онлайновый режим работы (системы в целом) страдает, но то же самое получится и при выгрузке-загрузке.
К сожалению, уже упомянутая проблема длинной транзакции значительно более тяжелая и о ней я успел забыть (спасибо Тане за напоминание).

Выключить, это значит сделать drop index ?
Т.е. сначала дропнуть индексы, затем сделать альтер фрагмент и создать их?

Вообще альтер фрагмент меня привлек именно тем, что не надо следить за индексами и ссылками на переносимую таблицу.
ИМНО если убивать индексы, а затем их создавать (плюс ссылки) не сильно от перевыгрузки отличается. Выгрузка загрузка отнимает процентов 20-25 от всего процесса, можно конечно сэкономить еще 10-12. Плюс еще то что на файловой системе не надо место разыскивать.
Надо будет попробовать.

Про отключение журнала само-собой, у меня еще и HADR надо отключать, а потом заново его синхронизировать.
...
Рейтинг: 0 / 0
дефрагментация данных
    #33987469
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpr vasilis
Значительно проще выключить индексы на период перезаписи и затем включить, для однократной перестройки. Будет значительно быстрее.

Выключить, это значит сделать drop index ?
Т.е. сначала дропнуть индексы, затем сделать альтер фрагмент и создать их?
Нет, конечно. Я же написал "выключить", т.е. сделать
Код: plaintext
set indexes for <Укажи имя таблицы (tabname)> disabled
Выключаться все неавтоиндексы. Соответственно, для оставшихся нужно, опять таки, выключить (а не дропнуть) соответствующие констрейнты.
А дропнуть в переводе на русский звучит как "удалить".
...
Рейтинг: 0 / 0
дефрагментация данных
    #33988709
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
vasilis cpr vasilis
Значительно проще выключить индексы на период перезаписи и затем включить, для однократной перестройки. Будет значительно быстрее.

Выключить, это значит сделать drop index ?
Т.е. сначала дропнуть индексы, затем сделать альтер фрагмент и создать их?
Нет, конечно. Я же написал "выключить", т.е. сделать
Код: plaintext
set indexes for <Укажи имя таблицы (tabname)> disabled
Выключаться все неавтоиндексы. Соответственно, для оставшихся нужно, опять таки, выключить (а не дропнуть) соответствующие констрейнты.
А дропнуть в переводе на русский звучит как "удалить".

Подозреваю, что такое чудо на моей 7.31 недоступно, а здесь версия сервера тоже не звучала.
...
Рейтинг: 0 / 0
дефрагментация данных
    #33988900
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpr
Подозреваю, что такое чудо на моей 7.31 недоступно, а здесь версия сервера тоже не звучала.
доступно
...
Рейтинг: 0 / 0
дефрагментация данных
    #33994722
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
Документация рулит!
И правда доступно.
пошел пробовать.
...
Рейтинг: 0 / 0
дефрагментация данных
    #33994995
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
vasilis cpr vasilis
Значительно проще выключить индексы на период перезаписи и затем включить, для однократной перестройки. Будет значительно быстрее.

Выключить, это значит сделать drop index ?
Т.е. сначала дропнуть индексы, затем сделать альтер фрагмент и создать их?
Нет, конечно. Я же написал "выключить", т.е. сделать
Код: plaintext
set indexes for <Укажи имя таблицы (tabname)> disabled
Выключаться все неавтоиндексы. Соответственно, для оставшихся нужно, опять таки, выключить (а не дропнуть) соответствующие констрейнты.
А дропнуть в переводе на русский звучит как "удалить".

Попробовал отключить индексы и включить - получилось. Но вот беда - альтер фрагмент с отключенными индексами работать не хочет.
===========================================================
-949 Unable to alter fragmentation scheme when indexes disabled.

An attempt has been made to alter the fragmentation scheme on a table
that has disabled indexes. This is not allowed. The action is aborted.
===========================================================
ODS 7.31 FD6
...
Рейтинг: 0 / 0
дефрагментация данных
    #33995722
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
кстати в 4367.pdf ничего не прописано про то, как будет реагировать HADR на отключение индексов. Кто нибудь пробовал?
...
Рейтинг: 0 / 0
дефрагментация данных
    #34001152
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это легко проверить на практике, неужели так сложно поднять тестовую систему с HADR ? Я бы проверил, но пока что в отпуске.

Всегда надо проверять то что написано или сказано...
...
Рейтинг: 0 / 0
дефрагментация данных
    #34001890
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cprкстати в 4367.pdf ничего не прописано про то, как будет реагировать HADR на отключение индексов. Кто нибудь пробовал?
а что тут особенно реагировать? При включении индексов обратно они будут перестроены и соответственно отосланы на вторичный севрер.
Не проверяла :-)
...
Рейтинг: 0 / 0
дефрагментация данных
    #34001996
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
К сожалению при наличии ошибки 949 на попытку альтерфрагмента с выключенными индексами интерес к реакции HADR на отключение индексов переходит в плоскость сугубо теоретическую.
...
Рейтинг: 0 / 0
дефрагментация данных
    #34002872
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
Тан cprкстати в 4367.pdf ничего не прописано про то, как будет реагировать HADR на отключение индексов. Кто нибудь пробовал?
а что тут особенно реагировать? При включении индексов обратно они будут перестроены и соответственно отосланы на вторичный севрер.
Не проверяла :-)

дааа...
а вы попробуйте взять табличку строк на миллионов 30-40 и попробуйте.
Я и без хадра обязательно провожу эксперименты, прежде чем приступать, а с ним часто проявляются неожиданные особенности при больших объемах данных.
Так например без хадра удаление индекса происходит всегда быстро для больших и малых таблиц, а вот с хадром на больших таблицах все иначе.
...
Рейтинг: 0 / 0
дефрагментация данных
    #34003996
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpr Тан cprкстати в 4367.pdf ничего не прописано про то, как будет реагировать HADR на отключение индексов. Кто нибудь пробовал?
а что тут особенно реагировать? При включении индексов обратно они будут перестроены и соответственно отосланы на вторичный севрер.
Не проверяла :-)

дааа...
а вы попробуйте взять табличку строк на миллионов 30-40 и попробуйте.
Я и без хадра обязательно провожу эксперименты, прежде чем приступать, а с ним часто проявляются неожиданные особенности при больших объемах данных.
Так например без хадра удаление индекса происходит всегда быстро для больших и малых таблиц, а вот с хадром на больших таблицах все иначе.
Я не говорила, что создание индексов с HADR происходит так же, как и без HADR .
Я говорю - он не будет реагировать на отключение-включение по особенному . Отключит, а потом пересоздаст.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / дефрагментация данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]