Sql Server'da 'n' günlük web sunucusu günlükleri nasıl saklanır?


18

Daha hızlı raporlama ve performans analizi için web sunucusu günlüklerimizi Sql Server'a eklemek istiyoruz. Bu, trafik modellerini, sorunları, yavaşlamaları neredeyse gerçek zamanlı olarak görmemizi sağlayacaktır.

Yük dengeleyicimizden ve veritabanına toplu eklerimizden gelen istek / yanıt olaylarını dinleyen bir daemon'umuz var.

Bununla birlikte, günde yaklaşık 1 GB günlük alıyoruz ve sadece yaklaşık bir hafta tutmamız gerekiyor (en azından bu ham formda).

Bu verileri depolamanın ve eski girişleri silmenin en iyi yolu nedir?

Her günün verilerini kendi tablosunda saklamaktan, örneğin Log_2011_04_07o gün için tüm girişlere sahip olmaktan ve en eski tabloyu bırakmaktan bahsettik. Kolay sorgulama için tüm gün tablolarını kapsayan bir görünüm oluşturulabilir. Mümkün mü?


Bu çok benzer bir soru ama Oracle için; sözdizimi farklı olacaktır, ancak bu tarihe göre bölümlendirmenin klasik bir uygulamasıdır. Tekerleği yeniden icat etmeye gerek yok :-)
Gaius

Yanıtlar:


17

Bölümlemeye bakmalısınız.

http://technet.microsoft.com/en-us/library/dd578580%28SQL.100%29.aspx

Bölümleme ile ilgili en güzel şey, yalnızca bir tablo adınızın olması (çoklu tablo yaklaşımının aksine), böylece ekleme ifadelerinizin sabit kalmasıdır. Her uygulamada çalışır - sorgulara tamamen şeffaftır. Tabloların her birinde farklı dizinler veya istatistikler elde ederseniz ne olacağı konusunda endişelenmenize gerek yoktur.

Tabloyu sahnenin arkasındaki birden çok tabloya ayırmaya karar veren bir bölüm işlevi oluşturursunuz. İşlev yalnızca bir giriş parametresi / alanı alabilir ve sizin durumunuzda bir tarih alanı olur. İşlev, tabloyu tarihe, haftaya, aya veya yıla göre ayırabilir - sizin durumunuzda tarih, 24 saatlik bir süre istersiniz.

Ardından, her gün son bölümü değiştirmek için T-SQL kullanan bir SQL Server Agent işi oluşturun. Silme bir meta veri işlemi haline gelir ve hızlı bir şekilde yanıp söner. Bölümü değiştirin, ardından eskisini bırakın.


Buna bakacağım - ayrı bölümlerin düşmesine izin veriyor mu, böylece silme işlemleri hızlı bir şekilde gidebilir mi?
Jarrod Dixon

3
Evet, özellikle "Otomatik kayar pencere bölümü" konseptine bakmalısınız. SQLServerCentral'da bulabileceğiniz güzel bir dizi makale: part1 , part2 ve part3 .
Marian

7

6 yıl önce kullanıcıların ziyaret ettiği her tıklamayı izlememize olanak tanıyan webstatistic logging ürünü geliştirdik.

Yaptığımız şey, yazdığınız her ziyareti kaydetmek ve planlanmış arka plan programının günlükleri ayrıştırması ve daha sonraki aramalar için verileri normalleştirmesi. Veri / kayıt ayrıştırılır ayrılmaz, veri yapısını düşük tutmak için kaldırıldı.

Ürünün bir sonraki sürümü için, toplu toplayıcıları web sitelerine ayrı ayrı dağıtacak ve daha sonra toplu hizmete komutlar vererek verileri toplamak ve daha sonra temizlemek için arka plan programını kullanacağız.

Bu şekilde "zamanlanmış bir bakımı" veri kaybetmeden halledebiliriz.

Merkez sunucudaki temizleme sorunuyla ilgili olarak, mevcut planımız, örneğin verileri sonra arşivleyebilmek için "zaman damgaları" eklemektir. 3 ay.

Bunu 3D oyunlar / renderdaki MIP-MAP dokuları gibi düşündük. Ne kadar yakınlaşırsanız, o kadar ayrıntılı veri, o kadar uzakta, daha "gruplandırılmış" ve daha az ayrıntılı olur.

Dolayısıyla, günlük bazda, ziyaretçi modellerini gözlemleyebiliriz, ancak 3 ay sonra bu veriler gerçekten alakalı değildir ve verileri daha az ayrıntıya sıkıştırıyoruz.

Biz "detay düzeyi" ayrılmış pr tutmak için veri tabanı parçalar halinde kırmak karar verdi sığınak. veri tabanı. Ancak, aynı veritabanında farklı düzeyler depolarsak bazı adlandırma sorunları olduğu için yapabiliriz.

Umarım bunu bir şey için kullanabilirsin? Şirketimizin ürününün bir parçası olarak size örnek kod veremem.


1

İki sütun içeren başka bir tablo Daily_tables oluşturun: Table_name ve Date_table_created. Yeni bir günlük tablo oluşturan kodunuza (web günlüklerini yükleyen), Daily_tables tablosunu oluşturulan tablonun adı ve zaman damgası (geçerli tarih saati) ile doldurmak için başka bir giriş ekleyin. Her hafta bir TSQL komut dosyası çalıştıracak bir SQL aracısı işi oluşturun. TSQL, Daily_tables'ten tüm tablo adlarını (Table_name) 7 günden daha eski bir Date_table_created zaman damgasıyla bırakmalıdır.

Umarım aradığın şey budur :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.