Category: SQL Server 2014

  • Spinlocks lightweight synchronization primitives

    Spinlocks are lightweight synchronization primitives which are used to protect access to data structures. Spinlocks are used to access data structures for a very short period of time. When a thread attempting to acquire a spinlock and if it is unable to obtain access it executes in a loop periodically checking to determine if the resource is available instead of immediately yielding.

    After some period of time a thread waiting on a spinlock will yield before it is able to acquire the resource in order to allow other threads running on the same CPU to execute. This is known as a backoff.

    When a large number of threads are contending for access to a single spinlock and it can lead to performance problems

    You can use below DMV to get the SPIN LOCK information

    select * from sys.dm_os_spinlock_stats

    Examples
    FGCP_PRP_FILL
    OPT_IDX_STATS
    BUF_FREE_LIST

  • Script to get data file size, used space and free space

    While troubleshooting the disk space issue, you can use below script to check the data file size, used space and free size.

    select 
    		DBName,
    		name,
    		[filename],
    		size as 'Size(MB)',
    		usedspace as 'UsedSpace(MB)',
    		(size - usedspace) as 'AvailableFreeSpace(MB)'
    from		
    (	
    SELECT
    db_name(s.database_id) as DBName,
    s.name AS [Name],
    s.physical_name AS [FileName],
    (s.size * CONVERT(float,8))/1024 AS [Size],
    (CAST(CASE s.type WHEN 2 THEN 0 ELSE CAST(FILEPROPERTY(s.name, 'SpaceUsed') AS float)* CONVERT(float,8) END AS float))/1024 AS [UsedSpace],
    s.file_id AS [ID]
    FROM
    sys.filegroups AS g
    INNER JOIN sys.master_files AS s ON ((s.type = 2 or s.type = 0) and s.database_id = db_id() and (s.drop_lsn IS NULL)) AND (s.data_space_id=g.data_space_id)
    ) DBFileSizeInfo
    
    
    
  • Stripping SQL Server Database Backup to Multiple Files

    Stripping Database backup to multiple files and on different drives will make the backup speed faster and will reduce the backup duration.

    Check the below sample script for the backup and restore. You can perform the same task using SSMS GUI as well.
    Backup Script

    BACKUP DATABASE [SQLDBPool] TO  
    DISK = N'C:\JSpace\Backup\SQLDBPool1.bak',  
    DISK = N'C:\JSpace\Backup\SQLDBPool2.bak',  
    DISK = N'C:\JSpace\Backup\SQLDBPool3.bak'
    WITH NOFORMAT, 
    NOINIT,  
    NAME = N'SQLDBPool-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    GO
    

    Restore Script

    RESTORE DATABASE [SQLDBPool] FROM  
    DISK = N'C:\JSpace\Backup\SQLDBPool1.bak',  
    DISK = N'C:\JSpace\Backup\SQLDBPool2.bak',  
    DISK = N'C:\JSpace\Backup\SQLDBPool3.bak'
    WITH  FILE = 1,  NOUNLOAD,  STATS = 10,replace
    GO
    
  • Script to find out the traces running on SQL Server instance

    You can execute the below script on SQL Server instance to find out the traces, trace type, trace file path and trace status.

    select
          TraceType =
           case trace.is_default
                when 1 THEN 'Default/System Trace'
                when 0 THEN 'User Trace'
           end,
          Trace_Status =
          case trace.status
                when 1 THEN 'Running'
                when 0 THEN 'Stopped'
          end,
           ssion.session_id as SessionID,
           [loginName] = coalesce(ssion.login_name,ssion.login_name,'Reader SPID Not mentioned'),
           [Trace_File_Path] = coalesce(trace.[Path],trace.[Path],'OLEDB Client Trace')
          from sys.traces trace
                left join sys.dm_exec_sessions ssion on trace.reader_spid = ssion.session_id
    
  • How to attach a SQL Server database with a missing transaction log file?

    There may be situation where the transaction log file is corrupted or delete due to some issue, there is still hope to recover the database using data file. In the below script we will create the scenario and recover the database using data file only.

    -- create the below sample database
    create database [SQLDBPool_5] 
    
    -- execute the command to get the data log file location
    sp_helpdb sqlhelpdesk
    
    -- Copy the location of log file and data file from the output of the above command
    -- C:\JSpace\sqldbpool_5_log.ldf, C:\JSpace\sqldbpool_5.mdf
    
    -- Detatch the database
    USE [master]
    GO
    ALTER DATABASE [SQLDBPool_5] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    USE [master]
    GO
    EXEC master.dbo.sp_detach_db @dbname = N'SQLDBPool_5'
    GO
    
    -- Delete the log file
    xp_cmdshell 'del "c:\JSpace\SQLDBPool_5_log.ldf"'
    
    
    -- attach the database using MDF file only SQL Server will create the log file its self
    USE [master]
    GO
    CREATE DATABASE [SQLDBPool_5]  ON 
    ( FILENAME = N'C:\JSpace\sqldbpool_5.mdf' )
    FOR ATTACH
    GO
    
    -- You will the below message on the execution of the above command
    /*
    File activation failure. The physical file name "c:\JSpace\SQLDBPool_5_log.ldf" may be incorrect.
    New log file 'c:\JSpace\SQLDBPool_5_log.ldf' was created.
    */