Sürüm: 0.21.0Bu dokümantasyon Spitfire 0.21.0 içindir.
SQL: schema'dan query önerileri
Ne işe yarar
Schema'dan öner, bir SQL bağlantısının veritabanı schema'sını (tablolar, sütunlar, primary key'ler, index'ler, foreign key'ler) okur ve seçtiğiniz tablolar için gerçekçi read query'ler önerir: primary key ile arama, index'li sütunla arama, foreign key üzerinden join, bir üst kaydın alt kayıtları, sıralı sayfa ve aralık sayımı. Her öneri EXPLAIN ile kontrol edilir; tam tablo taraması yapacak olanlar işaretlenir. Seçtiğiniz öneriler tek bir query mix adımı ya da query başına bir adım olarak teste eklenir.
Her şey sizin Spitfire kurulumunuzda çalışır: query'ler Spitfire sunucunuzdan veritabanınıza gider, başka hiçbir yere bir şey gönderilmez, harici ya da AI servisi kullanılmaz. Pencere bunu da yazar: Her şey bu Spitfire sunucusundan sizin veritabanınıza karşı çalışır…
Ne zaman kullanılır
- Elinizde üretim istatistiği (
pg_stat_statements) yoksa ve hızlıca anlamlı bir okuma yükü kurmak istiyorsanız. - Yeni bir schema'nın ya da index değişikliğinin tipik erişim desenleri altında nasıl davrandığını görmek için.
Kimler kullanabilir
Yalnızca kurulum yöneticileri. API, çalışma alanı yöneticilerini ve kullanıcıları her adımda reddeder (403). Ayrıca bir tarayıcı oturumu gerekir; API token'ıyla çalışmaz. Düğme yalnızca PostgreSQL, MySQL / MariaDB, SQL Server ve Oracle bağlantılarında görünür.
Başlamadan önce
Bu özelliği production veritabanında kullanmanız kesinlikle önerilmez. Katalog okuma ve EXPLAIN veritabanına hafif de olsa yük bindirir. Verdiğiniz hesaptan siz sorumlusunuz.
- Veritabanında bu iş için ayrı, en az yetkili, read-only bir kullanıcı oluşturun; asla root, superuser ya da admin kullanmayın. Pencere her veritabanı için hazır bir script gösterir (aşağıda).
- Bağlantının Kullanıcı ve Parola alanlarına bu kullanıcıyı girin.
- Bağlantı production'a gidiyorsa Production veritabanı kutusunu işaretleyin; Spitfire güçlü bir uyarı ve ek onay ister.
Adım adım
1 Kontrol
Bağlantılar sayfasında SQL bağlantısının satırındaki Schema'dan öner düğmesine tıklayın. (Aynı pencere bir SQL adımında Toplu ekle / içe aktar → Schema'dan öner ile de açılır.)
orders-db: schema'dan query önerileri penceresi 1. Kontrol sekmesiyle açılır. Spitfire bağlı kullanıcının yetkilerini read-only olarak kontrol eder (Yetkiler kontrol ediliyor (read-only)…):
- PostgreSQL: rol özellikleri ve tablo/schema yetkileri,
- MySQL:
SHOW GRANTS, - SQL Server:
sysadmin/db_owner/db_datawriterüyelikleri ve veritabanı izinleri, - Oracle: roller ve
SESSION_PRIVS.
Bağlı kullanıcının yetkileri altında sonuç bir renkle gösterilir:
- yeşil read-only: ideal durum;
- turuncu yazma yetkisi var: devam edebilirsiniz ama ayrı bir read-only kullanıcı önerilir;
- kırmızı superuser / admin: devam etmek için ek onay gerekir;
- kontrol edilemedi: yetkiler okunamadı. Yanında PRODUCTION ya da production olarak işaretli değil etiketi görünür. Kullanıcıyı değiştirdikten sonra Yeniden kontrol et'e tıklayın.
Ayrı bir read-only kullanıcı bölümü, veritabanınızın türüne göre hazır script'i gösterir:
- Gerekli: schema okuma ve EXPLAIN — PostgreSQL:
CONNECT,USAGE,SELECTve default privileges ile birLOGINrolü; MySQL: veritabanındaSELECT, SHOW VIEW; SQL Server:db_datareader,VIEW DEFINITION,SHOWPLAN; Oracle:CREATE SESSION, schema tablolarındaSELECT,SELECT_CATALOG_ROLE. - İsteğe bağlı: sorgu istatistikleri — PostgreSQL
pg_read_all_stats; MySQLPROCESSveperformance_schema; SQL ServerVIEW SERVER STATE. Script'i Kopyala ile alın,<CHANGE_ME_STRONG_PASSWORD>yerine kendi güçlü parolanızı yazın ve veritabanında çalıştırın. Spitfire parola üretmez. Sonra kullanıcıyı ve parolayı bağlantıya girin.
- Gerekli: schema okuma ve EXPLAIN — PostgreSQL:
Onaya geç'e tıklayın.
2 Onay
- Kapsam seçin:
- Yalnızca schema (tablo verisi yok): yalnızca katalog metadata'sı okunur.
- Schema ve örnek değerler: ayrıca seçtiğiniz sütunlardan örnek değer okunabilir (aşağıda).
- Onay metnini dikkatle okuyun. Metin sürümlüdür (Onay metni sürümü …) ve TR/EN vardır. Neyin okunduğunu, ayrı ve en az yetkili bir read-only kullanıcı kullanılması gerektiğini, production veritabanının kesinlikle önerilmediğini, katalog okumanın ve EXPLAIN'in hafif yük bindirdiğini ve hesaptan müşterinin sorumlu olduğunu söyler. Altında o bağlantı için gösterilen uyarılar listelenir.
- Yukarıdaki metni okudum ve bu bağlantı için kabul ediyorum. kutusunu işaretleyin.
- Kullanıcı superuser / admin ise ya da bağlantı Production olarak işaretliyse ikinci, kırmızı bir kutu çıkar: Kırmızı uyarıyı (production veritabanı ya da superuser/admin hesabı) anladım ve yine de devam etmek istiyorum. Bunu da işaretlemeden devam edemezsiniz.
- Onayla ve devam et'e tıklayın.
Onay nasıl kaydedilir: Onayınız kullanıcı adınız ve e-postanızla, zaman, IP adresi, tarayıcı, metin sürümü ve dili, kapsam, yetki kontrolünün sonucu ve gösterilen uyarılarla birlikte aynen saklanır (denetim kaydına da yazılır). Bağlantının bir fingerprint'i de saklanır: tür, host, port, veritabanı, kullanıcı, SSH host'u ve kullanıcısı, production işareti. Secret'lar fingerprint'e girmez.
Ne zaman yeniden sorulur: Bağlantının fingerprint'i (ör. host ya da kullanıcı), kapsam ya da onay metninin sürümü değişince onay geçersiz olur ve yeniden sorulur. Geçerli onay yokken okumalar reddedilir: Önce bu bağlantı (şimdiki haliyle) ve kapsam için kurulum yöneticisinin onayı gerekir.
3 Tablolar
- Geçerli bir onayınız varsa pencere doğrudan 3. Tablolar sekmesiyle açılır.
- İsterseniz Yalnızca bu schema'lar ve Hariç tutulan schema'lar alanlarına virgülle schema adları yazın. Boş bırakılırsa sistem schema'ları dışındaki hepsi okunur.
- Schema'yı oku'ya tıklayın. Okunanlar: schema'lar, tablolar, sütunlar (ad, tip, boş olabilir mi), primary key'ler, index'ler, foreign key'ler ve kataloğun satır tahminleri. Okuma, veritabanı destekliyorsa read-only bir transaction içinde ve zaman aşımıyla yapılır; en çok 2000 tablo okunur. Tablo verisi okunmaz.
- Sonuç bağlantı başına saklanır; üstte … okundu (… ms) yazar. Schema değiştiyse Yeniden oku'ya tıklayın.
- Tablo listesinde Tablo, Satır (tahmin), Sütun ve Anahtarlar (index ve foreign key sayıları) görünür. Tabloları süz ile arayın, satırları işaretleyerek seçin (ya da Tümü / Hiçbiri).
- Query öner (N tablo)'ya tıklayın. Her öneri EXPLAIN ile kontrol edilir (yalnızca plan; query çalıştırılmaz).
4 Öneriler
Öneri tablosunun sütunları Ad, Ağırlık, Sorgu ve Parametreler'dir; hepsi düzenlenebilir. Ayrıca her satırda:
- Ad'ın altında türü gösteren bir rozet: primary key, index ile arama, join, alt kayıtlar, sayfa ya da sayım;
- yanında EXPLAIN sonucunu gösteren bir rozet: index (iyi), dikkat: tam tablo taraması, dikkat: tam tarama, yüksek maliyet ya da EXPLAIN başarısız; altında maliyet …, ~… satır;
- Sorgu'nun altında gerekçe: ör. Primary key ile arama (id)., Index idx_orders_customer ile arama (customer_id)., Bir satır ve üst kaydı customers (foreign key …).
Özet satırı N öneri, M seçili yazar; tam tarama varsa N tam tablo taraması rozeti görünür.
EXPLAIN yalnızca planı ister, query'yi çalıştırmaz: PostgreSQL/MySQL'de EXPLAIN (asla EXPLAIN ANALYZE değil), SQL Server'da SHOWPLAN_XML, Oracle'da EXPLAIN PLAN. Her önerinin bir satır sınırı vardır (LIMIT, TOP ya da FETCH FIRST), veritabanının placeholder'larını kullanır, önerilen parametre bağlamaları vardır ve write guard'dan okuma olarak geçer.
Önerileri teste eklemek için:
- İstemediğiniz satırların işaretini kaldırın; ad, ağırlık, SQL ve parametreleri gerektiği gibi düzenleyin.
- Sonuç: Tek query mix step'i ya da Her ifade ayrı step.
- Bağlantılar sayfasından açtıysanız Eklenecek yer listesinden mevcut bir testi ya da yeni bir test seçin (yeni test için Yeni testin adını yazın). Bir SQL adımından açtıysanız öneriler o adıma eklenir.
- Ekle (N)'e tıklayın. … testine eklendi. mesajındaki Editörde aç ile teste gidin, gözden geçirip kaydedin.
Örnek değerler
Parametreleri gerçek değerlerle beslemek için:
- Öneriler ekranında Örnek değer kullan (ayrı onay)'a tıklayın. Pencere Schema ve örnek değerler kapsamı için 1. Kontrol'e döner; onayı bu kapsam için yeniden verin.
- Öneriler ekranında parametrenin yanındaki düğmeye (Bu sütunun örnek değerlerini bir veri dosyasına oku) tıklayın.
- Spitfire tablonun sınırlı bir örnekleminden (destekleniyorsa
TABLESAMPLE/SAMPLE) en çok 1.000 farklı değeri read-only okur ve Spitfire sunucusunda bir veri dosyası olarak saklar. Parametre{{veri.sütun}}biçiminde bağlanır; pencere Örnek değer veri dosyaları: … listesini gösterir.
Değerler hiçbir zaman log'a ya da denetim kaydına yazılmaz; yalnızca sayıları yazılır.
Onay kayıtları
Onay kayıtları sekmesi bu bağlantı için verilmiş bütün onayları listeler: Zaman, Kim, Kapsam, Kullanıcı (yetki seviyesi ve varsa PRODUCTION etiketi), Hedef ve Durum (geçerli, eski (bağlantı ya da metin değişti), ya da … tarihinde … geri aldı). Ek kırmızı uyarı onaylandıysa yetki seviyesinin yanında kırmızı bir işaret simgesi (Ek uyarı onaylandı) görünür. Bir onayı Geri al ile iptal edebilirsiniz; geri alınan onay silinmez, işaretlenir.
Neler log'a yazılır
Her yetki kontrolü, schema okuma, EXPLAIN grubu ve örnek okuma log'a ve denetim kaydına yazılır: bağlantı, kullanıcı, sayılar ve süreler. Secret ve veri değeri yazılmaz.
Sık karşılaşılan sorunlar
Belirti: Schema'dan öner düğmesi görünmüyor. Neden: Kurulum yöneticisi değilsiniz ya da bağlantı SQL türünde değil. Çözüm: Bir kurulum yöneticisinden yardım isteyin.
Belirti: Önce bu bağlantı (şimdiki haliyle) ve kapsam için kurulum yöneticisinin onayı gerekir. Neden: Onay hiç verilmedi ya da bağlantı (host, kullanıcı, SSH, production işareti), kapsam veya metin sürümü değişti. Çözüm: 1. Kontrol → Onaya geç ile onayı yeniden verin.
Belirti: Devam etmek için ek uyarıyı (production veritabanı ya da superuser hesabı) onaylayın. Neden: Kullanıcı superuser/admin ya da bağlantı production olarak işaretli. Çözüm: Tercihen read-only bir kullanıcıya geçin; yine de devam edecekseniz kırmızı kutuyu işaretleyin.
Belirti: Onay metni değişti; yeniden okuyun. Neden: Pencere açıkken onay metninin sürümü değişti. Çözüm: Pencereyi kapatıp yeniden açın, metni okuyup onaylayın.
Belirti: Yetki seviyesi kontrol edilemedi. Neden: Kullanıcı katalog görünümlerini okuyamıyor ya da bağlantı kurulamadı. Çözüm: Önce Test et ile bağlantıyı doğrulayın; script'teki gerekli yetkileri verin.
Belirti: Seçilen schema'larda tablo yok (ya da kullanıcı göremiyor).
Neden: Schema filtresi yanlış ya da kullanıcının tablolarda SELECT yetkisi yok.
Çözüm: Filtreleri boşaltın; script'teki SELECT / USAGE yetkilerini verin.
Belirti: Yalnızca ilk 2000 tablo okundu; schema'ları daraltın. Neden: Veritabanında 2000'den çok tablo var. Çözüm: Yalnızca bu schema'lar alanıyla okumayı daraltın.
Belirti: Öneri yok: seçilen tablolarda üzerine kurulacak primary key, index ya da foreign key yok. Neden: Tablolarda anahtar ya da index yok. Çözüm: Anahtarı olan tabloları seçin ya da query'leri elle yazın.
Belirti: Çok sayıda dikkat: tam tablo taraması. Neden: Sorgunun kullandığı sütunda uygun index yok ya da planlayıcı tablo küçük olduğu için taramayı seçti. Çözüm: Bu öneriler yük altında pahalı olabilir; seçimi kaldırın ya da index'i değerlendirin.
Belirti: Örneklemde sütunun hiç değeri yok. Neden: Örneklem boş ya da sütun tamamen NULL. Çözüm: Başka bir sütun seçin ya da parametreyi elle doldurun.





