Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Informix Новый топик    Ответить
 Вопрос про фрагментирование таблицы.  [new]
Сергей Б
Member

Откуда: Москва
Сообщений: 151
Добрый день, господа. Нужен совет.
Есть таблица. В ней около 2 млрд. строк и размером около 2 Тб (без индексов). Таблица фрагментирована round-robin (60 dbspace под данные и 8 под индексы). В нее ежедневно заливаются данные и ежеквартально чистятся примерно 10 % строк (данные льются и чистятся по полю с типом datetime). Есть задача перенести данные на новый сервер перезаливкой в течении 2-3 недель
Возникает вопрос, а не изменить ли тип фрагментирования с round-robin на фрагментирование по выражению на поле с типом datetime. С одной стороны «хлопотно» каждый год создавать новые dbspace, но с другой стороны легко удалять уже не используемые фрагменты

В книге Carlton Doe "IBM Informix Dynamic Server 11" автор не советует применять фрагментирование по полям с типом данных serial, data, datetime.
Можете посоветовать как поступить?
И еще вопрос. Применяя
EXECUTE FUNCTION task("table compress table…").
Данная функция будет применятся к только добавленным строкам или она будет «молотить» по всей таблице.

Версия 11.70.FC6
9 авг 17, 10:57    [20710200]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
cpr
Member

Откуда: Rostov-on-Don
Сообщений: 717
Сергей Б,

ИМХО если есть возможность провести адекватное нагрузочное тестирование, то его результат стоит намного больше абстрактных советов.
Кроме того не забывайте про очень важный момент - расфазировка данных. Для меня например выбор круговой фрагментации был решающим из-за того что невозможно было смириться с незаполненностью одних пространств и риском получить ошибку из=за переполненности других.
9 авг 17, 11:32    [20710274]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
Сергей Б
Member

Откуда: Москва
Сообщений: 151
cpr,

Спасибо за ответ.
Для тестирования нет времени, да и долго очень. Недавно обсуждалась тема про оптимизации таблиц
[url=]http://www.sql.ru/forum/1255054/optimizaciya-tablicy[/url]
Я на тестовой среде на таком же объеме данных "зарядил"
execute function task('table repack shrink'...) 

Месяц работало, дальше не выдержал, прибил сессию. А вот архив логов создалось на 290 Гб.
9 авг 17, 13:13    [20710616]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
яфшуеі
Guest
"хлопотно" - почему?
ведь можно создать partition в одном пространстве.
Т.е. можно добавлять partition

В случае перевода на фрагментирование по выражению по полю с datetime вы сразу привязываете размер фрагмента
к количеству записей за указанный период.
А если количество будет больше и будет превышение лимита на размер?
9 авг 17, 13:40    [20710733]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
Сергей Б
Member

Откуда: Москва
Сообщений: 151
яфшуеі,

В книге Carlton Doe "IBM Informix Dynamic Server 11" автор не советует применять фрагментирование по полям с типом данных serial, data, datetime.

Вот я и спрашиваю, может кто-то может опровергнуть или посоветовать обходной вариант?

В случае перевода на фрагментирование по выражению по полю с datetime вы сразу привязываете размер фрагмента 
к количеству записей за указанный период.
А если количество будет больше и будет превышение лимита на размер?

У меня все dbspace авторасширяемые. Так, что превышение лимита не будет. К тому же БД создана со страницей 16 К
9 авг 17, 14:36    [20710947]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
cpr
Member

Откуда: Rostov-on-Don
Сообщений: 717
Сергей Б
яфшуеі,

У меня все dbspace авторасширяемые. Так, что превышение лимита не будет. К тому же БД создана со страницей 16 К


Лимит есть всегда, для 16K страниц насколько я понимаю будет ограничение 128ГБ на размер фрагмента
9 авг 17, 17:32    [20711561]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
Яковлев Павел
Member

Откуда: Ленинград
Сообщений: 233
Если по полю даты идёт основной поток выборок для анализа, то фрагментация по нему позволит автоматически пользоваться пропуском при сканировании тех пространств где по условиям выбора данных заведомо нет.

И это может быть очень большим плюсом перед round-robin.

С другой стороны, сейчас у вас вставка идёт считайте в 8 раз параллельнее - конкуренция за индекс меньше в 8 раз из-за 8 пространств.

При фрагментации по дате этого не будет.

В зависимости от соотношения SELECT/INSERT/DELETE и глубины времени во WHERE можно сделать квартальную или даже месячную разбивку.

Только не забывайте EXEC_DLL=1 для ALTER FRAGMENT при добавлении нового куска и учитыайте время работы ALTER. Впрочем при добавке куска который по диапазону заведомо не перекрывается с имеющимися требуется анализ только REMINDER. А там должно быть скорее всего пусто.
10 авг 17, 21:20    [20714840]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
Сергей Б
Member

Откуда: Москва
Сообщений: 151
Яковлев Павел,
Большущее спасибо!!!

А что это за "зверь" EXEC_DLL . Поиск в ГУГЛе ничего не выдает. Ссылку не выложите?

И еще, Вы можете прислать мне на адрес sesvjudi@yandex.ru свой e-mail. Хотелось бы пообщаться.
11 авг 17, 16:03    [20717319]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
Яковлев Павел
Member

Откуда: Ленинград
Сообщений: 233
Это я по памяти криво написал

Зверь отгоняет нафиг всех от таблицы что бы не ждать когда её изволят освободить

Вот кусок из документации

Informix Guid to SQL: Syntax
The ALTER FRAGMENT operation requires exclusive access and exclusive locks on
all of the tables involved in the operation. If you enable the FORCE_DDL_EXEC
session environment option, you can force out other transactions that have opened
a table involved in an ALTER FRAGMENT ON TABLE operation, or that have
placed locks on any of those tables. If the server is unable to get exclusive access
and exclusive locks on the table, the server starts rolling back the transactions that
are open or that have locks on the table, until the value specified with the
FORCE_DDL_EXEC option is reached.
14 авг 17, 22:03    [20723528]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
Сергей Б
Member

Откуда: Москва
Сообщений: 151
Спасибо большое Павел.

Помогите пожалуйста с фрагментированием индексов. Никак не получается что-то придумать.

Есть фрагментированная таблица

create table paym (
id serial8,
reg_date datetime,
mod_date datetime,
param_1 varchar(50)
)
partition by expression 
partition p201206 (mod_date < datetime(2012-07-01 00:00:00) year to second ) in pm_12_6, 
partition p201207 (mod_date < datetime(2012-08-01 00:00:00) year to second ) in pm_12_7, 
partition p201208 (mod_date < datetime(2012-09-01 00:00:00) year to second ) in pm_12_8;

CREATE INDEX paym_ix_mod_date ON paym(mod_date)
PARTITION by EXPRESSION
PARTITION p201206 (mod_date < DATETIME(2012-07-01 00:00:00) YEAR TO SECOND) IN pm_12_6,
PARTITION p201207 (mod_date < DATETIME(2012-08-01 00:00:00) YEAR TO SECOND) IN pm_12_7,
PARTITION p201208 (mod_date < DATETIME(2012-09-01 00:00:00) YEAR TO SECOND) IN pm_12_8;


Как сделать, чтобы создание индексов по столбцам id , param_1 и reg_date тоже разместить в dbspace (pm_12_6 - pm_12_8), учитывая что reg_date - mod_date может быть от 0 секунд до 3 лет.
15 авг 17, 16:38    [20725857]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
Яковлев Павел
Member

Откуда: Ленинград
Сообщений: 233
Ну так в самостоятельно пробовали ?

Создайте фрагметированную таблицу, потом индекс не по стоблцу фрагментации и посмотрите схему индекса.
15 авг 17, 22:50    [20726756]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
oleg ruban
Member

Откуда:
Сообщений: 2
Есть программа Samrt Defrag я через нее делаю дефрагментацию
25 сен 17, 15:38    [20821087]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
bk0010
Member

Откуда:
Сообщений: 3401
Очень смешно
25 сен 17, 16:56    [20821333]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про фрагментирование таблицы.  [new]
Сергей Б
Member

Откуда: Москва
Сообщений: 151
Может кому интересно.
Создавал таблицы с разным типом фрагментации и заливал данные около 1 млн.
1. фрагментирование по выражению + первичный ключ по двум полям
2. фрагментирование по выражению первичный ключ в отдельном dbspace
3. фрагментирование по интервалу + первичный ключ по двум полям
4. round robin

Что получилось. (размер таблицы Гб с индексами и Время заливки HH:MM:SS)
1. 14,6 39:26:10
2. 13,4 46:00:07
3. 14,1 41:48:26
4. 12,7 37:31:05

Выбрал все-таки пункт 1 (легче избавляться от старых данных. detach > выгрузка на ленту > drop)
Заливал данные в таблицу без индексов, теперь при одновременном создании (из разных сессий) индексов, получаю ошибку

-242 SQL error: Could not open database table
-106 ISAM error: non-exclusive access

Можно ли вообще создавать одновременно несколько индексов?
26 сен 17, 17:51    [20824706]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить