Гость
Форумы / Informix [игнор отключен] [закрыт для гостей] / Головоломка-4: пропавшие записи / 14 сообщений из 14, страница 1 из 1
15.08.2010, 08:41
    #36792251
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
Продолжаю серию головоломок для дибиэев.
Дано : огромная таблица, которую надо выгрузить в файл(ы) за ограниченное время.
Принимаю решение распараллелить выгрузку, используя в качестве фильтра rowid.

То есть, один процесс выгружает четные rowid, второй - нечетные.
1. unload to file1 select * from dps_document where mod(rowid, 2) = 0
2. unload to file2 select * from dps_document where mod(rowid, 2) = 1

После выгрузки оказывается, что примерно 20% записей были пропущенны.

Почему ?

В таком вот аксепте
...
Рейтинг: 0 / 0
15.08.2010, 09:43
    #36792259
svat2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
Выбегалло,

0) ну так НДС! :)

1) "огромная таблица"
проблемы при обработке функцией mod() величин rowid, которые не умещаются в 4 байта типа REAL, который она ожидает на входе.

2) какое-то невероятное "смещение" rowid в процессе выгрузки (удаление/вставка новых записей другими процессами) или что-то в этом роде...

3) какой-то "побочный эффект" паралеллизма (борьба за ресурсы или что-то в этом роде)
...
Рейтинг: 0 / 0
15.08.2010, 10:27
    #36792264
GVF112GVF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
Выбегалло,

1. Какой тип блокировки использовался (на уровне страниц, на уровне записей)?
2. Какой используется уровень изоляции транзакций ?
3. Используются фрагментированные таблицы или не фрагментированные ?

С уважением,
Вадим.
...
Рейтинг: 0 / 0
15.08.2010, 12:10
    #36792318
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
GVF112GVF,

Уровень блокировки - row;
rowid в процессе выгрузки не менялись.
уровень транзакций - dirty read, но данные не меняются (квази-статические данные). Forget about it, it's not relative to the solution :)
Таблица нефрагментированная.
"Побочных эффектов параллелизма" нет, если бы были -все сообчество DBA было бы сильно заинтересованл, поскольку... Поскольку. Поскольку мы пользуемя параллельными загрузками - выгрузками все время.
...
Рейтинг: 0 / 0
15.08.2010, 12:12
    #36792320
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
svat2Выбегалло,
е функцией mod() величин rowid, которые не умещаются в 4 байта типа REAL, который она ожидает на входе.


close but no cigar !
...
Рейтинг: 0 / 0
15.08.2010, 12:17
    #36792326
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
Выбегаллоsvat2Выбегалло,
е функцией mod() величин rowid, которые не умещаются в 4 байта типа REAL, который она ожидает на входе.


close but no cigar !

И, конечно, rowid никогда не может быть real. Как, собственно, не должно быть real параметр для функции mod
...
Рейтинг: 0 / 0
15.08.2010, 15:12
    #36792454
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
mod(rowid, 2) is null ? почему так идей нет
...
Рейтинг: 0 / 0
15.08.2010, 15:16
    #36792457
GVF112GVF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
Выбегалло,

Что показывает:
1. select count(*) from dps_document where mod(rowid, 2) = 0 ?
2. select count(*) from dps_document where mod(rowid, 2) = 1 ?
3. select count(*) from dps_document ?

Какая версия IDS используется ?
Надеюсь, что Update Statistics выполняется ?!

С уважением,
Вадим
...
Рейтинг: 0 / 0
16.08.2010, 10:40
    #36793041
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
а дошло, я забыл математику
mod(-11,2) = -1
...
Рейтинг: 0 / 0
16.08.2010, 18:00
    #36794188
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
Журавлев Дениса дошло, я забыл математику
mod(-11,2) = -1

Приз уходит телезрителю ! :)

Таки да, rowid может быть отрицательным, мать его за ногу.
...
Рейтинг: 0 / 0
16.08.2010, 20:13
    #36794366
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
ВыбегаллоТаки да, rowid может быть отрицательным, мать его за ногу.
Вот всю свою информиксовскую "жизнь" я сторонился rowid-ов и программистам категорически запрещал его использовать. Вот и еще одно подтверждение :)

P.S. А он что, 4-х байтный даже в поздних версиях ?
...
Рейтинг: 0 / 0
17.08.2010, 09:51
    #36794768
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
vasilisВот всю свою информиксовскую "жизнь" я сторонился rowid-ов и программистам категорически запрещал его использовать. Вот и еще одно подтверждение :)Это как с goto, для тех кто зрит глубоко.

vasilisP.S. А он что, 4-х байтный даже в поздних версиях ?А как его поменять, это надо перелопатить все индексы. Оракл мудро подошел к этому вопросу, создал новый тип спейсов назвал их типа big...., и сказал а там роуайди 20 байт а не 10.
...
Рейтинг: 0 / 0
17.08.2010, 10:15
    #36794833
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
Журавлев Денис Оракл мудро подошел к этому вопросу, создал новый тип спейсов назвал их типа big...., и сказал а там роуайди 20 байт а не 10.а нет, в bigfile они просто стали 10 байт чуть иначе использовать.
...
Рейтинг: 0 / 0
18.08.2010, 23:31
    #36798997
svat2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Головоломка-4: пропавшие записи
Выбегалло
не должно быть real параметр для функции mod

... а вот в документации пишут таки про real ("чур, меня не бить"):

Код: plaintext
1.
2.
3.
4.
5.
MOD Function

The MOD function takes as arguments  two real number operands , and returns the remainder from integer division of the integer part 
of the first argument (the dividend) by the integer part of the second argument (the divisor). The value returned is an INT data type (or INT8 
for remainders outside the range of INT). The quotient and any fractional part of the remainder are discarded. The divisor cannot be 0. 
Thus, MOD (x,y) returns y (modulo x). Make sure that any variable that receives the result is of a data type that can store the returned value.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Головоломка-4: пропавшие записи / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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