Aman Tanrım, hepsini gördüm galiba. Çoğu zaman, bu performans sorunlarının nedenini gideremeyecek kadar tembel olan veya hatta gerçekten bir performans sorunu olup olmadığını araştıran birinin performans sorunlarını çözme çabasıdır. Bu vakaların çoğunda, sadece belirli bir teknolojiyi denemek isteyen ve umutsuzca parlak yeni çekicine uyan bir çivi arayan kişinin durumu olup olmadığını merak ediyorum.
İşte yeni bir örnek:
Veri mimarı, oldukça büyük ve karmaşık bir uygulamada bir anahtar tabloyu dikey olarak bölümlere ayırmak için ayrıntılı bir öneriyle geliyor. Değişikliğe uyum sağlamak için ne tür bir geliştirme çabası gerektiğini bilmek istiyor. Sohbet şöyle gelişti:
Ben: Bunu neden düşünüyorsunuz? Çözmeye çalıştığınız problem nedir?
O: Tablo X çok geniş, performans nedenleriyle bölümlere ayırıyoruz.
Ben: Çok geniş olduğunu düşündüren nedir?
O: Danışman, bunun tek bir masada olması için çok fazla sütun olduğunu söyledi.
Ben: Ve bu performansı etkiliyor mu?
Him: Evet, kullanıcılar uygulamanın XYZ modülünde aralıklı yavaşlamalar bildirdiler.
Ben: Sorunun kaynağının tablonun genişliği olduğunu nereden biliyorsunuz?
Him: Bu, XYZ modülünün kullandığı anahtar tablodur ve 200 sütun gibidir. Sorun bu olmalı.
Ben (Açıklama): Ancak özellikle XYZ modülü bu tablodaki sütunların çoğunu kullanır ve kullandığı sütunlar tahmin edilemez çünkü kullanıcı uygulamayı o tablodan görüntülemek istediği verileri gösterecek şekilde yapılandırır. Muhtemelen zamanımızın% 95'inde tüm masaları bir araya getirmekle sonuçlanırdık, bu da performansımızı düşürür .
O: Danışman çok geniş olduğunu ve onu değiştirmemiz gerektiğini söyledi.
Ben: Bu danışman kim? Bir danışman tuttuğumuzu bilmiyordum, geliştirme ekibiyle de hiç konuşmadılar.
O: Şey, henüz onları işe almadık. Bu, sundukları bir teklifin parçası, ancak bu veritabanını yeniden yapılandırmamız gerektiğinde ısrar ettiler.
Ben: Uh huh. Dolayısıyla, veritabanı yeniden tasarım hizmetleri satan danışman, veritabanının yeniden tasarlanmasına ihtiyacımız olduğunu düşünüyor ...
Sohbet böyle devam etti. Daha sonra söz konusu tabloya bir kez daha baktım ve egzotik bölümleme stratejilerine gerek kalmadan bazı basit normalleştirme ile daraltılabileceğini belirledim. Bu, elbette performans sorunlarını araştırdığımda (daha önce bildirilmemişti) ve bunları iki faktöre indirdiğimde tartışmalı bir nokta haline geldi:
- Birkaç anahtar sütunda eksik dizinler.
- Üretim veritabanını doğrudan MSAccess ile sorgulayarak anahtar tablolarını ("çok geniş" olanlar dahil) periyodik olarak kilitleyen birkaç hileli veri analisti.
Tabii ki mimar hala "çok geniş" meta-problemin üzerinde asılı duran tablonun dikey olarak bölünmesi için bastırıyor. Hatta uygulamaya bakmadan veya herhangi bir performans analizi çalıştırmadan veritabanında büyük tasarım değişikliklerine ihtiyacımız olduğunu belirleyebilen başka bir veritabanı danışmanından bir teklif alarak durumunu güçlendirdi.