|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
2 В. Как и обещал, даю более точные координаты: Глава 2 (Архитектура), Процессы, Фоновые (Background) процессы, DBWn - запись блоков базы данных, самое последнее предложение перед "LGWR - запись журнала" (что в англ. варианте выглядит примерно как "LGWR - redo log writer"): Это верно даже несмотря на то, что сервер Oracle может выполнять больший объем ввода/вывода, чем надо (записывает в журнал и в файл данных), - записи в активный журнал повторного выполнения можно пропустить, если в ходе обработки контрольной точки сервер Oracle уже записал измененные блоки на диск. Очень хотелось бы, если не затруднит, увидеть оригинальный текст Кайта. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 21:43 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Markelenkov2 В. Как и обещал, даю более точные координаты: Глава 2 (Архитектура), Процессы, Фоновые (Background) процессы, DBWn - запись блоков базы данных, самое последнее предложение перед "LGWR - запись журнала" (что в англ. варианте выглядит примерно как "LGWR - redo log writer"): Это верно даже несмотря на то, что сервер Oracle может выполнять больший объем ввода/вывода, чем надо (записывает в журнал и в файл данных), - записи в активный журнал повторного выполнения можно пропустить, если в ходе обработки контрольной точки сервер Oracle уже записал измененные блоки на диск. Очень хотелось бы, если не затруднит, увидеть оригинальный текст Кайта. Спасибо. Ne zatrudnit. Pridu domoi posmotru. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 22:23 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
B. Markelenkov2 В. Как и обещал, даю более точные координаты: Глава 2 (Архитектура), Процессы, Фоновые (Background) процессы, DBWn - запись блоков базы данных, самое последнее предложение перед "LGWR - запись журнала" (что в англ. варианте выглядит примерно как "LGWR - redo log writer"): [quot ]Это верно даже несмотря на то, что сервер Oracle может выполнять больший объем ввода/вывода, чем надо (записывает в журнал и в файл данных), - записи в активный журнал повторного выполнения можно пропустить, если в ходе обработки контрольной точки сервер Oracle уже записал измененные блоки на диск. Очень хотелось бы, если не затруднит, увидеть оригинальный текст Кайта. Спасибо. Главка называется "DBWn - Database Block Writer". Она действительно идет перед главкой "LGWR - Log Writer". Вот самый последний абзац: I would like to make one final point about DBWn. It will, almost by definition, write out blocks scattered all over disk - DBWn does lots of scattered writes. When you do an update, you'll be modifying index blocks that are stored here and there and data blocks that are randomly distributed on disk as well. LGWR, on the other hand, does lots of sequential writes to the redo log. This is an important distinction, and one of the reasons that Oracle has a redo log and a LGWR process. Scattered writes are significantly slower than sequential writes. By having the SGA buffer dirty blocks and the LGWR process do large sequential writes that can recreate these dirty buffers, we achieve an increase in performance. The fact that DBWn does its slow job in the background while LGWR does its faster job while the user waits, gives us overall better performance. This is true even though Oracle may technically be doing more I/O then it needs to (writes to the log and to the datafile) - the writes to the online redo log could be skipped if, during a commit, Oracle physically wrote the modified blocks out to disk instead. page 94 А, ну понятно. Если Оракл в течение commit физически записал измененные блоки на диск, то возможно, он и не запишет данные в online redo log. (Не "можно пропустить", как перевели в русском варианте, поэтому я вчера и не поняла, о чем шла речь). Сould be - означает не "можно", а "возможно", "вероятно", "может статься, что". Всего доброго ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 04:18 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Спасибо за ответ. Мне кажется, что Кайт здесь ошибается. Запись в online redo существенно необходима для обеспечения возможности восстановления как при сбое экземпляра (shutdown abort, сбой по питанию и т.п.), так и при сбое носителя. Поэтому отсутствие записи зафиксированных изменений и/или commit-маркера в online redo при последующем сбое носителя и отсутствии бэкапа табличного пространства (или, если быть точнее, конкретного датафайла(ов)) сделает невозможным восстановление базы даных без потерь информации. Именно поэтому после выполнения операций в режиме NOLOGGING (когда нет записи об операции в online redo, или она минимальна) Oracle настоятельно рекомендует выполнить backup соответствующего табл. пространства/пространств. Кроме того, если во время длительной транзакции, которая завершалась бы операцией ROLLBACK, грязные блоки записывались бы на диск (что в действительности и может происходить и обычно происходит), а соответствующая redo-информация не записывалась бы при этом в журналы (а в журнал попадает в том числе информация об изменениях в сегментах отката), то в случае сбоя экземпляра в файлы данных попали бы незафиксированные изменения , которые Oracle при очередном crash recovery не смог бы откатить (нет соотв. redo). Более того, Oracle никогда не записывает грязные блоки на диск до тех пор, пока redo-entries, "защищающие" эти блоки, не будут сброшены на диск в online redo процессом LGWR. Если мне не верите, вот ссылка: http://www.ixora.com.au/notes/rba.htm Кроме этого, стоит упомянуть, что, например, у табл. пространств, у всей базы данных можно установить опцию FORCE LOGGING. Кроме этого, журнальная информация жизненна необходима для режима STANDBY. Правда, существует скрытый параметр, отключающий генерацию redo, но как он сосуществует с опцией FORCE LOGGING я не исследовал. Таким образом, фраза Кайта "...the writes to the online redo log could be skipped if, during a commit, Oracle physically wrote the modified blocks out to disk instead." на мой взгляд, ошибочна, либо он имел ввиду нечто другое. На перевод в данном случае, как мне кажется, грешить нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 09:14 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
2 B. Я не знаю что Кайт имел ввиду этой фразой, но Ваша понимание этого меня заинтересовало. На самом деле Oracle работате так что ни одно ( nothing at all ) физическое изменение в БД не запишеться без предварительной записи в redo log file. Не в log buffer а именно в файл. По изменением БД я подразумеваю - запись блока на диск (будь то изменения сделанные в ходе изминения строки , или после commit cleanout или же изменения транзакционной таблицы в заголовке роллбек сегментов) . Отсюда вытекает 4-й пункт к существующим 3-м пунктам условий сброса log buffer на диск , которые декларируются многоми авторами Oracle литературы. 4-й пункт как раз и говорит о том , что запись в redo log file осуществляется когда процесс DBWR пытается записать грязные блоки на диск, и если они находяться в redo buffer и еще не записаны в redo log file, то нициируется сброс redo buffer на диск. Вот здесь это расписано более понятно. Посмотрите на 4-й пункт. http://www.ixora.com.au/notes/redo_write_triggers.htm ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 11:24 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Ага! Возникло подозрение, что Кайт в электронном виде таки существует :-))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 12:15 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
igor2222Ага! Возникло подозрение, что Кайт в электронном виде таки существует :-))))))) На чем оно основано? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 12:41 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Да цитаты из Кайта какие то большие приводятся. Неужели руками набирались? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 13:09 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Маркеленкову и "Новичку" А что если я, с вашего разрешения, спрошу об этом Тома со ссылкой на вас? Можно? Интересно, что он ответит. P/S К сожалению, электронной версии нет кроме выдержек из первой главы. Просто я быстро печатаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 16:48 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
В.Маркеленкову и "Новичку" А что если я, с вашего разрешения, спрошу об этом Тома со ссылкой на вас? Можно? Интересно, что он ответит. Лично я не против, Виталий (newbie), думаю, тоже будет не против. Кстати, чайником он только прикидывается, если Вы еще не заметили. Про утилиту exp тоже можно было бы спросить, но про возможность сослаться на Фунтика надо у него же и спрашивать. Правда, попутно возникает два вопроса: 1. Умеет ли он читать по-русски? Или Вы ему переведете нас? ;-) 2. Неужели никто на asktom его об этом до сих пор не спрашивал? Ведь книга в английском варианте вышла гораздо раньше, да и англоговорящих спецов по Oracle гораздо больше. Кстати, я заметил, что многие просто боятся спорить с Кайтом. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 17:13 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
2 B. Думаю можно конечно. Но я хотел бы повторить,судя по напечатанным отрывкам, я не могу делать выводы, о чем писал Томас Кайт . Вечером могу посмотреть в оригинале. То что у него не упомянут случай с DBWR это помню. Пост же мой предназначаслся именно вам, глядя на то что складывается некое непонимание механизма рекавери. Не может Oracle записать данные в datafile до того как они будут записаны в online redo logs Ибо тогда рушиться вся теория о восстановлении с redo logs и откате незакоммиченных изминений при crash recovery(если инстанс упал) Не претендуя на точность (вывеска на заборе - "осторожно, злой Fucker!" ) 1. блок данных изменился и был записан в log buffer 2. Этот блок был изменен много времени раньше( указатель на его заголовок помещен в checkpoint queue) и пришло время ему быть записанным на диск by DBWR (checkpoint). Но перед этим DBWR должен убедится что блок не находиться в log buffer и его самое последнее изменения записано в redo log file 3. DBWR отложит этот блок в deferred chekpoint queue и оповестит LGWR о том что надо бы записать этот блок с log buffer на диск. Вот тут и произойдет сброс redo buffer на диск то бишь в current redo log Regards. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 17:57 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Пока не появился "злой Фунтик", чуть уточню Oracle newbie1. блок данных изменился и был записан в log buffer Правильнее было бы сказать "и вектор его изменений был записан в log buffer". 2 В., all Можно еще добавить, что кроме ситуации с checkpoint (переключение журналов, alter system checkpoint, события FAST_START..., log_checkpoint_interval/time,...) DBWR может попросить LGWR сбросить log buffer в current redo еще, например, в случаях, когда: - серверный процесс после просмотра _db_block_max_scan_pct % LRU-списка не может получить free block и просит DBWR сбросить грязные блоки на диск - когда число грязных блоков в LRU-списке достигает _db_large_dirty_queue - выполняется команда alter tablespace xxx begin backup - выполняется shutdown (кроме shutdown abort) - по-моему, еще в случае, когда оптимизатор распараллеливает операции чтения над сегментом, все его грязные блоки должны быть тоже сброшены на диск - наверняка есть еще ситуации, которые я сейчас не вспомнил, но это не суть важно. В общем, всегда, когда DBWR должен сбросить грязный блок на диск, он должен удостовериться, что redo-вектор(а) самых последних изменений этого блока сброшен(ы) процессом LGWR на диск. То есть, LGWR всегда пишет в redo все изменения (естественно, которые попали в log buffer, и опять же таки, только вектор изменений, а не сам блок) любого блока до того, как DBWR запишет в файл данных сам измененный блок. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 19:44 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Markelenkov В.Маркеленкову и "Новичку" А что если я, с вашего разрешения, спрошу об этом Тома со ссылкой на вас? Можно? Интересно, что он ответит. Лично я не против, Виталий (newbie), думаю, тоже будет не против. Кстати, чайником он только прикидывается, если Вы еще не заметили. Про утилиту exp тоже можно было бы спросить, но про возможность сослаться на Фунтика надо у него же и спрашивать. Правда, попутно возникает два вопроса: 1. Умеет ли он читать по-русски? Или Вы ему переведете нас? ;-) 2. Неужели никто на asktom его об этом до сих пор не спрашивал? Ведь книга в английском варианте вышла гораздо раньше, да и англоговорящих спецов по Oracle гораздо больше. Кстати, я заметил, что многие просто боятся спорить с Кайтом. по-руски он не умет, но я переведу. что "новичек" не чайник это ясно, поэтому я его ник и поставила в кавычки. на asktom я смотрела (не утверждаю, что очень внимательно), но дискуссии на эту тему не нашла. чтобы тому и мне было легче, нельзя ли вам с Виталием и с Фунтиком сформулировать вопросы\возражения кратко и в виде 1. 2. 3 ...? том любит умные вопросы и не очень любит глупые, хотя отвечает на все. думаю, ему будет интересно узнать, что его книги читают и обсуждают руские гуру и что в россии есть оракуловские гуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 20:04 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
К сожалению, мне уже некогда, есть дела, которые надо сделать перед отъездом. Жена уже пилит, гонит от компа... Поэтому без меня. А я с удовольствием потом почитаю ответы Тома, если он ответит и Вы дадите ссылочку. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 20:32 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Uvazhaemyi Markelenkov (esli vi eshe ne v otpuske) , Zdes' ya ne soglasna. Vi govorite: Кроме того, если во время длительной транзакции, которая завершалась бы операцией ROLLBACK, грязные блоки записывались бы на диск (что в действительности и может происходить и обычно происходит), а соответствующая redo-информация не записывалась бы при этом в журналы (а в журнал попадает в том числе информация об изменениях в сегментах отката), то в случае сбоя экземпляра в файлы данных попали бы незафиксированные изменения , которые Oracle при очередном crash recovery не смог бы откатить (нет соотв. redo). Tom skazal, cho bloki mogut zapisivat'sa na disk minua redo log tol'ko esli COMMIT. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 23:33 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
B.Tom skazal, cho bloki mogut zapisivat'sa na disk minua redo log tol'ko esli COMMIT. Возможно это просто неточное его высказывание или неправильная интерпретация оного. Oracle не может знать что будет с транзакцией - commit или rollback. Никто не сможет предугадать что захочет сделать юзер, так что имхо в любых случаях сначала пишуться изменения в redo log. Возможно имелся в виду тот факт что САМА операция отката не вызывает запись в redo log см. Note в конце Advantages of the Fast COMMIT The fast commit mechanism ensures data recovery by writing changes to the redo log buffer instead of the data files. It has the following advantages: • Sequential writes to the log files are faster than writing to different blocks in the data file. • Only the minimal information that is necessary to record changes is written to the log files, whereas writing to the data files would require whole blocks of data to be written. • If multiple transactions request to commit at the same time, the instance piggybacks redo log records into a single write. • Unless the redo log buffer is particularly full, only one synchronous write is required per transaction. If piggybacking occurs, there can be less than one synchronous write per transaction. • Because the redo log buffer may be flushed before the COMMIT, the size of the transaction does not affect the amount of time needed for an actual COMMIT operation. Note: Rolling back a transaction does not trigger LGWR to write to disk. The Oracle server always rolls back uncommitted changes when recovering from failures. If there is a failure after a rollback, before the rollback entries are recorded on disk, the absence of a commit record is sufficient to ensure that the changes made by the transaction are rolled back. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2004, 00:03 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Решила обрисовать пару конкретных ситуаций по этому поводу. Поправьте или дополните плиз если где то есть ошибки или упущенные моменты. Ситуация 1: Сбой во время изменений данных - идет транзакция - Oracle сбросил некоторые грязные незакомиченные данные из оперативной памяти в дата файлы - изменение данных разумется в свою очередь вызвало изменение в сегментах отката, в них записались старые версии данных - часть изменных данных в сегментах отката сидит в оперативной памяти и еще не было сброшено на диск Происходит сбой. Что мы имеем: - в датафайлах сидят незакомиченные данные которые нужно откатить - сегменты отката не содержат всю необходимую информацию для отмены незакомиченных изменений, потому что часть их сидела в оперативной памяти и была потеряна при сбое - в redo журнале записаны все изменения данных и сегметов отката до момента последнего сброса log buffer на диск Что поисходит при старте - Оракл накатывает ВСЕ изменения из redo - как закомиченные так и незакомиченные - как на блоки данных так и на блоки сегментов отката. Теперь сегменты отката восстановлены до того состояния, когда вся информация для отмены незакомиченных изменений имеется. - Используя сегменты отката Oracle откатывает незакомиченные изменения. Ситуация 2: Сбой во время отката - идет транзакция - Oracle сбросил некоторые грязные незакомиченные данные из оперативной памяти в дата файлы - изменение данных разумется в свою очередь вызвало изменение в сегментах отката, в них записались старые версии данных - часть изменных данных в сегментах отката сидит в оперативной памяти и еще не было сброшено на диск - пользователь решил сделать rollback - в redolog разумеется не была записана commit record - пошел откат Происходит сбой во время операции отката. Что мы имеем: - в датафайлах сидят незакомиченные данные которые нужно откатить - сегменты отката НЕ содержат всю необходимую информацию для отмены незакомиченных изменений, потому что часть их сидела в оперативной памяти и была потеряна при сбое - в redo журнале записаны все изменения данных и сегметов отката до момента последнего сброса log buffer на диск Что поисходит при старте: - Oracle накатывает ВСЕ изменения из redo - как закомиченные так и незакомиченные - как на блоки данных так и на блоки сегментов отката. Теперь сегменты отката восстановлены до того состояния, когда вся информация для отмены незакомиченных изменений имеется. - откат продолжается дальше ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2004, 00:53 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
ViolinaРешила обрисовать пару конкретных ситуаций по этому поводу. Поправьте или дополните плиз если где то есть ошибки или упущенные моменты. Ситуация 1: Сбой во время изменений данных - идет транзакция - Oracle сбросил некоторые грязные незакомиченные данные из оперативной памяти в дата файлы - изменение данных разумется в свою очередь вызвало изменение в сегментах отката, в них записались старые версии данных - часть изменных данных в сегментах отката сидит в оперативной памяти и еще не было сброшено на диск Происходит сбой. Что мы имеем: - в датафайлах сидят незакомиченные данные которые нужно откатить - сегменты отката не содержат всю необходимую информацию для отмены незакомиченных изменений, потому что часть их сидела в оперативной памяти и была потеряна при сбое - в redo журнале записаны все изменения данных и сегметов отката до момента последнего сброса log buffer на диск Что поисходит при старте - Оракл накатывает ВСЕ изменения из redo - как закомиченные так и незакомиченные - как на блоки данных так и на блоки сегментов отката. Теперь сегменты отката восстановлены до того состояния, когда вся информация для отмены незакомиченных изменений имеется. - Используя сегменты отката Oracle откатывает незакомиченные изменения. Ситуация 2: Сбой во время отката - идет транзакция - Oracle сбросил некоторые грязные незакомиченные данные из оперативной памяти в дата файлы - изменение данных разумется в свою очередь вызвало изменение в сегментах отката, в них записались старые версии данных - часть изменных данных в сегментах отката сидит в оперативной памяти и еще не было сброшено на диск - пользователь решил сделать rollback - в redolog разумеется не была записана commit record - пошел откат Происходит сбой во время операции отката. Что мы имеем: - в датафайлах сидят незакомиченные данные которые нужно откатить - сегменты отката НЕ содержат всю необходимую информацию для отмены незакомиченных изменений, потому что часть их сидела в оперативной памяти и была потеряна при сбое - в redo журнале записаны все изменения данных и сегметов отката до момента последнего сброса log buffer на диск Что поисходит при старте: - Oracle накатывает ВСЕ изменения из redo - как закомиченные так и незакомиченные - как на блоки данных так и на блоки сегментов отката. Теперь сегменты отката восстановлены до того состояния, когда вся информация для отмены незакомиченных изменений имеется. - откат продолжается дальше Violin и Марленков и Виталий ("Новичок") и все остальные! Мы просто не понимаем юмора! Мы русские все воспринимаем смертельно-серьезно. Я спросила сегодня Тома об этом и он ответил буквально следующее: "Я говорил гипотетически и, наверное, что-то потерялось в переводе. Я говорил ( с подтекстом в скобках) , что записи в online redo log (теоретически) могли бы быть пропущены если бы во время commit Оракл вместо этого бы записывал измененные блоки на диск (но, поскольку это никогда не происходит, это чисто гипотетическое утверждение). ЕСЛИ БЫ Оракл записывал изменения на диск во время commit, redo logs были бы излишни. НО Оракл использует redo logs -- улучшая обращение IO чтобы улучшить performance. Читайте в конце дискуссии (кстати, оттуда вы узнаете, что меня зовут Вера) http://asktom.oracle.com/pls/ask/f?p=4950:8:383290::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:8145042756282, Однако, в одном я была права, переведя высказывание Тома как "если бы", возможно" и пр. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2004, 07:01 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
B.Uvazhaemyi Markelenkov (esli vi eshe ne v otpuske) , Zdes' ya ne soglasna. Vi govorite: Кроме того, если во время длительной транзакции, которая завершалась бы операцией ROLLBACK, грязные блоки записывались бы на диск (что в действительности и может происходить и обычно происходит), а соответствующая redo-информация не записывалась бы при этом в журналы (а в журнал попадает в том числе информация об изменениях в сегментах отката), то в случае сбоя экземпляра в файлы данных попали бы незафиксированные изменения , которые Oracle при очередном crash recovery не смог бы откатить (нет соотв. redo). Tom skazal, cho bloki mogut zapisivat'sa na disk minua redo log tol'ko esli COMMIT. Сегодня я пока еще дома, но развернуто отвечать не буду. Готов и сейчас на 100% подписаться под этим своим высказыванием. Можно только более подробно расшифровать фразу "(нет соотв. redo)": (нет соответствующей redo-информации в журнальных файлах, которая позволила бы воостановить сегменты отката на момент сбоя для того, чтобы откатить все незакоммитченные изменения в блоках данных, которые перед сбоем были физически записаны на диски процессом DBWR). Кроме того, в случае, если бы действительно "...the writes to the online redo log could be skipped if, during a commit, Oracle physically wrote the modified blocks out to disk instead.", то в базе данных могли бы оказаться несогласованные (no consistent) данные, т.е. только часть изменений в блоках могла бы попасть на диск, а часть (из тех грязных блоков, которые DBWR еще не успел записать на диски) - пропасть. Причем все вышесказанное может случиться и в случае завершения транзакции операцией COMMIT. Еще один, немного смешной "довод": как процесс LGWR может узнать, записал(и) ли процесс(ы) DBWn все грязные блоки, связанные с транзакцией, на диск, чтобы не записывать redo-информацию в журналы? Потребуется или изобретать для этого или способ общения LGWR с процессами DBWn, или LGWR должен будет сам (один) копаться в списках LRU (обычно в нескольких). В обоих случаях - это огромный объем кода и неимоверные тормоза в производительности. Кроме всего, несколько удивляет фраза Тома "during a commit". Как процитировала выше Violina, Oracle использует алгоритм так называемого fast commit, который, в принципе, используя алгоритм delayed commit clearnout, может во время выполнения commit совсем не производить окончательных модификаций в измененных ранее текущей транзакцией блоках данных. В этом случае серверный процесс помещает в redo-блок в log buffer только маркер COMMIT и выдает сигнал клиентскому приложению, что транзакция завершена. Другими словами, обычно выполнение самой операции COMMIT занимает ничтожно малое время, поэтому, на мой взгляд , фраза "during a commit" выглядит несколько странно. Ну вот, ответ получился все-таки достатчно развернутый :-) P.S. Не хочется верить, что такой специалист, гуру, как Том Кайт, не понимает таких основ. Наверняка он хотел той своей фразой в книге сказать что-то другое. Вот и интересно выяснить - что же? Ха-ха-ха!!! Писал ответ, нажал кнопку предварительного просмотра и увидел Ваш последний пост, Вера. Действительно, смешно! Вся наша дискуссия показала необходимость особой точности формулировок. Если бы в тексте присутствовала фраза "theoretically", "hypothetically", то все изначально было бы понятно., т.к. даже в английском варианте фраза трактуется совсем не так, как имел ввиду Том. Неудивительно, что перевод окончательно исказил весь смысл. Пусть Том пометит себе, что это место в книге следует уточнить. Ну а на счет утилиты exp тоже было бы интересно разобраться. Спасибо за ссылку, может быть успею сегодня почитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2004, 08:00 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
2 В. Все, прочитал внизу ветки http://asktom.oracle.com/pls/ask/f?p=4950:8:383290::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:8145042756282 В этом разрезе вся моя критика по поводу "during commit" тоже лишена смысла. Если бы в книге была бы фраза именно в виде ".... the writes to the online redo log (in theory) could be skipped if, during a commit, Oracle physically wrote the modified blocks out to disk instead. (but since it doesn't work that way, that is just a hypothetical)", то все было бы сразу ясно. Спасибо за информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2004, 08:07 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Markelenkov2 В. Все, прочитал внизу ветки http://asktom.oracle.com/pls/ask/f?p=4950:8:383290::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:8145042756282 В этом разрезе вся моя критика по поводу "during commit" тоже лишена смысла. Если бы в книге была бы фраза именно в виде ".... the writes to the online redo log (in theory) could be skipped if, during a commit, Oracle physically wrote the modified blocks out to disk instead. (but since it doesn't work that way, that is just a hypothetical)", то все было бы сразу ясно. Спасибо за информацию. Марленков!!! Это все действительно смешно! Мы сейчас сидим с друзьями и время от времени я подхожу к комрьютеру и проверяю "мессиджи" и умираю от смеха! Показала фразу Тома другу (он крутой компьютерщик, но американец) и он сразу же сказал, что обсуждаемая нами фраза означает "если ба да кабы", если бы Оракла делал то-то и то-то, то то-то и то-то было бы не нужно, и опять затряслась от смеха. Но это действительно тонкости языка. Уж на что я его хорошо знаю, но даже я не поняла до конца смысл, хотя догадалась насчет "если бы". Но все рано не поняла, дура. Надо бы и про экспорт спросить. Однако правда здорово, что Том - несмотря на вечер и пятницу (я ему вечером написала) - сразу ответил? Счастливого отдыха! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2004, 08:27 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Привет Мои два копейка: 1. сорри, всю неделю был занят по самое нехочу. Пропустил такую интересную дискусию. Даже прочитать времени не было. *_млинк_* 2. 2 "Fucker" тынц Пару моментов. a) dbv не может проверять файлы >2Gb. b) exp отдельно взятой схемы SYS в /dev/null чуток может помочь, но не затрагивает индексов по базовым таблицам словаря данных. c) RMAN хреново тестирует (совсем не) только что импортнутые TTS. Надо их переводить в RW, потом опять в RO. Вся инфа на основе 8.1.7.4 и 9.2.0.5. До 10g-ки шаловливые ручки пока не дотянулись в желаемой степени. 3. 2 "killed" "кстати rman тоже не все ловит. Повезло тут недавно убедится :))". Ясень пень, что только FTS и FFIS по всем объектам могут убедить тебя в исправности всех заЮзаных блоков БД. Остаются еще rollback\'и... Из известных методов, к сожалению, тока dump\'ы блоков rollback :-(. Ну и BOOTSTRAP$ - видимо, тока dump всех его блоков. 4. 2 "Markelenkov" тынц "Если необходимо обеспечить максимально быстрое восстановление, придется использовать файлы журнала меньшего размера... " Есть одна такая фишка в Oracle (уверен про 8i- :-() ). Может быть 9i/10g уже переделали... Короче. После наката очередного redo (online или archived) выполняется интервальная контрольная точка . A la 7.3./"ALTER SYSTEM CHECKPOINT". Т.е. ВСЕ модифицированные буферы сбрасываются на диск. При этом БД закрыта, следовательно накат не может быть продолжен, пока эта контрольная точка не завершится. Собственно, из доков не следует (DBGroup Consulting может меня поправить), но этот факт сильно мешал накату на standby у одного из крупных операторов сотовой связи. Standby просто отставал от production. Помогло уменьшение кеша буферов на standby. (Аппаратура: на production - Sun 15K, процесоров 32+, Oracle8i 64-bit. Standby поскромнее. Вроде как Sun 6500. Не однопроцессорный, ясень пень. Остальные подробности не помню). Так что я не совсем понял, что имел ввиду Том Кайт (разве что высказывание относилось к Oracle7). При супер большом кеше буферов уменьшение размера redo log\'ов может дать обратный эффект... 5. 2 "Violina" - как всегда, точна (не наезд, все по-серьезному). Остальное, вроде как, соответствует моему пониманию (если ничего не упустил). PS. Ребятки, вы хоть понимаете, что уже накропали неплохую статью для Oramag? Недавно мне довелось побеседовать с Анатолием Бачиным (главред Oramag/ru). Он серьезно жалуется на отсутствие хороших материалов для публикаций. Слабо вам самоорганизоваться и заделать этот пробой? Про recovery должно получиться неплохо... Всего -- Andrei Kriushin (Oracle8/8i/9i OCP DBA), RDTEX J.S.C. Disclaimer: Opinions are of my own and not ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2004, 19:19 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
Привет Сории, забыл пункт 6. 2 "B." - Зарегистрировались бы ;-) Неужели такой ник уже занят? - В соавторы идите... Всего -- Andrei Kriushin (Oracle8/8i/9i OCP DBA), RDTEX J.S.C. Disclaimer: Opinions are of my own and not necessar(-il)y... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2004, 19:21 |
|
Почему так медленно SELECT COUNT(*)
|
|||
---|---|---|---|
#18+
АазПривет Мои два копейка: 3. 2 "killed" "кстати rman тоже не все ловит. Повезло тут недавно убедится :))". Ясень пень, что только FTS и FFIS по всем объектам могут убедить тебя в исправности всех заЮзаных блоков БД. -- Andrei Kriushin (Oracle8/8i/9i OCP DBA), RDTEX J.S.C. Disclaimer: Opinions are of my own and not Это как раз были неиспользованные блоки после удаления сегмента, которые rman по умолчанию не проверяет ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2004, 20:21 |
|
|
start [/forum/topic.php?fid=52&msg=32629148&tid=1905960]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
others: | 302ms |
total: | 446ms |
0 / 0 |