یکی از چالشهای قابلیت in-memory در نسخه 12cR1 به هزینه بر بودن load اولیه اطلاعات(در in-memory) بعد از restart شدن دیتابیس برمی گردد چرا که اطلاعات در دیسک به صورت row format ذخیره شده و در زمان بارگذاری باید به فرمت ستونی و (عمدتا) به شکل فشرده در حافظه(in-memory) قرار بگیرند که این کار می تواند مصرف بالای منابع(مخصوصا cpu) را به همراه داشته باشد.
اوراکل در نسخه 12cR2، برای حل این مسئله، قابلیت جدیدی به نام In-Memory FastStart را ارائه کرد که بر اساس آن، اطلاعات موجود در in-memory با همان فرمتی که در حافظه قرار دارند، در دیسک و در یک tablespace مجزا ذخیره می شوند.
به عبارت دیگر، اطلاعات علاوه بر آنکه به شکل سنتی row format در دیسک ذخیره هستند، با فرمتی جدید و به صورت فشرده در tablespaceای مجزا که اصطلاحا In-Memory FastStart area نامیده می شود قرار می گیرند و در زمان بارگذاری مجدد اشیا به in-memory، اطلاعات از این قسمت(In-Memory FastStart are) خوانده می شود تا در سرعت بارگذاری بهبودی ایجاد شود.
پیکربندی In-Memory FastStart در دو مرحله قابل انجام است.
مرحله اول: در گام نخست، Tablespaceای را ایجاد می کنیم. توصیه می شود که سایز این tablespace دو برابر مقدار پارامتر inmemory_size باشد.
SQL> select value/1024/1024/1024 inmemory_size_GB from v$parameter where name=‘inmemory_size’;
INMEMORY_SIZE_GB
—————-
6
SQL> create tablespace inmem_tbs datafile size 12G;
Tablespace created.
مرحله دوم: در این مرحله، قابلیت In-Memory FastStart را فعال می کنیم در حین فعال کردن این قابلیت، باید نام tablespace را مشخص کرد:
SQL> EXEC DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE(‘inmem_tbs’);
PL/SQL procedure successfully completed.
SQL> select status from v$inmemory_faststart_area;
STATUS
——————————
ENABLE
با فعال کردن این قابلیت، SecureFiles LOBای به نام $SYSDBIMFS_LOGSEG ایجاد خواهد شد:
SQL> select owner,segment_name,bytes/1024/1024 MB from dba_segments p where p.tablespace_name=’INMEM_TBS’;
برای ملزم کردن دیتابیس به قرار دادن فوری اطلاعات in-memory در In-Memory FastStart area می توانیم از دستور زیر استفاده کنیم:
SQL> exec dbms_inmemory_admin.faststart_checkpoint;
نکات پایانی:
نکته 1: اگر در زمان فعال کردن قابلیت in-memory برای objectای، از عبارتهای NO MEMCOMPRESS و یا MEMCOMPRESS FOR DML استفاده شده باشد، اطلاعات این دسته از objectها به In-Memory FastStart area منتقل نمی شود.
نکته 2: زمانی که فضای IM FastStart area در حال پر شدن باشد، اوراکل به صورت خودکار اطلاعات قدیمی تر موجود در این ناحیه را پاک می کند.
نکته 3: در صورتی که خصیصه inmemory را برای objectای غیرفعال کنیم، اطلاعات مربوط به ان در IM FastStart area حدف خواهد شد.
پ.ن: برای غیرفعال کردن قابلیت In-Memory FastStart باید دستور زیر را اجرا کرد:
exec DBMS_INMEMORY_ADMIN.FASTSTART_DISABLE();
Comment (1)