Andrea Benedetti Blog

  • Merry (Power) Christmas :-)

  • [T-SQL] Insert dummy and test data in tables

    Lavorando con applicazioni database mi rendo conto che c’è una fase importantissima che troppo spesso viene trascurata: il test delle performance sui presunti carichi che si dovranno sostenere. Mi spiego con una domanda: qual 'è il senso di testare le...
  • [Reporting Services] Generate single PDF from multiple PDF

    Reporting Services , la piattaforma di presentazione delle informazioni di SQL Server, consente, tra i vari formati disponibili , di estrarre report in formato PDF . In scenari in cui vengono sviluppati molti report, può nascere (e spesso nasce) la necessità...
  • Happy (SQL) Christmas !!!

      SET NOCOUNT ON ; DECLARE @level smallint = 10 ; DECLARE @i tinyint = 1 DECLARE @Offset smallint = 10 ; DECLARE @x1 smallint = 100 ; DECLARE @y1 smallint = 100 ; DECLARE @x2 smallint = 150 ; DECLARE @y2 smallint = 100 ; DECLARE ...
  • Happy easter with a TSQL egg :-)

    Non essendo capace a fare un uovo di cioccolato, mi sono limitato a costruirlo con il tipo geometry :-)   DECLARE @x AS float = - 1.5 ; DECLARE @tTable TABLE ( geo geometry ); WHILE @x < 1.5 BEGIN INSERT INTO @tTable SELECT geometry...
  • Insert dummy data in tables with relationship

    Torno spesso sull’argomento relativo ai test di carico / performance dei database e sull’importanza di poter profilare l’utilizzo che avranno con una mole di dati quantomeno simile allo scenario di produzione. Diventa importante, quindi, avere un qualsivoglia...
  • SQL Server 2014: my TOP 5 favorite features

    Ogni volta che una nuova versione di SQL Server sta per essere rilasciata, mi diverto a fare la classifica delle nuove caratteristiche che, per me, valgono da sole il prezzo del biglietto. Da qualche giorno è disponibile la Community Technology Preview...
  • Caricamenti massivi e best practices. L’ordine corretto delle cose

    In scenari di caricamenti massivi la best practice è sempre una, detta e ridetta: DROP indici caricamento massivo CREATE indici Bene. Ora la domanda è: in che ordine eseguo le singole operazioni? Intendo dire: Supponendo che la mia tabella abbia sia un...
  • Analytic functions, LAG, running total, cursor, SQLCLR, …

    Qualche anno fa (sono quasi 5 !!!) scrivevo di cursori, complessità lineari, complessità esponenziali, SQLCLR, … qui e qui . Nei due post del blog analizzavo alcune possibili soluzioni (con cursore, con subquery senza cursore, con un’implementazione SQLCLR...
  • Auto generate database copy with backup and restore

    Vedo spesso la necessità di poter disporre di un database “copia”, per attività di controllo, verifica, reportistica, … In pratica, risolvere la necessità di costruire al volo e dinamicamente una copia del database, “accanto” a quello operazionale. Per...
  • Stored Procedure e DROP esplicito delle tabelle temporanee

    Nelle attività di performance tuning sono molti i “dettagli” che possono aiutare a guadagnare tempo prezioso. Anche poco, d’accordo, ma sempre di un risparmio si tratta.   Un esempio: se trovo, all’interno di una stored procedure, una DROP di una...
  • Talking About IDENTITY Columns

    La proprietà IDENTITY viene spesso utilizzata per quelle tabelle che hanno la necessità di avere, per ogni riga, un valore univoco. Il database engine ci solleva, così, dall’onere di verificare ed attribuire un valore che non sia già stato utilizzato...
  • Thinking about Data Compression

    Nell’ultimo post, qui , ho parlato di come poter comprimere i dati, tramite SQLCLR , per quelle colonne che contengono informazioni che non possono essere compresse con gli strumenti nativi che SQL Server, dalla versione 2008 nelle edizioni Enterprise...
  • Data Compression, data pages, XML & SQLCLR

    Chiunque si occupi di database sa, è evidente, che la loro dimensione aumenta nel tempo. Aumentano i dati, quindi gli indici, quindi lo storage necessario, quindi le dimensioni dei backup, quindi i tempi di manutenzione, quindi … A partire dalla versione...
  • E i DECIMAL con scala a 0 ?

    Inizio con una domanda, non me ne vogliate. Chi di voi ha mai visto / creato colonne di tipo DECIMAL con scala uguale a 0?   Intendo dire qualcosa come: CREATE TABLE myTable ( ... myColumn DECIMAL ( 3 , 0 ) , ... );   ...
  • NVarchar(4000) vs. NVarchar(x). O anche: “Ti piace vincere facile?”

    Certo il titolo non è dei più chiari, però correggo subito la domanda con la risposta (provocatoria): “ Ti piace perdere facile! ”. Vengo allo scenario. Ogni colonna all’interno del database, che andrà a contenere del testo, viene modellata come NVarchar...
  • Analysis Services: automatic server-side trace

    Il modo migliore per monitorare nel tempo l’utilizzo dei nostri database è utilizzare il SQL Server Profiler e registrare gli eventi che riteniamo migliori per la nostra analisi. Per avere il minimo impatto sui sistemi è sempre consigliabile utilizzare...
  • Stored procedure & metadata

    Può capitare la necessità di conoscere, a runtime, lo schema (i metadati) del resultset uscente da una stored procedure. Recuperare queste informazioni può essere utile, ad esempio, in tutti quegli scenari in cui lo schema varia al variare del codice...
  • Dei decimal e dei bytes regalati…

    Mi chiedo quale sia il senso di definire, sulla struttura di una tabella, una colonna DECIMAL (3,0). Sostanzialmente un attributo in grado di memorizzare cifre comprese tra -999 e 999.   La domanda, che dovrebbe guidare ogni scelta in fase di modellazione...
  • Autogrow come il cortisone

    Iniziamo bene: come il cortisone anche l’autogrow salva la vita. Ma, come per il cortisone, è il caso di non abusarne ma, piuttosto, di utilizzarlo solo quando non se ne può fare a meno.   L’inizio del post è un pò “farmaceutico” ok, ma credo che...
  • Tempdb, data files & performance

    Un’istanza SQL Server ha un solo tempdb e, per questo e per il fatto che molte attività lo possono utilizzare in maniera intensiva, potrebbe diventare un collo di bottiglia. Per verificare problemi di performance posso iniziare controllando la contesa...
  • Datawarehouse: Maximum CPU Consumption Rate (MCR)

    Nella definizione e nel disegno di un’ architettura SQL Server , per una corretta valutazione dell’ hardware , ci sono molte metriche da tenere in considerazione. Studiando un’architettura dedicata al datawarehouse (rispetto a sistemi dedicati ad applicazioni...
  • Database fine tuning. Talking about duplicate statistics

    Continuo, anche in questo post, i ragionamenti relativi al fine tuning dei nostri database. Quindi a tutte quelle operazioni che possono apportare delle migliorie in termini di performance (sono solo operazionali, ma anche di manutenzione, di backup ...
  • Safely empty or fill tables without violating any foreign key relationship

    Le relazioni tra le tabelle di un database sono il meccanismo necessario a garantire l’integrità del dato. Una tabella “figlia” non potrà, se opportunamente relazionata, contenere righe che possano legarsi a righe NON esistenti sulla tabella “padre” ...
  • Update data on the fly

    Prendete un datawarehouse abbastanza complesso, con decine di tabelle dei fatti strutturate secondo una modellazione ben precisa: tutte le tabelle (dei fatti) si chiamano “fact_…” tutte le chiavi si chiamano “ID…” (per renderla semplice in questo post...