Əsas səhifə > Oracle, Oracle Administration > DEFERRED_SEGMENT_CREATION parameter in Oracle 11g R2

DEFERRED_SEGMENT_CREATION parameter in Oracle 11g R2

11g OCA Administrator kitabını oxuyarkən qarşıma çıxan və mənə maraqlı olan, həmçinin həllini Oracle User Group vasitəsilə tapdığım problemi blog post şəklində yazıram. Bəlkə kiməsə kömək olar nə vaxtsa.

Qrupdakı müzakirə linki: Discussion

Kitabdakı məsələ bundan ibarət idi ki,
Chapter 7 page 245-də Figure 7-2-de aşağıdakı addımları atmağımızı istəyir SYS user ilə:

SQL> create table sh.xxx(c1 date);

Table created.

Kitabın dediyinə əsasən, dba_extents-dən select verdikdə bizə extent və block-lar haqqında məlumat gələcək.
Lakin mənim Oracle 11g R2-imdə heç bir məlumat gəlmədi.

SQL> SELECT tablespace_name,
  2         file_id,
  3         extent_id,
  4         block_id,
  5         blocks,
  6         bytes
  7    FROM dba_extents
  8   WHERE owner = 'SH' AND segment_name = 'XXX';

no rows selected

Bir neçə sınaqdan sonra aşkar olundu ki,
Əgər cədvələ hər hansı məlumat insert etsək o zaman məlumat əldə edə bilirik:

SQL> insert into sh.xxx(c1) values((select sysdate from dual));

1 row created.

SQL> commit;

Commit complete.

SQL> select * from sh.xxx;

C1
---------
21-JAN-14

dba_extents-ə select-imizi təkrarlasaq görərik ki,

SQL> SELECT tablespace_name,
  2         file_id,
  3         extent_id,
  4         block_id,
  5         blocks,
  6         bytes
  7    FROM dba_extents
  8   WHERE owner = 'SH' AND segment_name = 'XXX';

TABLESPACE_NAME                   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
------------------------------ ---------- ---------- ---------- ----------
     BYTES
----------
USERS                                   4          0        600          8
     65536

Bu tip darvanışın əsl səbəbi Oracle 11g R2-də gətirilmiş new feature olan Deferred segment creation və yaxud DEFERRED_SEGMENT_CREATION parametridir.

Default olaraq bu parametrin qiyməti True-dur:

SQL> show parameter DEFERRED_SEGMENT_CREATION;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation            boolean     TRUE

Parametrin qısa məntiqi Javid Hasanov -un izahında:

11.2 ye qeder sen obyekt yaratdıqda derhal həmin obyektə gələcək insertlər üçün bir-neçə segment ayrılırdı. Buda serverin disk resurslarını səmərəsiz istifadə etmək demək idi. 11.2 isə DEFERRED_SEGMENT_CREATION parametri ile bunu idarə etəmək imkanı yaradıblar.

Əlavə: Yəni, 11.2-də obyekt yaradıldıqda məhz deferred_segment_creation = TRUE olduğu üçün avtomatik olaraq segment yaradılmır, adından da göründüyü kimi ertələnir. Və yalnız object-də hər hansı məlumat olduğu zaman segment yaradılır.

Segment Creation-u Force etmək, yəni dərhal yaradılması məqsədilə siz ya deferred_segment_creation parametrini FALSE edirik ya da table creation zamanı segment creation immediate clause əlavə edirik.

Nümunə olaraq:

SQL> create table sh.xxx2(c1 date) segment creation immediate;

Table created.

SQL> SELECT tablespace_name,
  2         file_id,
  3         extent_id,
  4         block_id,
  5         blocks,
  6         bytes
  7    FROM dba_extents
  8   WHERE owner = 'SH' AND segment_name = 'XXX2';

TABLESPACE_NAME                   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
------------------------------ ---------- ---------- ---------- ----------
     BYTES
----------
USERS                                   4          0        608          8
     65536

New Feature-un ızahı bu qədər.
Təşəkkürlər😉

  1. Yanvar 22, 2014 tarixində, saat 05:32

    Müəllif hüquqlarını qoruduğun uçun çox sağol kişi😉

    • Yanvar 22, 2014 tarixində, saat 05:52

      🙂 He bes nece olmali idi ki?
      Duzgunluk olmalidir…
      Sen de sagol ki, komek edirsen😉

  1. No trackbacks yet.

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

%d bloqqer bunu bəyənir: