Whoever Resembles a People is One of Them. He is not one of us who resembles other than us,
nor who resembles the Jews nor the Christians.(jami-at-tirmidhi-vol-5-ahadith-2695)
O you who believe (who wish to reach ALLAH C.C. before death)! Do not take my and
your enemies for friends!
And although they have denied what has come to you
from the Truth, you still love them (treating them as your friends).
If you go forth to struggle hard in My Way, seeking My Pleasure, (then why) you manifest
love to them and share with them your secrets.
And I know what you conceal and what you manifest. And whoever of you does that, then he
indeed has gone astray from the right Way. 60/Al-Mumtahanah-1
They are driving out the Messenger and yourselves from your land because you
believe in ALLAH C.C., your Lord.
Recite (read and explain to others) that which has been revealed to you of the Book
and keep up the Prayer.
Surely the Prayer keeps away from Al-Fahsh (to do what ALLAH C.C. prohibits) and Al-Munkar
(to deny what ALLAH C.C. commands).
Whoever obeys me, obeys ALLAH C.C., and whoever disobeys me, disobeys ALLAH C.C.
Whoever obeys the ruler, obeys me, and whoever disobeys the ruler, disobeys me. " (Sahih)

Index

İndex doğruluk Kontrolü

ANALYZE INDEX orders_region_id_idx VALIDATE STRUCTURE; ===> index_stats
SELECT blocks, pct_used, distinct_keys
lf_rows, del_lf_rows
FROM index_stats;
BLOCKS PCT_USED LF_ROWS DEL_LF_ROWS
—— ——— ——– ————
25 11 14 0
1 row selected.

Burada dikkat etmemiz gereken DEL_LF_ROWS’un LF_ROWS’e oranı % 30 u geçtiği zaman index analiz edilmeli ve yeniden kontrol edilip oluşturulmalıdır.

DROP INDEX hr.deptartments_name_idx;

İndex kullanımının nasıl olduğunu gözlemlemek istiyorsak,

Başlangıçta,

ALTER INDEX summit.orders_id_idx MONITORING USAGE;

Daha sonra V$OBJECT_USAGE’den aşağıdaki kolon bilgilerini alabiliriz.

INDEX_NAME: İndex İsmi
TABLE_NAME: Tablo İsmi
MONITORING: Monitör durumu ON / OFF
USED: YES / NO Monitoring boyunca index’in kullanılıp kullanılmadığı
START_MONITORING: Monitoring başlamış
END_MONITORING: Monitoring bitmiş

Monitoring’i tamamlamak içinde

ALTER INDEX summit.orders_id_idx NOMONITORING USAGE;

İndexler compress edilerek yani skıştırılarak üzerlerinde yeteri kadar yer açılabilir.

create index emp_last_name_idx on employees (last_name, first_name) compress;
alter index emp_last_name_idx rebuild compress;

İndexler hakkında detaylı bilgi için aşağıdaki view/tablo lar incelenir.

DBA_INDEXES
DBA_IND_COLUMNS
DBA_IND_EXPRESSIONS
V$OBJECT_USAGE
select index_name, last_analyzed, num_rows, sample_size from user_indexes where table_name = ‘table_name’ ;

Cost Based Optimizer(CBO) için kritik olan istatistik bilgilerinin toplanması önemli.

Indeksler için malum birkaç yöntem var :

Birincisi arzu edilen bir zamanda aşağıdaki şekilde yapılabilir :

DBMS_STATS.GATHER_INDEX_STATS (‘SEMANIZIN_ADI’,’INDEKSINIZIN_ADI’);

Bir diğer yöntem daha indeks oluşturma aşamasında bunu isteyebiliriz :

create index INDEKS_ADI ………. compute statistics;

Zaman zaman indekslerinde “rebuild” ihtiyacı olabilir.Bunu sağlarken aynı zamanda indeks istatistiği de toplayabiliriz.

alter index INDEKS_ADI rebuild compute statistics;

Ama 10g ile birlikte daha indeks oluşturulma aşamasında istatistik toplanmakta.Örnekle görelim :

drop table ttest;
create table ttest as select object_id, object_name, object_type from all_objects;
create index ttest_id_idx on ttest (object_id);
select index_name, last_analyzed, num_rows, sample_size from user_indexes where table_name = ‘TTEST’ ;
index_name last_analyzed num_rows sample_size
TTEST_ID_IDX 2/12/2007 3:59:01 PM 12332 12332

Tablo üzerinde işlem yapıldıkça istatistikler güncellenmez.Test Edelim;

insert into ttest select object_id, object_name, object_type from all_objects;

select index_name, last_analyzed, num_rows, sample_size from user_indexes where table_name = ‘TTEST’ ;
index_name last_analyzed num_rows sample_size
TTEST_ID_IDX 2/12/2007 3:59:01 PM 12332 12332

“last_analyzed” alanı insert işleminden sonra yani indeks üzerinde işlem olduktan sonra otomatik değişmiyor,yani istatistik anında güncellenmiyor.Bunu : “analyze index ttest_id_idx compute statistics” ile sağlarız.Bu komutu çalıştırıp tekrar sorgumuza bakalım :

analyze index ttest_id_idx compute statistics;
select index_name, last_analyzed, num_rows, sample_size from user_indexes where table_name = ‘TTEST’ ;
index_name last_analyzed num_rows sample_size
TTEST_ID_IDX 2/12/2007 3:59:53 PM 36998 36998

Bunu otomatiğe almak için. ”GATHER_STATS_JOB” çalışır duruma getirilirse Oracle gerektiğinde otomatik olarak istatistikleri topluyor. Aktif olup olmadığını aşağıdaki sorgu ile öğrenebiliriz. (true ise aktiftir.)

SELECT owner, job_name, enabled
FROM dba_scheduler_jobs
WHERE job_name = ‘GATHER_STATS_JOB’Aktif değilse “dbms_scheduler.enable(’GATHER_STATS_JOB’);

Eski index silinip yenisi oluşturulmaktadır.Böylece index yeniden oluşturulduğu için performans artacaktır.
normalde rebuilde edilen indexler tablolarda lock oluştururdu,bu yöntemle lock minimuma indirilmiştir.

ALTER INDEX orders_id_idx DEALLOCATE UNUSED
ALTER INDEX orders_region_id_idx REBUILD TABLESPACE indx02;
ALTER INDEX orders_id_idx REBUILD ONLINE;
ALTER INDEX orders_id_idx COALESCE;

indexteki parçalanma derecesin görmek için

validate index index_adı ; bu komit ile bilgiler index_stats a yazılır.

Aşağıdaki sorgu ile incelenir

select name “index adı”,
del_LF_rows “silinip doldurulmamış satırlar” ,
LF_rows “toplam index satırı” ,
round ((del_LF_rows / (LF_rows + 0.0000000001)) * 100) “parçalanma oranı”
from index_stats;

Parçalanma oranı yüksek ise
alter index index_adı rebuild ; ile yeniden yapılandırılır.

Bir kullanıcıya ait tablonun indexlerini bulmak için

select a.index_name ,
b.index_type ,
a.column_name
from user_ind_columns a , user_indexes b
where a.table_name = ‘hr.employees’
and a.index_name = b.index_name
order by a.index_name ;

Copyright © 2015 Sysdba All Rights Reserved Web Designer