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

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

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

Заранее большое спасибо!
...
Рейтинг: 0 / 0
18.08.2006, 18:06
    #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
18.08.2006, 20:42
    #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
18.08.2006, 20:44
    #33929665
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дефрагментация данных
fill-factor относится к индексу, а не к даннным. Данные заполняют страницу "до упора".
При slow alter число занятых страниц, скорей всего, изменится. При alter in-place - нет.

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

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

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

> филлфактор
Это не в тему. Тут про индексы...
...
Рейтинг: 0 / 0
30.08.2006, 18:08
    #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
08.09.2006, 20:57
    #33975408
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дефрагментация данных
ага init fragment рулит, но на не очень больших объемах.

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

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

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

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

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

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

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

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

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

Подозреваю, что такое чудо на моей 7.31 недоступно, а здесь версия сервера тоже не звучала.
...
Рейтинг: 0 / 0
15.09.2006, 00:06
    #33988900
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дефрагментация данных
cpr
Подозреваю, что такое чудо на моей 7.31 недоступно, а здесь версия сервера тоже не звучала.
доступно
...
Рейтинг: 0 / 0
18.09.2006, 17:02
    #33994722
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дефрагментация данных
Документация рулит!
И правда доступно.
пошел пробовать.
...
Рейтинг: 0 / 0
18.09.2006, 18:26
    #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
19.09.2006, 09:21
    #33995722
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дефрагментация данных
кстати в 4367.pdf ничего не прописано про то, как будет реагировать HADR на отключение индексов. Кто нибудь пробовал?
...
Рейтинг: 0 / 0
20.09.2006, 19:19
    #34001152
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дефрагментация данных
Это легко проверить на практике, неужели так сложно поднять тестовую систему с HADR ? Я бы проверил, но пока что в отпуске.

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

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

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


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