Oracle veritabanı indeksinin kullanımını izlemek için pratik komut dosyası

Genel Bakış

İş sistemini sürdürdüğümüzde birçok indeks oluşturabiliriz Peki bu indeksler nasıl kullanılıyor, bazı indeksler hiç kullanılmıyor mu Oracle indekslerin kullanımını nasıl izliyor ve temizlenebilir mi?

İzleme dizini

Genellikle iki yol vardır:

1. Dizinin kullanımını doğrudan izleyin

(1) İzlenecek dizini ayarlayın: ALTER INDEX IDX_T_XX İZLEME KULLANIMI;

(2) Dizinin kullanılıp kullanılmadığını kontrol edin: SELECT * FROM V $ OBJECT_USAGE;

(3) Yakın izleme: ALTER INDEX IDX_T_XX NOMONITORING KULLANIMI;

2. Şema düzeyinde dizin izleme

Sistemdeki tüm indeksleri izlemek istersek aşağıdaki script üzerinden veritabanının tüm indekslerini izleyebiliriz. Bazı sistem tablosu dizinlerini ve LOB dizinlerini hariç tutmak istediğimizi unutmayın. Bunun iki nedeni var:

1: LOB dizinleri değiştirilemez, aksi takdirde ORA-22864 hatası bildirir (ORA-22864: ALTER veya DROP LOB dizinleri değiştirilemez).

2: ORA-00701: sıcak başlatma veritabanı için gerekli nesne değiştirilemez

Bugün esas olarak şema düzeyinde indeks izlemeden bahsediyorum, işte üç komut dosyası.

Dizin izleme komut dosyasını açın

Dizin izlemeyi etkinleştirmek için betiği doğrudan çalıştırın.Tabii ki, izleme dizini süresi çok önemlidir.Çok kısaysa, sorgulanan verilerde sorunlara neden olabilir.Genel olarak, OLAP sisteminin izleme süresini uygun şekilde uzatması gerekirken bir hafta sonra izlenmesi önerilir.

SELECT'ALTER INDEX '|| sahip ||'. '|| dizin_adı ||' İZLEME KULLANIMI; 'enable_monitor, 'ALTER INDEX' || sahip || '.' || dizin_adı || 'NOMONITORING KULLANIM;' disable_monitor Dba_indexes'DEN NEREDE INDEX_TYPE! = 'LOB' ve sahibi IN (Dba_users'DAN kullanıcı adını SEÇİN account_status = 'AÇIK') VE sahibi DEĞİL ('SYS', 'SYSTEM', 'PERFSTAT', 'MGMT_VIEW', 'MONITOR', 'SYSMAN', 'DBSNMP') VE sahibi '% SYS%' gibi değil;

Bir ay boyunca izledikten sonra, muhtemelen bu dizinlerin işe yaramaz olduğunu anlayabilirsiniz.

Dizin kullanımını izlemek için komut dosyası

V $ object_usage tablosu indeks izleme ve kullanım durumunu kaydedebilmesine rağmen, indeks kullanımının sayısını ve sıklığını sayamaz.Sadece indeks izleme açıldığında indeksin kullanılıp kullanılmadığını kaydeder.Bu nokta dikkat gerektirir.

Dikkat edilmesi gereken diğer iki nokta:

10g, istatistik toplarken dizinin izlenmesine neden olur.Bu bir SQL ifadesi değildir ve bu 11g'de olmayacaktır.

Yabancı anahtar indeksi ana tablonun DML çalışması nedeniyle izlenmeyecektir, indeks işe yaramadığı için silmeyiniz.

Dizinin veritabanı kullanımını öğrenmek için V $ OBJECT_USAGE sorgusu yapın. Bir süre izleme yaptıktan sonra, hangi dizinlerin işe yaramaz olduğunu belirleyebilirsiniz.

Ek olarak, yalnızca geçerli kullanıcı altında dizinin izleme durumunu sorgulamak için V $ OBJECT_USAGE kullanmaktan kaçınmak için, veritabanındaki tüm izlenen dizinlerin kullanımını sorgulamak için aşağıdaki ifadeyi kullanabilirsiniz:

BİR AD SAHİBİ SEÇİN, IO.NAME INDEX_NAME, T.NAME TABLE_NAME, DECODE (BİTAND (I.FLAGS, 65536), 0, 'HAYIR', 'EVET') İZLEME, DECODE (BİTAND (DÜŞÜK BAYRAKLAR, 1), 0, 'HAYIR', 'EVET') KULLANILDI, OU.START_MONITORING START_MONITORING, OU.END_MONITORING END_MONITORING SYS.USER $ U'DAN, SYS.OBJ $ IO, SYS.OBJ $ T, SYS.IND $ I, SYS.OBJECT_USAGE OU NEREDE I.OBJ # = OU.OBJ # VE IO.OBJ # = OU.OBJ # VE T.OBJ # = I.BO # VE KULLANICI # = IO.OWNER #;

Tarihsel yürütme planı analizi dizini kullanım komut dosyası

Aslında, veritabanındaki tüm dizinlerin tarama sürelerini DBA_HIST_SQL_PLAN görünümünden de alabilir ve ardından dizinlerin tarama sürelerine göre saklanması gerekip gerekmediğini geliştiricilerle iletişim kurabilirsiniz.

TMP1 AS İLE (I.OWNER INDEX_OWNER'ı SEÇİN, I.TABLE_OWNER, TABLO İSMİ, INDEX_NAME, INDEX_TYPE, (NB.CREATED DBA_OBJECTS NB'DEN NB.OWNER = I.OWNER AND NB.OBJECT_NAME = I.INDEX_NAME VE NB.SUBOBJECT_NAME NULL VE NB.OBJECT_TYPE = 'INDEX') OLUŞTURULDU, (SUM (S.BYTES) / 1024/1024) INDEX_MB, (SAYI SEÇ (1) DBA_IND_COLUMNS DIC'DEN WHERE DIC.INDEX_NAME = I.INDEX_NAME AND DIC.TABLE_NAME = I.TABLE_NAME VE DIC.INDEX_OWNER = I.OWNER) COUNT_INDEX_COLS DBA_SEGMENTS S, DBA_INDEXES I'DEN WHERE I.INDEX_NAME = S.SEGMENT_NAME VE I.OWNER = S.OWNER VE S.OWNER '% SYS%' GİBİ DEĞİL GROUP BY I.OWNER, I.TABLE_OWNER, TABLE_NAME, INDEX_NAME, INDEX_TYPE TOPLAMI (S.BYTES) > 1024 * 1024), TMP2 AS (INDEX_OWNER SEÇİN, INDEX_NAME, PLAN_OPERATION, (MIN (TO_CHAR (NB.BEGIN_INTERVAL_TIME, "YYYY-AA-GG HH24: MI: SS") SEÇİN) DBA_HIST_SNAPSHOT NB'DEN NB.SNAP_ID = V.MIN_SNAP_ID) MIN_DATE NEREDE, (MAX SEÇİN (TO_CHAR (NB.END_INTERVAL_TIME, "YYYY-AA-GG HH24: MI: SS")) DBA_HIST_SNAPSHOT NB'DEN NB.SNAP_ID = V.MAX_SNAP_ID) MAX_DATE NEREDE, SAYILAR (D.OBJECT_OWNER INDEX_OWNER SEÇİNİZ, D.OBJECT_NAME INDEX_NAME, D. İŞLETME || '' || D. SEÇENEK PLANI_İŞLETME, MIN (H.SNAP_ID) MIN_SNAP_ID, MAX (H.SNAP_ID) MAX_SNAP_ID, SAYI (1) SAYI DBA_HIST_SQL_PLAN D, DBA_HIST_SQLSTAT H'den D. OPERASYONUN '% INDEX%' GİBİ VE D.SQL_ID = H.SQL_ID GROUP BY D.OBJECT_OWNER, D.OBJECT_NAME, D. OPERATION, D.OPSİYONLAR) V) A.TABLE_OWNER'ı SEÇİN, A.TABLE_NAME, A.INDEX_OWNER, A.INDEX_NAME, A. OLUŞTURULDU, A.INDEX_TYPE, A.INDEX_MB, A.COUNT_INDEX_COLS, B.PLAN_OPERATION, DURUM MIN_DATE BU DURUMDA BOŞ OLDUĞUNDA (MIN (TO_CHAR (NB.BEGIN_INTERVAL_TIME, "YYYY-AA-GG HH24: MI: SS") SEÇİN) DBA_HIST_SNAPSHOT NB'DEN) BAŞKA MIN_DATE MIN_DATE OLARAK BİTİR, DURUM MAX_DATE BU DURUMDA BOŞ OLDUĞUNDA (MAX SEÇİN (TO_CHAR (NB.BEGIN_INTERVAL_TIME, "YYYY-MM-DD HH24: MI: SS")) DBA_HIST_SNAPSHOT NB'DEN) BAŞKA MAX_DATE MAX_DATE OLARAK BİTİR, SAYILAR TMP1 A'DAN SOL DIŞ BİRLEŞTİRME TMP2 B AÇIK (A.INDEX_OWNER = B.INDEX_OWNER VE A.INDEX_NAME = B.INDEX_NAME);

Daha sonra daha fazla devop ve DBA içeriği paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~

Oracle veritabanının mevcut oturumun / sürecin oturum kimliğini nasıl elde ettiğini ayrıntılı olarak açıklayın
önceki
Oracle, SQL Server, MySQL ve PostgreSQL veritabanlarının avantaj ve dezavantajlarının detaylı analizi
Sonraki
Türük neden Ali'nin kalçasını sıkıca tutuyor?
Jingxian County: Geleneksel Kauçuk ve Plastik Ürünler Sektörü Yeşil Yeni Yol Yaratıyor
Zhang Bo: Didi "Demir Adam" Cheng Wei "Hediye"
MySQL veritabanı deneyi-dikey bölme ve yatay bölme nedir?
Oracle deneyi - dört Oracle sayı yuvarlama işlevini tartışın
Carrefour, Suning'e 4,8 milyar sattı ve batan çokuluslu şirketlerin hepsi aynı hatayı yaptı.
1200! Hebei "Üç Destek ve Bir Destek" kayıt olmak üzere, en son iş listesi
MySQL oturum kilidi bekleme ilişkisi prensibinin ayrıntılı açıklaması-4 temel tablo
4,8 milyar Carrefour'u satın aldı ve yılda 1 milyar zarar etti! Suning'in parası nereden geldi?
Oracle grafik arabirimi birleşik bir çözümü çağıramaz - VNC hizmeti
Linux komutlarını ayrıntılı olarak açıklayın --- htpasswd ile bir şifre dosyası nasıl oluşturulur?
Wong Lo Katın "Yağsız Sütlü Çay" lansmanının arkasındaki sebep nedir?
To Top