Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
Доброго времени суток, господа.

В однонаправленной репликации работает 2 сервера.
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit
Supplemental_Log_Data: Minimal


Реплицируется 2 схемы.
Скрипты настройки репликации пишу сам.
+
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES( 
    schema_name        => '"MySchema"', 
    streams_type        => 'capture', 
    streams_name       => '"STREAMS_CAPTURE"', 
    queue_name         => '"STREAMDBA"."STREAMS_CAPTURE_Q"', 
    include_dml           => true, 
    include_ddl           => true, 
    include_tagged_lcr => false, 
    inclusion_rule        => true); 


  DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES( 
   schema_name            => '"MySchema"', 
   streams_name           => '"STREAMS_PROPAGATION"', 
    source_queue_name      => '"STREAMDBA"."STREAMS_CAPTURE_Q"', 
    destination_queue_name => '"STREAMDBA"."STREAMS_APPLY_Q"@REPLICA', 
    include_dml            => true, 
    include_ddl            => true, 
    source_database        => 'MAINBASE', 
    inclusion_rule         => true );

  DBMS_STREAMS_ADM.ADD_SCHEMA_RULES( 
    schema_name        => '"MySchema"', 
    streams_type       => 'apply', 
    streams_name       => '"STREAMS_APPLY"', 
    queue_name         => '"STREAMDBA"."STREAMS_APPLY_Q"', 
    include_dml        => true, 
    include_ddl        => true, 
    include_tagged_lcr => false, 
    inclusion_rule     => true); 
END; 

Для второй схемы тоже самое.

В итоге, после запуска, все работает отменно, какое то время(это 4-7 дней). На рабочей нагрузке...
Но потом, не понятно с чего, репликацию начинает колбасить. На dest стороне дикие wait'ы - "Streams AQ: enqueue blocked due to flow control"
Ну, а на source соотвественно выскакивает - "Paused For Flow Control"

Когда первый раз случилось, просто перенастроил репликацию.
Второй раз пробовал дождаться когда закончится APPLY_SPILL. Но процесс съел мне весь SYSAUX(туда, как я понимаю, валятся данные AQ_SRVNTFN_TABLE) и упал.

PS^ Primary Key для всех таблиц в схемах существуют.

Заранее огромное спасибо.
19 апр 10, 16:58    [8652179]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Barkovsky
Member

Откуда: Санкт-Петербург
Сообщений: 2655
Надо смотреть в AWR или в SQL трассировке, чем занимаемтся Apply Process.
19 апр 10, 17:19    [8652370]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
Barkovsky, если я правильно понял, то вот, какие запросы связаны с Apply до появления wait'a "Streams AQ: enqueue blocked due to flow control":
+
INSERT INTO SYS.STREAMS$_APPLY_PROGRESS (APPLY#, SOURCE_DB_NAME, XIDUSN, XIDSLT, XIDSQN, COMMIT_SCN) VALUES (:1, :2, :3, :4, :5, :6)

UPDATE 
  SYS.STREAMS$_APPLY_MILESTONE 
SET 
  OLDEST_SCN=:1, COMMIT_SCN=:2, SYNCH_SCN=:3, SPARE1=:4, EPOCH=:5, PROCESSED_SCN=:6, 
  APPLY_TIME=:7, APPLIED_MESSAGE_CREATE_TIME=:8, START_SCN=:9, LDEST_TRANSACTION_ID=:10 
WHERE 
  APPLY#=:11 AND SOURCE_DB_NAME=:12


Ну и собственно пользовательские DML-операции... В которых ничего криминального, я не увидел.(может конечно плохо смотрел)

И вот которые после появления:
+
insert into 
  sys.streams$_apply_spill_msgs_part(sequence, flags, flags2, message, destqueue, ubaafn, ubaobj, ubadba, ubaslt, ubarci, ubafsc, scn, scnseq, capinst, txnkey) 
values 
  (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15)

update 
  sys.streams$_apply_spill_txn 
set 
  first_scn=:1, last_scn=:2, last_scn_seq=:3, last_cap_instno=:4, commit_scn=:5, spillcount=:6, err_num=:7, err_idx=:8, sender=:9, flags=:10, priv_state=:11, distrib_cscn=:12, src_commit_time=:13, spill_flags=:14 
where 
  applyname=:15 and xidusn=:16 and xidslt=:17 and xidsqn=:18
19 апр 10, 18:58    [8653065]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Barkovsky
Member

Откуда: Санкт-Петербург
Сообщений: 2655
Лучше сделать трассировку Apply Server'a, и отсортировать по exeela, fchela

C:\Documents and Settings\yanb>tkprof
Usage: tkprof tracefile outputfile [explain= ] [table= ]
[print= ] [insert= ] [sys= ] [sort= ]
table=schema.tablename Use 'schema.tablename' with 'explain=' option.
explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.
print=integer List only the first 'integer' SQL statements.
aggregate=yes|no
insert=filename List SQL statements and data inside INSERT statements.
sys=no TKPROF does not list SQL statements run as user SYS.
record=filename Record non-recursive statements found in the trace file.
waits=yes|no Record summary for any wait events found in the trace file.
sort=option Set of zero or more of the following sort options:
prscnt number of times parse was called
prscpu cpu time parsing
prsela elapsed time parsing
prsdsk number of disk reads during parse
prsqry number of buffers for consistent read during parse
prscu number of buffers for current read during parse
prsmis number of misses in library cache during parse
execnt number of execute was called
execpu cpu time spent executing
exeela elapsed time executing
exedsk number of disk reads during execute
exeqry number of buffers for consistent read during execute
execu number of buffers for current read during execute
exerow number of rows processed during execute
exemis number of library cache misses during execute
fchcnt number of times fetch was called
fchcpu cpu time spent fetching
fchela elapsed time fetching
fchdsk number of disk reads during fetch
fchqry number of buffers for consistent read during fetch
fchcu number of buffers for current read during fetch
fchrow number of rows fetched
userid userid of user that parsed the cursor
19 апр 10, 19:01    [8653077]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
Barkovsky, нашел я ошибка в чем.
ORA-04030: out of process memory when trying to allocate 72 bytes (knalf: txn_subh, knallcrpga)
Понятно, что нужно добавить PGA.

Но несколько не понятно, почему требуемый размер так резко растет.... Ведь рабочая нагрузка, в общем и целом, постоянна...
19 апр 10, 20:15    [8653263]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
вопрос, памяти-то я добавил.
Но spilling снова забил sysaux подзавязку... Можно как то не пересоздавая репликацию, привести все в норму?
19 апр 10, 20:26    [8653282]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Wireless
Member

Откуда: 660030 -> 80303
Сообщений: 554
Под Streams рекомендуется отдельное табличное пространство создавать...
20 апр 10, 00:12    [8653859]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Wireless
Member

Откуда: 660030 -> 80303
Сообщений: 554
http://download.oracle.com/docs/cd/B19306_01/server.102/b14228/best_gen.htm#CHDICDAF
20 апр 10, 00:13    [8653861]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Barkovsky
Member

Откуда: Санкт-Петербург
Сообщений: 2655
n0rd1c.c0ld
вопрос, памяти-то я добавил.
Но spilling снова забил sysaux подзавязку... Можно как то не пересоздавая репликацию, привести все в норму?


Можно. Для этого надо понять, откуда берется spilling. А он, вероятно, берется из-за тормозов Apply. См. начало топика.
20 апр 10, 00:30    [8653903]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
Моя дилентантская модель мира разваливается на глазах, в частности относительно oracle streams....

Barkovsky, на этот момент времени, в destination нет ничего в alerlog. Но, есть очень интереcная заметка на source, в частности:
LogMiner: Begin mining logfile : .../redo2.log
Но "End mining logfile" нет в принципе...
И вопрос, с какого, он копается в redolog, если он должен по archivelog ползать?

Wireless, streams и работает через свой выделенный tablespace. В sysaux валится, из схемы SYS - AQ_SRVNTFN_TABLE
20 апр 10, 12:09    [8655588]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Barkovsky
Member

Откуда: Санкт-Петербург
Сообщений: 2655
Боже ж ты мой. Висит на begin mining потому, что он уже Paused For Flow Control. А Paused For Flow Control, потому что очередь уже забита под завязкку. А очередь забита под завязку, потому что Apply не успевает апплаить изменения. См. начало топика)
20 апр 10, 12:30    [8655810]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
SPILLING вроде бы победил, расширив совсем не много SYSAUX. Сейчас как я понимаю накатывает изменения...

Попробовал оттрасировать сессию(по данному мануалу _https://www.sql.ru/faq/faq_topic.aspx?fid=389), в которой работает stream_apply и кричит "Streams AQ: enqueue blocked due to flow control".

содержимое trc файла:
+

<SID>_ora_3879.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
System name: Linux
Node name: destination.intranet.ru
Release: 2.6.18-164.el5
Version: #1 SMP Thu Sep 3 04:15:13 EDT 2009
Machine: x86_64
Instance name: <SID>
Redo thread mounted by this instance: 1
Oracle process number: 19
Unix process pid: 3879, image: oracle<SID>@destination.intranet.ru

*** SERVICE NAME:(<SID>) 2010-04-20 16:40:39.402
*** SESSION ID:(300.61918) 2010-04-20 16:40:39.402
*** Destination Propagation Status ***
Source Q Name :"STREAMDBA"."STREAMS_CAPTURE_Q"
Destination :SOURCE
Hwm : 60982317
Dest Q Name :"STREAMDBA"."STREAMS_APPLY_Q" Hwm : 60982317 Ack : 60982317
LsM : 60977537
LsP : 60982317
--------------------------------------------------


Ну и то что получается после tkprof:
+
TKPROF: Release 10.2.0.1.0 - Production on Tue Apr 20 16:52:19 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Trace file: <SID>_ora_3879.trc
Sort options: default

********************************************************************************
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
********************************************************************************
Trace file: <SID>_ora_3879.trc
Trace file compatibility: 10.01.00
Sort options: default

1 session in tracefile.
0 user SQL statements in trace file.
0 internal SQL statements in trace file.
0 SQL statements in trace file.
0 unique SQL statements in trace file.
24 lines in trace file.
0 elapsed seconds in trace file.

Как то весьма не информативно... На мой вкус конечно...
20 апр 10, 17:05    [8658448]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
пардон, понял, почему сейчас висит.
Надо дождаться пока накатит изменения....
20 апр 10, 17:11    [8658489]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Wireless
Member

Откуда: 660030 -> 80303
Сообщений: 554
n0rd1c.c0ld
Wireless, streams и работает через свой выделенный tablespace. В sysaux валится, из схемы SYS - AQ_SRVNTFN_TABLE


Что это за таблица? Если это корни LogMiner'a, то воспользоваться
   DBMS_LOGMNR_D.SET_TABLESPACE 
23 апр 10, 21:53    [8682353]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
Доброго времени суток, господа.

Wireless, это все сделано.

Было установлено, что spilling происходит в случае, когда я у Capture увеличиваю _SGA_SIZE с значения по-умолчанию на некоторое другое(> 10 Мб). Если же этого не делать, то падает LogMiner с ошибкой "ORA-01341: LogMiner out-of-memory error".
Из этого несколько, пожалуй, тупых вопросов.
1. Нужно ли увеличивать пропорционально тот же параметр(_SGA_SIZE) у Apply?
2. Если не нужно, то как тогда быть с параметром у Capture?
3. Несколько не понятна логика использования LogMiner'ом этой памяти.
автор
For the capture process, the _SGA_SIZE parameter controls the size of the LCR cache.

Эта память чиститься несколько не удачно? Потому что при значении по-умолчанию(10 Мб) LogMiner падает с периодичностью, примерно, каждые 3 суток, причем независимо от времени и рабочих нагрузок(будь то ночь, выходной, пиковые нагрузки,...) при этом после падения, достаточно всего лишь запустить Capture и все дальше работает нормально. Так же помогает, банальный, перезапуск Capture каждые, скажем, 2 суток.


Заранее спасибо, за помощь.
23 июн 10, 12:55    [8986594]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Wireless
Member

Откуда: 660030 -> 80303
Сообщений: 554
автор
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

В 10.2.0.4 ошибка тоже присутствует?

Metalink:
ORA-1341 LogMiner out-of-memory ID 336705.1

Applies to:
Oracle Server - Enterprise Edition - Version: 9.2.0.6 to 11.1.0.7
This problem can occur on any platform.
Symptoms
Capture process aborts with error :

ORA-01341: LogMiner out-of-memory


Cause

Capture / log miner is running out of space .

Capture needs to be configured to have more space.

This is not the same as space required for the streams buffer pool - which is separate.

The default amount of space for capture / log miner activity is 10 M.
Solution

exec dbms_capture_adm.set_parameter('STRMADMIN_CAPTURE','_SGA_SIZE','50');

exec dbms_capture_adm.start_capture('STRMADMIN_CAPTURE');

The above changes space for named capture process : 'STRMADMIN_CAPTURE' from 10M -> 50M
Note: If you change the value of the hidden capture parameter _SGA_SIZE,
then you should also increase the streams_pool_size (10.1 and above) correspondingly.
For 9.2, increase the shared_pool parameter correspondingly.
23 июн 10, 20:18    [8990268]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Wireless
Member

Откуда: 660030 -> 80303
Сообщений: 554
1. Не нужно
2. Если есть spills, значит параметр _SGA_SIZE нужно увеличивать. Почитайте эту ноту сверху или Oracle Streams Performance Tuning Best Practices
3. Это отдельная область внутри streams_pool_size . Насколько увеличите _SGA_SIZE, на столько же увеливайте streams_pool_size.

Бороться с падением LogMiner процесса я бы все таки начал с апгрейда БД до 10.2.0.4. Никаких патчей специфичных на металинке по этому поводу нет.
23 июн 10, 20:26    [8990299]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
Wireless, спасибо огромное.

За информацию с металинка отдельное спасибо)

Попробую накатить до 10.2.0.4 и посмотреть)

Только небольшая поправочка
автор
2. Если есть spills, значит параметр _SGA_SIZE нужно увеличивать. Почитайте эту ноту сверху или Oracle Streams Performance Tuning Best Practices

Spills происходит на Apply стороне, причем, в следствии увеличения _SGA_SIZE, на Capture стороне)
24 июн 10, 13:10    [8994145]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Barkovsky
Member

Откуда: Санкт-Петербург
Сообщений: 2655
Естественно, Apply не успевает накатывать изменения, которые, свободно вздохнувший, Capture ему радостно струячит.
24 июн 10, 13:22    [8994275]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
Barkovsky, ну так, как правильнее поступить?
Потихоньку увеличивать _SGA_SIZE на Capture, чтобы избежать, падения LogMiner?
Я просто по доброте душевной, сразу бахаю 100Мб... ) Благо памяти хватает...

Просто есть сомнения, насчет того, что даже после патча до 10.2.0.4 не будет падений LogMiner'a, судя по металинку конечно)
24 июн 10, 14:32    [8995031]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
n0rd1c.c0ld
Member

Откуда: ru
Сообщений: 367
Возможно нужно оптимизировать instance на которой работает Apply, но дело в том, что раньше этот instance был основным, работал в полную, поэтому в общем-то параметры довольно сбалансированы... Хотя возможно под streams нужно более тонко докручивать...
24 июн 10, 14:36    [8995073]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Streams. Capture - Paused For Flow Control  [new]
Barkovsky
Member

Откуда: Санкт-Петербург
Сообщений: 2655
Вообще у Apply тоже есть такой параметр _SGA_SIZE (не нашел, правда, описания для него).

Я подозреваю, у вас тормозит Apply - соответсвенно его и надо трассировать, тьюинить, и смотреть что ему мешает быстро накатывать транзакции.
24 июн 10, 15:41    [8995737]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить