SQLServerITA

SQL Server e non solo

  • marzo: 2012
    L M M G V S D
    « Feb   Apr »
     1234
    567891011
    12131415161718
    19202122232425
    262728293031  
  • Blog Stats

    • 17,123 hits
  • Inserisci il tuo indirizzo e-mail per iscriverti a questo blog e ricevere notifiche di nuovi messaggi per e-mail.

    Segui assieme ad altri 6 follower

Archive for marzo 2012

SQL Server 2008 R2: identificare le Foreign Key disabilitate

Posted by belthazor78 su 26 marzo 2012


Può essere importante poter effettuare un controllo e identificare delle Foreign Key che risultano essere disabilitate in un database; i motivi sono tanti come ad esempio una disabilitazione degli indici (magari per velocizzare una query di popolamento) oppure operazioni mirate per disabilitare momentaneamente un controllo.

E’ fondamentale, però, ripristinare la situazione ed ecco un comodo script che potrà esservi di aiuto nell’identificare tutto il necessario di una Foregin key.

La query è la seguente:

SELECT o.object_id AS fk_id,
o.name      AS fk_name,
rt.name     AS fk_table,
ru.name     AS schemaname,
CASE o.is_disabled
WHEN 0 THEN ‘NO’
WHEN 1 THEN ‘YES’
END         AS is_disabled
FROM   sys.foreign_keys o
INNER JOIN sysreferences r
ON o.object_id = r.constid
INNER JOIN sys.objects rt
ON rt.object_id = r.rkeyid
INNER JOIN sys.schemas ru
ON rt.schema_id = ru.schema_id
INNER JOIN sys.objects t
ON t.object_id = o.parent_object_id
INNER JOIN sys.schemas u
ON t.schema_id = u.schema_id
LEFT OUTER JOIN sys.extended_properties p
ON p.major_id = o.object_id
WHERE
u.name = N’dbo’
AND o.TYPE = ‘F’
ORDER  BY rt.name

Come vedete è molto semplice, fatta solo per lo schema DBO (può essere omesso come dettaglio nella WHERE condition) ed elenca tutti i dati del database da dove state eseguendo la query con un risultato molto simile al seguente:

Facile intuire il significato di ogni colonna 😀

Annunci

Posted in SQL+Server+2008+R2, SQL+Server+2012 | Leave a Comment »

SQL Server: processi bloccati

Posted by belthazor78 su 25 marzo 2012


Bellissimo e utilissimo script che ho trovato al seguente link http://www.symantec.com/business/support/index?page=content&id=HOWTO9817

Lo script, che vi copierò per interno anche in questo post per evitare che possa andar perso, ci illustrerà tutta la catena di blocchi che possono capitare su una nostra istanza SQL con dettagli su quale SPID blocca e chi viene bloccato con relativi comandi eseguiti. Davvero utile. E’ stato provato con SQL Server 2005 e 2008 R2.

/*
HOWTO9817 SQL Process Blocks information script
Updated January, 2012
*/

set transaction isolation level read uncommitted

select db.name [Database],
procs1.spid SPID, procs1.blocked [Blocking SPID],
case
when blocked = 0
then ‘**Block Chain Root**’
when blocked > 0
then ‘Blocked by: ‘ + cast(procs1.blocked as CHAR(10))
end [Status],
procs1.text [Event Info], procs2.text [Blocking Event Info],
procs1.cpu [CPU Time], procs2.cpu [Blocking CPU Time],
procs1.physical_io [Disk IO], procs2.physical_io [Blocking Disk IO]
from
(
select procs.dbid, procs.spid, procs.blocked, procs.cpu, procs.physical_io, sql.text
from sys.sysprocesses procs
outer apply   sys.dm_exec_sql_text(procs.sql_handle) sql
) procs1

join sys.sysdatabases db
on procs1.dbid = db.dbid
outer apply
(
select procs.spid, procs.cpu, procs.physical_io, sql.text
from sys.sysprocesses procs
outer apply   sys.dm_exec_sql_text(procs.sql_handle) sql
where procs.spid = procs1.blocked
) procs2

where procs1.blocked > 0
–find block chain root
or
(
procs1.blocked = 0
and procs1.spid in
(
select blocked
from sys.sysprocesses
)
)
and db.name = db_name()
–put block chain roots at the top
order by procs1.blocked

Posted in SQL+Server+2008, SQL+Server+2012 | Leave a Comment »

Features Supported by the Editions of SQL Server 2012

Posted by belthazor78 su 22 marzo 2012


Tutte le feature disponibili per il nuovo SQL Server 2012 suddivise per versione. Una tabella completa che potrà sempre tornare utile per decidere qualche versione di SQL Server installare per un determinato progetto.

Ecco il link: http://technet.microsoft.com/en-us/library/cc645993%28v=sql.110%29.aspx

Posted in SQL+Server+2012 | Leave a Comment »

SQL Server 2008: velocizzare la cancellazione di milioni di righe disabilitando gli indici

Posted by belthazor78 su 18 marzo 2012


Si sa che in alcune fasi (specialmente di inserimento dati) la rimozione degli indici può portare ad enormi incrementi di performance. Non tutti sanno che è possibile ottenere quasi gli stessi miglioramenti anche disabilitando gli indici su una tabella.

E questo vale anche nelle fasi di cancellazione di molti dati di una tabella. In questo piccolo post vedremo come è possibile migliorare le perfromance di cancellazione. Vi ricordo che effettuare il classico DELETE su una tabella con milioni di righe può essere un’operazione molto lunga: per ovviare a questo problema c’è il classico comando TRUNCATE…ma non sempre può essere utilizzato (per esempio se ci sono delle chiavi referenziate).

Che fare? Ecco che ci viene in soccorso la possibilità, tra tante, di disabilitare gli indici.

Supponiamo di avere una tabella con un bel numero di dati: circa 15 milioni di record.

Durante le fasi di test si è soliti provare svariate volte le query di popolamento; ma dopo il popolamento serve anche la possibilità di cancellare i dati…vediamo come si comporta una DELETE normale su una tabella di 15 milioni di righe con 4/5 indici:

Bhè come vedete dopo 15 minuti la query è ancora in esecuzione. Il test è stato fatto su un PC modesto quindi nulla di strano.

Ora, invece, proviamo ad eseguire la stessa cancellazione ma disabilitando gli indici che si possono disabilitare (alcuni non vengono disabilitati se utilizzati dal motore di SQL che ritornerà a video un errore del tipo “The query processor is unable to produce a plan because….etc…etc…”).

Il comando sarà semplice: disabilitare gli indici, eseguire la cancellazione e riabilitare gli indici.

Dopo solo 1 minuto e 26 secondi la tabella con 15 milioni di righe è stata ripulita senza problemi.

Come avete visto la disabilitazione di alcuni indici può portare ad enormi vantaggi senza dover ricorrere al comando TRUNCATE che richiede, in alcuni casi, la rimozione di tutte le chiavi referenziate…il che potrebbe non essere molto comodo. Unica accortezza sarà quella di riabilitare gli indici disabilitati e prevederla anche  in caso di errori nell’esecuzione dei vari script.

Posted in SQL+Server+2008+R2, SQL+Server+2012 | Contrassegnato da tag: , | 1 Comment »

Adventure Works for SQL Server 2012

Posted by belthazor78 su 12 marzo 2012


Disponibili i nuovi Database di esempio per la nuovissima versione di SQL Server 2012. I database di esempio sono scaricabili al solito sito 😀 http://msftdbprodsamples.codeplex.com/releases/view/55330

Have fun!

Posted in SQL+Server+2012 | Leave a Comment »