venerdì 7 luglio 2017

Verifica dello stato di frammentazione degli indici del database


Per verificare lo stato della frammentazione degli indici di tutte le tabelle è sufficiente utilizzare questo script:


SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.alloc_unit_type_desc,
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.database_id = DB_ID()
ORDER BY indexstats.avg_fragmentation_in_percent desc

giovedì 22 giugno 2017

Chiusura immediata di tutte le connessioni ad un database

USE [master];

DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'
FROM sys.dm_exec_sessions
WHERE database_id  = db_id('KnoS_GestioneStudio')

EXEC(@kill);

martedì 7 marzo 2017

Conteggio del numero di connessioni aperte su SQL server

Un uso "sbagliato" delle risorse porta qualche volta a dimenticarsi le connessioni aperte sul server.

Ci sono tecniche per garantire che le connessioni siano usate correttamente, ma se c'è il dubbio di aver lasciato connessioni aperte è importante controllare come il loro numero vari durante l'esecuzione del software.

Per controllare "lato SQL" quante connessioni sono aperte è sufficiente usare la query:

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY dbid, loginame