|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
Продолжаю серию головоломок для дибиэев. Дано : огромная таблица, которую надо выгрузить в файл(ы) за ограниченное время. Принимаю решение распараллелить выгрузку, используя в качестве фильтра 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% записей были пропущенны. Почему ? В таком вот аксепте ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2010, 08:41 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
Выбегалло, 0) ну так НДС! :) 1) "огромная таблица" проблемы при обработке функцией mod() величин rowid, которые не умещаются в 4 байта типа REAL, который она ожидает на входе. 2) какое-то невероятное "смещение" rowid в процессе выгрузки (удаление/вставка новых записей другими процессами) или что-то в этом роде... 3) какой-то "побочный эффект" паралеллизма (борьба за ресурсы или что-то в этом роде) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2010, 09:43 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
Выбегалло, 1. Какой тип блокировки использовался (на уровне страниц, на уровне записей)? 2. Какой используется уровень изоляции транзакций ? 3. Используются фрагментированные таблицы или не фрагментированные ? С уважением, Вадим. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2010, 10:27 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
GVF112GVF, Уровень блокировки - row; rowid в процессе выгрузки не менялись. уровень транзакций - dirty read, но данные не меняются (квази-статические данные). Forget about it, it's not relative to the solution :) Таблица нефрагментированная. "Побочных эффектов параллелизма" нет, если бы были -все сообчество DBA было бы сильно заинтересованл, поскольку... Поскольку. Поскольку мы пользуемя параллельными загрузками - выгрузками все время. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2010, 12:10 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
svat2Выбегалло, е функцией mod() величин rowid, которые не умещаются в 4 байта типа REAL, который она ожидает на входе. close but no cigar ! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2010, 12:12 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
Выбегаллоsvat2Выбегалло, е функцией mod() величин rowid, которые не умещаются в 4 байта типа REAL, который она ожидает на входе. close but no cigar ! И, конечно, rowid никогда не может быть real. Как, собственно, не должно быть real параметр для функции mod ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2010, 12:17 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
mod(rowid, 2) is null ? почему так идей нет ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2010, 15:12 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
Выбегалло, Что показывает: 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 выполняется ?! С уважением, Вадим ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2010, 15:16 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
а дошло, я забыл математику mod(-11,2) = -1 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2010, 10:40 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
Журавлев Дениса дошло, я забыл математику mod(-11,2) = -1 Приз уходит телезрителю ! :) Таки да, rowid может быть отрицательным, мать его за ногу. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2010, 18:00 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
ВыбегаллоТаки да, rowid может быть отрицательным, мать его за ногу. Вот всю свою информиксовскую "жизнь" я сторонился rowid-ов и программистам категорически запрещал его использовать. Вот и еще одно подтверждение :) P.S. А он что, 4-х байтный даже в поздних версиях ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2010, 20:13 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
vasilisВот всю свою информиксовскую "жизнь" я сторонился rowid-ов и программистам категорически запрещал его использовать. Вот и еще одно подтверждение :)Это как с goto, для тех кто зрит глубоко. vasilisP.S. А он что, 4-х байтный даже в поздних версиях ?А как его поменять, это надо перелопатить все индексы. Оракл мудро подошел к этому вопросу, создал новый тип спейсов назвал их типа big...., и сказал а там роуайди 20 байт а не 10. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2010, 09:51 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
Журавлев Денис Оракл мудро подошел к этому вопросу, создал новый тип спейсов назвал их типа big...., и сказал а там роуайди 20 байт а не 10.а нет, в bigfile они просто стали 10 байт чуть иначе использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2010, 10:15 |
|
Головоломка-4: пропавшие записи
|
|||
---|---|---|---|
#18+
Выбегалло не должно быть real параметр для функции mod ... а вот в документации пишут таки про real ("чур, меня не бить"): Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2010, 23:31 |
|
|
start [/forum/topic.php?fid=44&msg=36792318&tid=1607519]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
145ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 239ms |
total: | 500ms |
0 / 0 |