Domanda

Per segnalare più veloce e l'analisi delle prestazioni, vogliamo inserire i nostri log del server web in SQL Server. Questo ci permetterà di vedere i modelli di traffico, problemi, rallentamenti in tempo quasi reale.

Abbiamo un demone che intercetta gli eventi di richiesta / risposta dal nostro bilanciamento e sfusi inserti caricarli nel database.

Tuttavia, si ottiene circa 1 GB di registri al giorno e abbiamo solo bisogno di mantenere circa una settimana in giro (almeno in questa forma grezza).

Qual è il modo migliore per conservare questi dati e il modo migliore per eliminare i vecchi voci?

Abbiamo parlato di memorizzare i dati di ogni giorno nella propria tabella, ad esempio, Log_2011_04_07 avrebbe tutte le voci per quel giorno, e poi cadere il tavolo più antico. Un punto di vista potrebbe essere creato per attraversare tutti i tavoli al giorno per una facile interrogazione. È fattibile?

È stato utile?

Soluzione

Si dovrebbe guardare per il partizionamento.

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

La cosa più cool di partizionamento è che avete un solo nome della tabella (in contrasto con l'approccio tavolo multipla) in modo che le istruzioni di inserimento rimangono statici. Funziona con tutte le applicazioni - è completamente trasparente per le query. Non devi preoccuparti di quello che succede se si finisce con diversi indici o statistiche su ciascuna delle tabelle, sia.

È possibile creare una funzione di partizione che decide come per spezzare la tabella in più tabelle dietro la scena. La funzione può prendere un solo ingresso parametro / campo, e nel tuo caso, sarebbe un campo data. La funzione può spezzare la tabella in base alla data, settimana, mese o anno -. Nel tuo caso, che ci si vuole data, periodo di 24 ore

Poi costruire un processo di SQL Server Agent che utilizza T-SQL di scambiare l'ultima partizione ogni giorno. L'eliminazione diventa un'operazione di metadati, ed è velocissimo. Scambiare la partizione, quindi eliminare il vecchio uno fuori.

Altri suggerimenti

Abbiamo sviluppato un prodotto di registrazione webstatistic 6 anni fa, che ci permette di tracciare ogni click di una visita utenti.

Quello che abbiamo fatto erano a registrare buld ogni visita, come hai scritto e l'avere il demone in programma analizzare i log e normalizzare i dati per ulteriori ricerca successive. Non appena i dati / record è stato analizzato, è stato rimosso per mantenere basso struttura dati.

Per la nostra prossima versione del prodotto, si distribuirà i bulk-collezionisti separatamente sui siti web e quindi utilizzare il demone per raccogliere i dati e ripulire in seguito mediante l'emissione di comandi per la maggior servizio.

In questo modo siamo in grado di gestire una "manutenzione programmata" senza perdere i dati.

Per quanto riguarda la questione di pulizia sul server centrale, il nostro piano attuale è quello di aggiungere "timestamp" per essere in grado di archiviare i dati dopo ad es. Tre mesi.

Abbiamo pensato a questo, proprio come MIP-MAP texture in 3D giochi / rendering. Più ci si avvicina, i dati più dettagliati, il più lontano, più "raggruppati" e meno dettagliati.

Così il giorno per giorno, possiamo osservare visitatori modelli, ma dopo 3 mesi tali dati arent davvero rilevante e comprimere i dati in meno dettagli.

havent deciso se ci sarà rompere la banca dati in blocchi per questo per mantenere il "livello di dettaglio" pr separati. Banca dati. Ma abbiamo appena potrebbe, in quanto vi sono alcune questioni nameing se memorizziamo livelli differenti nella stessa base di dati.

La speranza è possibile utilizzare questo per cosa? Non posso fornirò esempio di codice come parte del prodotto della nostra azienda la sua.

Crea un altro tavolo Daily_tables con due colonne: Table_name e Date_table_created. Nel codice che crea una nuova tabella giornaliera (che carica il web log), aggiungere un'altra voce per compilare la tabella Daily_tables con il nome della tabella creata, e il timestamp (data e ora correnti). Creare un processo agente di SQL che verrà eseguito uno script TSQL ogni settimana. Il TSQL dovrebbe cadere tutte le tabelle nomi (table_name) dai Daily_tables con un timestamp Date_table_created che è più vecchio che 7 giorni.

Spero che questo è ciò che stavate cercando :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top