powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / аск фор кодривью :)
25 сообщений из 71, страница 2 из 3
аск фор кодривью :)
    #40114622
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
legg
kapelan
пропущено...


Код: plsql
1.
2.
     fetch c bulk collect  into ar limit 10000; 
     forall i in 1..ar.count save exceptions


или я чего то не понимаю или выглядит так, что вы сравниваете скорость чтения с диска данных таблицы и скорость перебора массива в оперативной памяти.


такое обычно пишут в том случае если не получается одним махом проапдейтить всю таблицу.
И тогда девелопер рисует оный код и зовет ее в лупе.
Тут надо понимать что ничего таки не изменится - девелопер зовет эту лупу энное число раз, пока не апдейтится вся таблица.
Грубо говоря те-же грабли без большого лока а по продолжительности дольше.

С мат. вью тоже без большого лока, только быстрее в разы.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114623
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
legg
снапшот ту олд практически гарантирован ведь при прямом апдейте всего сразу?

update никак не может дать snapshot too old, поскольку берет блоки в current режиме.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114625
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelan
Тут надо понимать что ничего таки не изменится

Заблуждаетесь.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114626
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
legg
...
или я чего то не понимаю или выглядит так, что вы сравниваете скорость чтения с диска данных таблицы и скорость перебора массива в оперативной памяти.

Вы делаете тройную работу - два раза читаете блоки данных в буфере данных, и еще перебираете массив.
При этом второе чтение у вас всегда сопровождается проверкой - не надо ли соответствующий блок еще раз прочитать в память.

Кроме того, с транзакционной точки зрения, вы совершаете логическую ошибку ,
не блокируя прочитанные вашим первым чтением данные.
После исключения логических ошибок ваш код, может быть, просто поставит базу колом на какое-то количество часов.

в яблочко
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114627
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
legg
...
или я чего то не понимаю или выглядит так, что вы сравниваете скорость чтения с диска данных таблицы и скорость перебора массива в оперативной памяти.

Вы делаете тройную работу - два раза читаете блоки данных в буфере данных, и еще перебираете массив.
При этом второе чтение у вас всегда сопровождается проверкой - не надо ли соответствующий блок еще раз прочитать в память.

Кроме того, с транзакционной точки зрения, вы совершаете логическую ошибку, не блокируя прочитанные вами данные.
После исключения логических ошибок ваш код, может быть, просто поставит базу колом на какое-то количество часов.

я не понимаю (
"два раза читаете блоки данных в буфере данных," - это где?
"с транзакционной точки зрения " - условием where отбираются те записи которые ни при каких обстоятельствах не будут принимать участие ни в каких транзакциях. потому колом поставить не должен). но в общем - верное замечание. только вот неверное условие where если зацепит записи участвующие потенциально в других транзакциях наделает делов куда больше чем поставит базу колом. так что кол в виде блокировок будет не бедой а спасением))
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114628
kapelan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
kapelan
Тут надо понимать что ничего таки не изменится

Заблуждаетесь.

Нет не заблуждаюсь, да есть бенефиты у лупа но недостатки значительно хуже booby точно написал
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114629
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelan
andrey_anonymous
пропущено...
Заблуждаетесь.

Нет не заблуждаюсь, да есть бенефиты у лупа

Не туда смотрите.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114634
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelan,

вам пытаются сказать, что ваша идея про матвью сама по себе либо вообще не будет работать,
а если повезет, то будет работать всего на порядок - другой хуже, чем вообще любое другое решение.
В норме и три порядка может наскрестись.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114636
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelan
legg
пропущено...

или я чего то не понимаю или выглядит так, что вы сравниваете скорость чтения с диска данных таблицы и скорость перебора массива в оперативной памяти.


такое обычно пишут в том случае если не получается одним махом проапдейтить всю таблицу.
И тогда девелопер рисует оный код и зовет ее в лупе.
Тут надо понимать что ничего таки не изменится - девелопер зовет эту лупу энное число раз, пока не апдейтится вся таблица.
Грубо говоря те-же грабли без большого лока а по продолжительности дольше.

С мат. вью тоже без большого лока, только быстрее в разы.

матвью чем то принципиально отличается простой таблицы? суть вопроса - как проапдейтить большое количество (10000000) записей? считаете что ничего страшного одним апдейтом?
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114637
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapelan,

индекс в этой истории, если вообще смотрится, то функциональный, а скорее и вовсе bitmap,
и насколько это совместимо с общей логикой использования целевой таблицы - издалека не видно.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114639
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBMS_PARALLEL_EXECUTE OverviewThis package lets you incrementally update table data in parallel, in two high-level steps.

1. Group sets of rows in the table into smaller-sized chunks.
2. Run a user-specified statement on these chunks in parallel, and commit when
finished processing each chunk.

This package introduces the notion of parallel execution task. This task groups the
various steps associated with the parallel execution of a PL/SQL block, which is
typically updating table data.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114640
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я за вариант с разбивкой по диапазонам rowid. заодно можно и в параллели запустить.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114641
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
kapelan,

индекс в этой истории, если вообще смотрится, то функциональный, а скорее и вовсе bitmap,
и насколько это совместимо с общей логикой использования целевой таблицы - издалека не видно.


да бог с ним с этим индексом. не из-за него тормоза то. большой апдейт (долгий) это ведь плохо? как минимум ролбэксегменты растут из-за него. могут ведь кончится? или я вообще ахинею несу и можно хоть по 5 миллиардов строк одни выражением апдейтить?
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114643
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
параллели нельзя. потому что. только в самом крайнем случае, через кучу согласований. внутренние наши обычаи такие
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114645
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
kapelan,
индекс в этой истории, если вообще смотрится, то функциональный, а скорее и вовсе bitmap

Ммм?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select 10000000/1000000000*100 || '%' from dual;

10000000/1000000000*100||'%'
----------------------------
1%

SQL> 
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114647
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
legg
можно хоть по 5 миллиардов строк одни выражением апдейтить?

1. Если update одной транзакцией, то нужен будет большой rollback segment.
2. Statement restart - серьезная проблема для больших update - убедитесь, что не наступите.
3. В Вашем сценарии update вообще не нужен, delete-returning-bulk insert будет дешевле.
Впрочем, повторяюсь.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114650
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
legg
параллели нельзя. потому что. только в самом крайнем случае, через кучу согласований. внутренние наши обычаи такие

уточню - паралелль здесь не в смысле ENABLE_PARALLEL_DML, а в смысле два независимых процесса, обрабатывающих непересекающиеся диапазоны.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114651
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
3. В Вашем сценарии update вообще не нужен, delete-returning-bulk insert будет дешевле.
Впрочем, повторяюсь.

это я запомнил и записал в специальный файлик ). Попробую. Спасибо. Буду тест кейсы писать - сверять скорость)
andrey_anonymous
1. Если update одной транзакцией, то нужен будет большой rollback segment.

- ну так и возвращаемся, транзакцию со всех сторон крайне желательно бить на куски. собственно вопрос и был как это делается по фэн шум.
andrey_anonymous

2. Statement restart - серьезная проблема для больших update - убедитесь, что не наступите.
- я не могу нагуглить что это(.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114652
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кит северных морей
legg
параллели нельзя. потому что. только в самом крайнем случае, через кучу согласований. внутренние наши обычаи такие

уточню - паралелль здесь не в смысле ENABLE_PARALLEL_DML, а в смысле два независимых процесса, обрабатывающих непересекающиеся диапазоны.
по сути
DBMS_PARALLEL_EXECUTE и делает это вроде бы?
теоретически можно, но не особо смысл есть мне кажется. нет жестких требований к времени. главное - не положить систему
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114654
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
legg
кит северных морей
пропущено...

уточню - паралелль здесь не в смысле ENABLE_PARALLEL_DML, а в смысле два независимых процесса, обрабатывающих непересекающиеся диапазоны.
по сути
DBMS_PARALLEL_EXECUTE и делает это вроде бы?
теоретически можно, но не особо смысл есть мне кажется. нет жестких требований к времени. главное - не положить систему

надо будет -допишу потом. главное чтоб суть заработала
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114658
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
ответ такой - в живой ситуации не всякий админ порадуется, когда ему предложат держать стандартный индекс
на толстой таблице, если заранее известно, что использоваться осмысленно он будет на 1%
Кроме того, его clustering фактор непредсказуем, хотя именно эта история может существенно компенсироваться хинтами.

В принципе, можно и настоять, что он нужен, при отсутствии ограничений со стороны вставки.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114659
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114660
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
legg
я не могу нагуглить что это(.

Это чудный механизм согласования целостности при dml.
Применяется при update, delete, select for update и merge (с древним но непофиксенным багом).
Если утрировать (там деталей миллион), то смысл в следующем: бредет процесс update по блокам таблицы.
По их current версиям.
Строчки перебирает, на предикат тестирует.
И набредает на запись, которая:
- подходила под предикат на момент запуска запроса (на scn согласования)
- была изменена после запуска update конкурирующей транзакцией
- изменение вывело запись из предиката.
Упс! думает процесс, тут такое дело, набор данных-то рассогласован, надо что-то делать!
Ну и откатывает ВСЕ произведенные до той поры изменения, хоть 99999999 из 10000000
После чего начинает всё с начала.
...а юзер ждет у моря погоды.
И чем больше времени прошло от запуска запроса, тем выше вероятность влететь в ситуацию рассогласования и тем больший объем rollback он будет откатывать, а затем закатывать обратно на новый scn.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114661
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
andrey_anonymous,
ответ такой - в живой ситуации не всякий админ порадуется

Против правильного функционального я не возражал.
Но bitmapped тут совсем не при делах.
...
Рейтинг: 0 / 0
аск фор кодривью :)
    #40114662
legg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
legg
я не могу нагуглить что это(.

Это чудный механизм согласования целостности при dml.
Применяется при update, delete, select for update и merge (с древним но непофиксенным багом).
Если утрировать (там деталей миллион), то смысл в следующем: бредет процесс update по блокам таблицы.
По их current версиям.
Строчки перебирает, на предикат тестирует.
И набредает на запись, которая:
- подходила под предикат на момент запуска запроса (на scn согласования)
- была изменена после запуска update конкурирующей транзакцией
- изменение вывело запись из предиката.
Упс! думает процесс, тут такое дело, набор данных-то рассогласован, надо что-то делать!
Ну и откатывает ВСЕ произведенные до той поры изменения, хоть 99999999 из 10000000
После чего начинает всё с начала.
...а юзер ждет у моря погоды.
И чем больше времени прошло от запуска запроса, тем выше вероятность влететь в ситуацию рассогласования и тем больший объем rollback он будет откатывать, а затем закатывать обратно на новый scn.

ясно. спасибо! я краем уха слышал, но забыл. )
...
Рейтинг: 0 / 0
25 сообщений из 71, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / аск фор кодривью :)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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