Search This Blog

Showing posts with label Sql server 2012. Show all posts
Showing posts with label Sql server 2012. Show all posts

Tuesday, 14 April 2015

Fixing database is in use error while restoring sql database.

Following is the one of the most useful query while restoring database. It is used when we get error: Database is in use while restoring db from the backup.
Simply, run below query and then again try to restore database. This time, you will able to restore it. Here is the magical query:

------------------------------------------------------------
--<Config>
------------------------------------------------------------ 
DECLARE @DatabaseName VARCHAR(max)

SET @DatabaseName = 'yourdbname'

------------------------------------------------------------
--</Config>
------------------------------------------------------------
USE master

DECLARE @processes TABLE (ID INT)
DECLARE @databaseID INT

SELECT @databaseID = dbid
FROM sys.sysdatabases
WHERE NAME = @DatabaseName

INSERT INTO @processes
SELECT spid
FROM sys.sysprocesses
WHERE dbid = @databaseid

WHILE EXISTS (
  SELECT TOP (1) *
  FROM @processes
  )
BEGIN
 DECLARE @Process INT
 DECLARE @statement VARCHAR(max)

 SELECT TOP 1 @process = id
 FROM @processes

 SET @statement = 'kill ' + cast(@process AS VARCHAR(20))

 EXEC (@statement)

 DELETE TOP (1)
 FROM @processes
END

Monday, 16 February 2015

Find the dependent sql objects on a defined object

Find the dependent sql objects on a defined object:

Below query shows the dependent sql objects like tables, views etc. of defined object (here. YourObject).


SELECT referencing_schema_namereferencing_entity_name,referencing_idreferencing_class_descis_caller_dependentFROM sys.dm_sql_referencing_entities ('YourObject''OBJECT');GO

Thursday, 29 January 2015

determining index fragmentation and business rules.

Index Fragmentation: It plays an important role in improving the performance of the sql server. The indexes get fragments as more and more records are inserted and updated to the respective table. so in order to check the fragmentation, use the following query to get all information: 

PS: Business Rules defined by Microsoft to determine the fragmentation of the indexes. 
1. If the index fragmentation average is greater than and equal to 30 percent, then rebuild/ recreate the index to reduce fragmentation.
2. If the index fragmentation average is between 5 to 30 percent then reorganize a respective index.
3. If the index fragmentation average is below 5 percent, then no action is required.

Also, in general for page_count, we use to practice page_count=>2000.

So, for example, if certain index at avg_Fragmentation_percent>30 but page_count= 100 (assuming), then we can ignore that index.

Query to determine fragmentation is defined below: 

SELECT ps.database_id
 ,ps.OBJECT_ID
 ,ps.index_id
 ,b.NAME
 ,ps.avg_fragmentation_in_percent
 ,ps.avg_fragment_size_in_pages
 ,ps.page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) AS ps
INNER JOIN sys.indexes AS b ON ps.OBJECT_ID = b.OBJECT_ID
 AND ps.index_id = b.index_id
WHERE ps.database_id = DB_ID()
 AND ps.avg_fragmentation_in_percent >= 5
 AND page_count >= 2000
 AND b.NAME IS NOT NULL
ORDER BY ps.avg_fragmentation_in_percent DESC
GO

Friday, 16 January 2015

When was last tempdb cleared

Following query will help us to find when was tempdb cleared? Means when was last usage stats cleared? This will show how many days are passed when usage stats are cleared.

SELECT  DATEDIFF(DAYsd.crdateGETDATE()) AS days_historyFROM    sys.sysdatabases sdWHERE   sd.[name] 'tempdb' ;


Finding the Last Sql Server Restarted.

Following query will help in finding the last Sql Server restarted date.

This is very useful query when you are looking for unused indexes. Before dropping unused indexes,  always check last sql server restarted by using following query.

SELECT sqlserver_start_time FROM sys.dm_os_sys_info

Friday, 9 January 2015

Optimization Techniques- Finding Most expensive Queries in Sql Server

Following query will help you finding the most expensive queries in your sql database. This query will tell you about Total Logical Reads, Total Logical Writes, Last Logical Reads, Last Logical Writes etc.
Run the following query in your sql server query window:

SELECT TOP 10 qs.execution_count
        ,qs.total_logical_reads
        ,qs.last_logical_reads
        ,qs.total_logical_writes
        ,qs.last_logical_writes
        ,qs.total_worker_time
        ,qs.last_worker_time
        ,qs.total_elapsed_time / 1000000 total_elapsed_time_in_S
        ,qs.last_elapsed_time / 1000000 last_elapsed_time_in_S
        ,qs.last_execution_time
        ,qp.query_plan
        ,SUBSTRING(qt.TEXT, (qs.statement_start_offset / 2) + 1, (
                       (
                               CASE qs.statement_end_offset
                                      WHEN - 1
                                              THEN DATALENGTH(qt.TEXT)
                                      ELSE qs.statement_end_offset
                                      END - qs.statement_start_offset
                               ) / 2
                       ) + 1)
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_worker_time DESC -- CPU time


SQL Optimization Techniques- Finding Heavy Stored Procedures in Sql Server

Following query will help you finding the most heavy stored procedures in your sql database. This query will tell you Number of Execution Count, AVG CPU time to execute the respective SP and Total CPU Time of the respective SP. 
Run the following query in your sql server query window:

SELECT DB_NAME(dest.dbid) AS [Database name]
        ,OBJECT_NAME(dest.objectid, dest.dbid) AS [Stored procedure name]
        ,[Execution Count]
        ,[Avg CPU time (ms)]
        ,[Total CPU time (ms)] [Avg Elapsed time (ms)]
        ,[Creation time]
        ,[Last Execution time] [Total Elapsed time (ms)]
        ,[Plan Count]
        ,getdate() AS [Recorded date]
        ,sql_handle
        ,dest.TEXT AS 'Text'
FROM (
        SELECT TOP 100 sql_handle
               ,COUNT(DISTINCT plan_handle) AS [Plan Count]
               ,MAX(execution_count) AS [Execution Count]
               ,SUM(total_worker_time / execution_count) / 1000 AS [Avg CPU time (ms)]
               ,SUM(total_elapsed_time / execution_count) / 1000 AS [Avg Elapsed time (ms)]
               ,MAX(creation_time) AS [Creation time]
               ,MAX(last_execution_time) AS [Last Execution time]
               ,SUM(total_worker_time / 1000) AS [Total CPU time (ms)]
               ,SUM(total_elapsed_time / 1000) AS [Total Elapsed time (ms)]
        FROM sys.dm_exec_query_stats
        GROUP BY sql_handle
        ORDER BY SUM(total_worker_time / execution_count) / 1000 DESC
        ) deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE dest.dbid = DB_ID();