0Pricing
SQL Academy · Ders

INDEX Bakımı ve Şişkinlik

INDEX şişkinliğini teşhis edin, REINDEX CONCURRENTLY ile yeniden oluşturun ve kullanılmayan INDEX'leri güvenle kaldırın.

INDEX Bakımı ve Şişkinlik, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.

Dizinler Neden Şişer

PostgreSQL, MVCC kullanır: UPDATE yeni bir satır sürümü yazar ve eski sürümü mevcut işlemler için görünür bırakır. Her iki sürüm için de dizin girdileri bulunur. Zamanla:

  • Yoğun güncellenen tablolar ölü dizin girdileri biriktirir
  • Dizinler gereğinden büyük hâle gelir
  • B-ağacı derinleştikçe aramalar yavaşlar

Şişmeyi Tanılama

Şişme denetimi sorguları basit değildir. Yaygın araçlar:

  • pgstattuple uzantısı
  • pg_repack raporları
  • check_postgres / izleme araçlarından alınan şişme sorguları
CREATE EXTENSION pgstattuple;
SELECT * FROM pgstatindex('orders_user_id_idx');

REINDEX

Dizini yeniden oluşturur. Klasik biçim ACCESS EXCLUSIVE kilidi alır; bu, üretim ortamında kötüdür:

REINDEX INDEX orders_user_id_idx;       -- blocks writes!

REINDEX CONCURRENTLY (PG 12+)

Engelleme yapmayan çeşididir; yeniden oluşturma sırasında okuma ve yazma işlemleri devam eder:

REINDEX INDEX CONCURRENTLY orders_user_id_idx;

Kullanılmayan Dizinler

Kullanılmayan bir dizin her yazma işlemini yavaşlatır, ancak hiçbir okuma işlemini hızlandırmaz. Bunları bulunuz:

SELECT schemaname, relname, indexrelname, idx_scan, pg_size_pretty(pg_relation_size(indexrelid))
FROM pg_stat_user_indexes
WHERE idx_scan = 0
  AND indexrelname NOT LIKE '%_pkey'
ORDER BY pg_relation_size(indexrelid) DESC;

Kullanılmayan Dizinleri Kaldırma

Bunları kaldırınız; ancak önce tüm ortamlarda ve zaman aralıklarında doğrulama yapınız. Ara sıra oluşturulan raporlar için kullanılan dizinler çoğu zaman kullanılmıyor gibi görünür.

DROP INDEX CONCURRENTLY old_unused_idx;

Yinelenen Dizinler

Bazen aynı dizin hem bir kısıtlama hem de el ile çalıştırılan bir CREATE INDEX tarafından oluşturulur. Yinelenenleri bulmak için pg_indexes öğesini denetleyiniz ve gereksiz olanı kaldırınız:

SELECT tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'public'
ORDER BY tablename, indexname;

Dizin Yazma Çoğaltması

Her INSERT, UPDATE ve DELETE, ilgili tüm dizinleri günceller. Yoğun kullanılan bir tabloda üç dizin = yazma maliyetinin 3 katı. Yalnızca fayda sağlayan dizinleri ekleyiniz.

GIN Bekleyen Listesi

GIN dizinleri güncellemeleri bekleyen bir listede toplu hâle getirir. Listeyi el ile temizleyiniz veya autovacuum'a güveniniz:

SELECT gin_clean_pending_list('events_data_gin');

VACUUM Dizin Girdilerini Temizler

VACUUM (MVCC dersinde ele alınmıştır), öbek sayfalarındaki ölü dizin girdilerini kaldırır. autovacuum olmadan dizinler sonsuza kadar büyür.

Dizin Boyutunu İzleme

Dizin boyutunu zaman içinde izleyiniz:

SELECT pg_size_pretty(pg_indexes_size('orders')) AS index_size,
       pg_size_pretty(pg_total_relation_size('orders')) AS total_size;

pg_repack: Tabloları Çevrim İçi Yeniden Yazma

Şiddetli şişme durumunda pg_repack, tabloyu ve dizinleri çevrim içi olarak yeniden yazar; tabloyu tamamen kilitlemez. Bunu bir OS paketi ve PostgreSQL uzantısı olarak kurunuz.

Özet

Dizinlerin bakıma ihtiyacı vardır.

  • MVCC kaynaklı şişme normaldir; VACUUM ve REINDEX CONCURRENTLY ile yönetin
  • Kullanılmayan dizinleri kaldırın
  • Yinelenenlerden kaçının
  • Her yeni dizin yazma işlemlerini yavaşlatır; bilinçli seçim yapın

Hızlı Kontrol

Hangi PostgreSQL komutu, yazma işlemlerini WITHOUT engellemeden bir dizini yeniden oluşturur?

Sıkça Sorulan Sorular

“INDEX Bakımı ve Şişkinlik” dersi ücretsiz mi?

Evet — “INDEX Bakımı ve Şişkinlik” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.

“INDEX Bakımı ve Şişkinlik” dersinde ne öğreneceğim?

INDEX şişkinliğini teşhis edin, REINDEX CONCURRENTLY ile yeniden oluşturun ve kullanılmayan INDEX'leri güvenle kaldırın. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“INDEX Bakımı ve Şişkinlik” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. B-ağacı ve Hash ve GiST ve GIN INDEX'leri
  2. Bileşik INDEX'ler ve Sütun Sırası
  3. Kısmi ve İfade INDEX'leri
  4. INDEX Bakımı ve Şişkinlik
← SQL Academy Sayfasına Dön