DBAtlas · Veritabanı operasyon atlası

Kullanılmayan index'leri tespit et

Oracle

-- İzlemeyi başlat:
ALTER INDEX musteri_il_idx MONITORING USAGE;
-- Bir süre sonra kontrol et (12c+, tüm şemalar):
SELECT owner, index_name, used FROM dba_object_usage;

USED = NO ise index izleme süresince kullanılmamıştır. İzlemeyi NOMONITORING USAGE ile kapatın. Eski v$object_usage yalnızca oturum kullanıcısının index'lerini gösterir ve 12c'den beri kullanımdan kaldırılmıştır (deprecated). 12.2+ sürümlerde index kullanımı DBA_INDEX_USAGE ile otomatik izlenir.

PostgreSQL

SELECT relname AS table, indexrelname AS index, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0
ORDER BY relname;

idx_scan = 0 istatistik sıfırlanmasından beri hiç kullanılmadığını gösterir; UNIQUE/PK'leri düşürmeyin.

MySQL

SELECT * FROM sys.schema_unused_indexes;

performance_schema açık olmalı ve sunucu bir süredir çalışıyor olmalı; UNIQUE constraint'leri hariç tutulur.

SQL Server

SELECT OBJECT_NAME(i.object_id) AS table_name, i.name AS index_name
FROM sys.indexes i
LEFT JOIN sys.dm_db_index_usage_stats s
  ON i.object_id = s.object_id AND i.index_id = s.index_id
  AND s.database_id = DB_ID()
WHERE i.type_desc = 'NONCLUSTERED'
  AND COALESCE(s.user_seeks + s.user_scans + s.user_lookups, 0) = 0;

usage_stats sunucu yeniden başlayınca sıfırlanır; yeterli gözlem penceresi bırakın.

MongoDB

db.musteri.aggregate([{ $indexStats: {} }])
// accesses.ops düşük/0 olan indeksler aday

accesses.since alanından beri gelen erişim sayısıdır; _id index'ini silemezsiniz.

Redis

# Uygulanamaz: Redis çekirdeğinde ikincil indeks yoktur.
# RediSearch modülü kullanılıyorsa FT.INFO <index> ile istatistiklere bakılır.

Veri modeli anahtar-değer olduğundan geleneksel index kavramı yoktur.

DBAtlas'ta aç →