تاثیر log strand بر اندازه آرشیولاگ
از اوراکل نسخه 9i به بعد این امکان وجود دارد تا log buffer به چند قسمت مساوی تقسیم شود و هر قسمت آن به قسمتی از redo log مپ شود و به این طریق انتفال اطلاعات صورت گیرد به این ویژگی public redo strand می گویند.
با این کار waitهای کمتری را از جنس log file sync و latch redo allocation در سیستم شاهد خواهیم بود که رابطه مستقیم تعداد strandها با latchهای redo allocation در نسخه 10g مویدیست بر این نکته. تعداد redo strand به طور پیش فرض با استفاده از مقدار cpu_count مشخص می شود همچنین می توان با پارامتر _log_parallelism_max تعداد جاری آن را مشاهده کرد:
select nam.ksppinm, val.KSPPSTVL, nam.ksppdesc from sys.x$ksppi nam, sys.x$ksppsv val where nam.indx=val.indx AND upper(nam.ksppinm) LIKE '%LOG_PARALLE%';
معمولا مقدار پیش فرض آن برابر با دو می باشد و با هر 16 cpu یک عدد به مقدار آن اضافه می شود.
حال زمانی را فرض کنید که چند redo strand به صورت موازی در حال نوشتن اطلاعات بر روی redo log هستند و در همین حال کار یکی از redo strandها زودتر به اتمام می رسد و قصد دارد ادامه اطلاعات را به redo log منتقل کند به دلیل اینکه redo log فضای خالی ای به اندازه یک redo strand ندارد، اوراکل مجبور است تا به redo log دیگری سوییچ کند(حتی اگر بقیه strandها مشغول به کار باشند) تا این redo strand آزاد را به یک آن مپ کند با این کار اندازه آرشیو لاگها کوچکتر خواهند شد چون قسمتی از redo log بدون استفاده باقی مانده است.
در این قسمت نتیجه چند مورد تست انجام شده را با هم خواهیم دید.
در اینجا فرض ما بر آن است که تنها یک کاربر به بانک وصل شده و همه پارامترهای مرتبط به checkpoint همانند fast_start_mttr_target مقدار پیش فرض دارند و همچنین هیچ کاربری دستور switch logfile را صادر نمی کند البته اگر تعداد sessionهای همزمان بیشتر شوند، رفتار بانک کمی متفاوت تر خواهد بود.
create table usef_tbl (a number, b char(400));
begin
for i in 1..600000 loop
insert into usef_tbl values (i,'b');
end loop;
end;
/
_log_parallelism_max |
log_buffer size |
redo log size |
Archive log size |
1 |
15MB |
50MB |
49M |
2 |
15MB |
50MB |
41M |
2 |
20MB |
50MB |
39M |
8 |
15MB |
50MB |
36M |
همانطور که می بینید با افزایش تعداد redo strand، اندازه آرشیولاگ کوچکتر شده است.
- ۹۴/۰۸/۲۴