Performance Tuning
1) What is blocking and how would you troubleshoot
it?
Blocking happens when one connection from an
application holds a lock and a second connection requires a conflicting lock
type. This forces the second connection to wait, blocked on the first.
2) What are the steps you will take to improve
performance of a poor performing query?
This is a very open ended question and there
could be a lot of reasons behind the poor performance of a query. But some
general issues that you could talk about would be: No indexes, table scans,
missing or out of date statistics, blocking, excess recompilations of stored
procedures, procedures and triggers without SET NOCOUNT ON, poorly written
query with unnecessarily complicated joins, too much normalization, excess
usage of cursors and temporary tables.
Some of the tools/ways that help you
troubleshooting performance problems are:
SET SHOWPLAN_ALL ON,
SET SHOWPLAN_TEXT ON,
SET STATISTICS IO ON,
SQL Server Profiler,
Windows NT /2000 Performance monitor,
Graphical execution plan in Query Analyzer.
3) You are being assigned a task to move 5 million
rows from one server to another using T-SQL with a linked-server. What will you
consider to avoid transaction log fill up at destination server?
Will prefer to use SET ROWCOUNT and a while loop
to commit data in batches.
4) What is the optimal Disk configuration for a
database server and what RAID configurations would you use if budget is not a
constraint?
RAID 1 for the OS / Applications
RAID 1 for the page file
RAID 10 for the Data file (or RAID 5 for few
writes)
RAID 1 (or 10) for the transaction log
5) What is a deadlock and what is a live lock? How
will you go about resolving deadlocks?
Deadlock is a situation when two processes, each
having a lock on one piece of data, attempt to acquire a lock on the other’s
piece. Each process would wait indefinitely for the other to release the
lock, unless one of the user processes is terminated. SQL Server detects
deadlocks and terminates one user’s process.
A live lock is one, where a request for an
exclusive lock is repeatedly denied because a series of overlapping shared
locks keeps interfering. SQL Server detects the situation after four denials
and refuses further shared locks. A live lock also occurs when read
transactions monopolize a table or page, forcing a write transaction to wait
indefinitely.
Check out SET DEADLOCK_PRIORITY and
"Minimizing Deadlocks" in SQL Server books online. Also check
out the article Q169960 from Microsoft knowledge base.
6) What is blocking and how would you troubleshoot
it?
Blocking happens when one connection from an
application holds a lock and a second connection requires a conflicting lock
type. This forces the second connection to wait, blocked on the first.
Read up the following topics in SQL Server books
online: Understanding and avoiding blocking, Coding efficient transactions.
7) What are statistics, under what circumstances
they go out of date, how do you update them?
Statistics determine the selectivity of the
indexes. If an indexed column has unique values then the selectivity of that
index is more, as opposed to an index with non-unique values. Query optimizer
uses these indexes in determining whether to choose an index or not while
executing a query.
Some situations under which you should update
statistics:
If there is significant change in the key values
in the index
If a large amount of data in an indexed column
has been added, changed, or removed (that is, if the distribution of key values
has changed), or the table has been truncated using the TRUNCATE TABLE
statement and then repopulated
Database is upgraded from a previous version
Look up SQL Server books online for the
following commands:
UPDATE STATISTICS,
STATS_DATE,
STATS_DATE,
DBCC SHOW_STATISTICS,
CREATE STATISTICS,
DROP STATISTICS,
sp_autostats,
sp_createstats,
sp_updatestats
8) Write SQL query to find the products which have
continuous increase in sales every year considering the following Schema and
tell which optimized query?
Table Structure
CREATE TABLE PRODUCTS
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR(30)
);
CREATE TABLE SALES
(
SALE_ID INTEGER,
PRODUCT_ID INTEGER,
YEAR INTEGER,
Quantity INTEGER,
PRICE INTEGER
);
This table, contains the following rows,
Solution
SELECT PRODUCT_NAME
FROM
(
SELECT P.PRODUCT_NAME,
S.QUANTITY
-
LEAD(S.QUANTITY,1,0)
OVER (
PARTITION
BY P.PRODUCT_ID
ORDER
BY S.YEAR DESC
)
QUAN_DIFF
FROM PRODUCTS P, SALES S
WHERE P.PRODUCT_ID = S.PRODUCT_ID
)A
GROUP BY PRODUCT_NAME
HAVING MIN(QUAN_DIFF) >= 0;
9) How to read DEADLOCK Information in SQL Server
ERRORLOG ?
In our previous posts, we learned how to trace dead lock information in SQL Server Errorlog. Once the this
information is logged inside SQL Server Logs, then how can we use that
information for deadlock analysis.
10)In case you want to
build your test scenario for DEADLOCK, then refer my article, DEADLOCK example with SQL Table and
Script.
One we enable trace for DEADLOCKS, then on every
event of deadlock, a detailed information about deadlock is being locked
in SQL Server ERRORLOG.
In our case, (refer my previous Article)following error message can be seen in SQL
Server error log related to deadlock. I am highlighting some of the key
information
2012-02-23 22:18:09.12
spid6s Deadlock encountered …. Printing deadlock
information
2012-02-23 22:18:09.12 spid6s Wait-for graph
2012-02-23 22:18:09.13 spid6s
2012-02-23 22:18:09.13 spid6s Node:1
2012-02-23 22:18:09.12 spid6s Wait-for graph
2012-02-23 22:18:09.13 spid6s
2012-02-23 22:18:09.13 spid6s Node:1
2012-02-23 22:18:09.18
spid6s RID:
2:1:184:7
CleanCnt:2 Mode:X Flags: 0×3
2012-02-23 22:18:09.18 spid6s Grant List 0:
2012-02-23 22:18:09.18 spid6s Owner:0x000000008017CE40 Mode: X Flg:0×40 Ref:0 Life:02000000 SPID:57 ECID:0 XactLockInfo: 0x0000000084E79440
2012-02-23 22:18:09.19 spid6s SPID: 57 ECID: 0 Statement Type: UPDATE Line #: 6
2012-02-23 22:18:09.19 spid6s Input Buf: Language Event:
– Step 3 update Sales Person Table and update the Sales Region for SalesPersonID 4
– Session 1 (Query Window 1) — Statement 3
2012-02-23 22:18:09.18 spid6s Grant List 0:
2012-02-23 22:18:09.18 spid6s Owner:0x000000008017CE40 Mode: X Flg:0×40 Ref:0 Life:02000000 SPID:57 ECID:0 XactLockInfo: 0x0000000084E79440
2012-02-23 22:18:09.19 spid6s SPID: 57 ECID: 0 Statement Type: UPDATE Line #: 6
2012-02-23 22:18:09.19 spid6s Input Buf: Language Event:
– Step 3 update Sales Person Table and update the Sales Region for SalesPersonID 4
– Session 1 (Query Window 1) — Statement 3
BEGIN TRAN
update SalesPerson set Region=’Beijing’ where SalesPersonID = 4;
update SalesPerson set Region=’Beijing’ where SalesPersonID = 4;
2012-02-23 22:18:09.19
spid6s Requested by:
2012-02-23 22:18:09.19 spid6s ResType:LockOwner Stype:’OR’Xdes:0x0000000084E5F950 Mode: U SPID:53 BatchID:0 ECID:0 TaskProxy:(0x0000000084EC2540) Value:0x85005c80 Cost:(0/120)
2012-02-23 22:18:09.19 spid6s
2012-02-23 22:18:09.19 spid6s Node:2
2012-02-23 22:18:09.19 spid6s ResType:LockOwner Stype:’OR’Xdes:0x0000000084E5F950 Mode: U SPID:53 BatchID:0 ECID:0 TaskProxy:(0x0000000084EC2540) Value:0x85005c80 Cost:(0/120)
2012-02-23 22:18:09.19 spid6s
2012-02-23 22:18:09.19 spid6s Node:2
2012-02-23 22:18:09.19
spid6s RID:
2:1:157:3
CleanCnt:2 Mode:X Flags: 0×3
2012-02-23 22:18:09.19 spid6s Grant List 0:
2012-02-23 22:18:09.19 spid6s Owner:0x000000008017BF40 Mode: X Flg:0×40 Ref:0 Life:02000000 SPID:53 ECID:0 XactLockInfo: 0x0000000084E5F990
2012-02-23 22:18:09.19 spid6s SPID: 53 ECID: 0 Statement Type: UPDATE Line #: 6
2012-02-23 22:18:09.19 spid6s Input Buf: Language Event:
– Step 4 update Orders Table and update the Sales OrderDate for Order 108
– Session 2 (Query Window 2) — Statement 4
2012-02-23 22:18:09.19 spid6s Grant List 0:
2012-02-23 22:18:09.19 spid6s Owner:0x000000008017BF40 Mode: X Flg:0×40 Ref:0 Life:02000000 SPID:53 ECID:0 XactLockInfo: 0x0000000084E5F990
2012-02-23 22:18:09.19 spid6s SPID: 53 ECID: 0 Statement Type: UPDATE Line #: 6
2012-02-23 22:18:09.19 spid6s Input Buf: Language Event:
– Step 4 update Orders Table and update the Sales OrderDate for Order 108
– Session 2 (Query Window 2) — Statement 4
BEGIN TRAN
update Orders set OrderDate=’2011-11-11 11:11:11.000′ where OrderID = 108;
2012-02-23 22:18:09.19 spid6s Requested by:
2012-02-23 22:18:09.19 spid6s ResType:LockOwner Stype:’OR’Xdes:0x0000000084E79400 Mode: U SPID:57 BatchID:0 ECID:0 TaskProxy:(0x0000000084DC2540) Value:0x8017bec0 Cost:(0/196)
2012-02-23 22:18:09.34 spid6s
2012-02-23 22:18:09.34 spid6s Victim Resource Owner:
2012-02-23 22:18:09.34 spid6s ResType:LockOwner Stype:’OR’Xdes:0x0000000084E5F950 Mode: U SPID:53 BatchID:0 ECID:0 TaskProxy:(0x0000000084EC2540) Value:0x85005c80 Cost:(0/120)
2012-02-23 22:18:09.36 spid23s deadlock-list
2012-02-23 22:18:09.36 spid23s deadlock victim=process4d3048
2012-02-23 22:18:09.36 spid23s process-list
2012-02-23 22:18:09.37 spid23s process id=process4d3048 taskpriority=0 logused=120 waitresource=RID: 2:1:184:7 waittime=459 ownerId=356117 transactionname=user_transaction lasttranstarted=2012-02-23T22:17:56.510 XDES=0x84e5f950 lockMode=U schedulerid=3 kpid=10368 status=suspended spid=53 sbid=0 ecid=0 priority=0 trancount=3 lastbatchstarted=2012-02-23T22:18:08.860 lastbatchcompleted=2012-02-23T22:17:56.590 clientapp=Microsoft SQL Server Management Studio – Query hostname=DBATAG hostpid=968 loginname=DBATAG isolationlevel=read committed (2) xactid=356117 currentdb=2 lockTimeout=4294967295 clientoption1=671090784 clientoption2=390200
2012-02-23 22:18:09.37 spid23s executionStack
2012-02-23 22:18:09.37 spid23s frame procname=adhoc line=6 stmtstart=58 sqlhandle=0x02000000e49d262c4e7a570ab8a24babad5eb2842e2e869c
2012-02-23 22:18:09.37 spid23s UPDATE [Orders] set [OrderDate] = @1 WHERE [OrderID]=@2
2012-02-23 22:18:09.37 spid23s frame procname=adhoc line=6 stmtstart=276 sqlhandle=0x0200000022f3a72386c7e56f1e90e8cd21461721a3e0a67a
2012-02-23 22:18:09.37 spid23s update Orders set OrderDate=’2011-11-11 11:11:11.000′ where OrderID = 108;
2012-02-23 22:18:09.37 spid23s inputbuf
2012-02-23 22:18:09.37 spid23s — Step 4 update Orders Table and update the Sales OrderDate for Order 108
2012-02-23 22:18:09.37 spid23s — Session 2 (Query Window 2) — Statement 4
2012-02-23 22:18:09.37 spid23s BEGIN TRAN
2012-02-23 22:18:09.37 spid23s update Orders set OrderDate=’2011-11-11 11:11:11.000′ where OrderID = 108;
2012-02-23 22:18:09.37 spid23s process id=process43f048 taskpriority=0 logused=196 waitresource=RID: 2:1:157:3 waittime=7212 ownerId=353074 transactionname=user_transaction lasttranstarted=2012-02-23T22:17:18.967 XDES=0x84e79400 lockMode=U schedulerid=1 kpid=6448 status=suspended spid=57 sbid=0 ecid=0 priority=0 trancount=4 lastbatchstarted=2012-02-23T22:18:02.093 lastbatchcompleted=2012-02-23T22:17:49.167 clientapp=Microsoft SQL Server Management Studio – Query hostname=DBATAG hostpid=968 loginname=DBATAG isolationlevel=read committed (2) xactid=353074 currentdb=2 lockTimeout=4294967295 clientoption1=671090784 clientoption2=390200
2012-02-23 22:18:09.37 spid23s executionStack
2012-02-23 22:18:09.37 spid23s frame procname=adhoc line=6 stmtstart=58 sqlhandle=0x020000005d7ef62e1c25a6069814688d37c8893e368f37ac
2012-02-23 22:18:09.37 spid23s UPDATE [SalesPerson] set [Region] = @1 WHERE [SalesPersonID]=@2
2012-02-23 22:18:09.37 spid23s frame procname=adhoc line=6 stmtstart=294 sqlhandle=0x02000000b9aa5a33ee4c7af1c2eeb2cd8572c35f2638e203
2012-02-23 22:18:09.37 spid23s update SalesPerson set Region=’Beijing’ where SalesPersonID = 4;
2012-02-23 22:18:09.37 spid23s inputbuf
2012-02-23 22:18:09.37 spid23s — Step 3 update Sales Person Table and update the Sales Region for SalesPersonID 4
2012-02-23 22:18:09.37 spid23s — Session 1 (Query Window 1) — Statement 3
2012-02-23 22:18:09.37 spid23s BEGIN TRAN
2012-02-23 22:18:09.37 spid23s update SalesPerson set Region=’Beijing’ where SalesPersonID = 4;
2012-02-23 22:18:09.37 spid23s resource-list
2012-02-23 22:18:09.37 spid23s ridlock fileid=1 pageid=184 dbid=2 objectname=tempdb.dbo.Orders id=lock8012e600 mode=X associatedObjectId=1224979099300986880
2012-02-23 22:18:09.37 spid23s owner-list
2012-02-23 22:18:09.37 spid23s owner id=process43f048 mode=X
2012-02-23 22:18:09.37 spid23s waiter-list
2012-02-23 22:18:09.37 spid23s waiter id=process4d3048 mode=U requestType=wait
2012-02-23 22:18:09.37 spid23s ridlock fileid=1 pageid=157 dbid=2 objectname=tempdb.dbo.SalesPerson id=lock826ba480 mode=X associatedObjectId=1297036693379874816
2012-02-23 22:18:09.37 spid23s owner-list
2012-02-23 22:18:09.37 spid23s owner id=process4d3048 mode=X
2012-02-23 22:18:09.37 spid23s waiter-list
2012-02-23 22:18:09.37 spid23s waiter id=process43f048 mode=U requestType=wait
update Orders set OrderDate=’2011-11-11 11:11:11.000′ where OrderID = 108;
2012-02-23 22:18:09.19 spid6s Requested by:
2012-02-23 22:18:09.19 spid6s ResType:LockOwner Stype:’OR’Xdes:0x0000000084E79400 Mode: U SPID:57 BatchID:0 ECID:0 TaskProxy:(0x0000000084DC2540) Value:0x8017bec0 Cost:(0/196)
2012-02-23 22:18:09.34 spid6s
2012-02-23 22:18:09.34 spid6s Victim Resource Owner:
2012-02-23 22:18:09.34 spid6s ResType:LockOwner Stype:’OR’Xdes:0x0000000084E5F950 Mode: U SPID:53 BatchID:0 ECID:0 TaskProxy:(0x0000000084EC2540) Value:0x85005c80 Cost:(0/120)
2012-02-23 22:18:09.36 spid23s deadlock-list
2012-02-23 22:18:09.36 spid23s deadlock victim=process4d3048
2012-02-23 22:18:09.36 spid23s process-list
2012-02-23 22:18:09.37 spid23s process id=process4d3048 taskpriority=0 logused=120 waitresource=RID: 2:1:184:7 waittime=459 ownerId=356117 transactionname=user_transaction lasttranstarted=2012-02-23T22:17:56.510 XDES=0x84e5f950 lockMode=U schedulerid=3 kpid=10368 status=suspended spid=53 sbid=0 ecid=0 priority=0 trancount=3 lastbatchstarted=2012-02-23T22:18:08.860 lastbatchcompleted=2012-02-23T22:17:56.590 clientapp=Microsoft SQL Server Management Studio – Query hostname=DBATAG hostpid=968 loginname=DBATAG isolationlevel=read committed (2) xactid=356117 currentdb=2 lockTimeout=4294967295 clientoption1=671090784 clientoption2=390200
2012-02-23 22:18:09.37 spid23s executionStack
2012-02-23 22:18:09.37 spid23s frame procname=adhoc line=6 stmtstart=58 sqlhandle=0x02000000e49d262c4e7a570ab8a24babad5eb2842e2e869c
2012-02-23 22:18:09.37 spid23s UPDATE [Orders] set [OrderDate] = @1 WHERE [OrderID]=@2
2012-02-23 22:18:09.37 spid23s frame procname=adhoc line=6 stmtstart=276 sqlhandle=0x0200000022f3a72386c7e56f1e90e8cd21461721a3e0a67a
2012-02-23 22:18:09.37 spid23s update Orders set OrderDate=’2011-11-11 11:11:11.000′ where OrderID = 108;
2012-02-23 22:18:09.37 spid23s inputbuf
2012-02-23 22:18:09.37 spid23s — Step 4 update Orders Table and update the Sales OrderDate for Order 108
2012-02-23 22:18:09.37 spid23s — Session 2 (Query Window 2) — Statement 4
2012-02-23 22:18:09.37 spid23s BEGIN TRAN
2012-02-23 22:18:09.37 spid23s update Orders set OrderDate=’2011-11-11 11:11:11.000′ where OrderID = 108;
2012-02-23 22:18:09.37 spid23s process id=process43f048 taskpriority=0 logused=196 waitresource=RID: 2:1:157:3 waittime=7212 ownerId=353074 transactionname=user_transaction lasttranstarted=2012-02-23T22:17:18.967 XDES=0x84e79400 lockMode=U schedulerid=1 kpid=6448 status=suspended spid=57 sbid=0 ecid=0 priority=0 trancount=4 lastbatchstarted=2012-02-23T22:18:02.093 lastbatchcompleted=2012-02-23T22:17:49.167 clientapp=Microsoft SQL Server Management Studio – Query hostname=DBATAG hostpid=968 loginname=DBATAG isolationlevel=read committed (2) xactid=353074 currentdb=2 lockTimeout=4294967295 clientoption1=671090784 clientoption2=390200
2012-02-23 22:18:09.37 spid23s executionStack
2012-02-23 22:18:09.37 spid23s frame procname=adhoc line=6 stmtstart=58 sqlhandle=0x020000005d7ef62e1c25a6069814688d37c8893e368f37ac
2012-02-23 22:18:09.37 spid23s UPDATE [SalesPerson] set [Region] = @1 WHERE [SalesPersonID]=@2
2012-02-23 22:18:09.37 spid23s frame procname=adhoc line=6 stmtstart=294 sqlhandle=0x02000000b9aa5a33ee4c7af1c2eeb2cd8572c35f2638e203
2012-02-23 22:18:09.37 spid23s update SalesPerson set Region=’Beijing’ where SalesPersonID = 4;
2012-02-23 22:18:09.37 spid23s inputbuf
2012-02-23 22:18:09.37 spid23s — Step 3 update Sales Person Table and update the Sales Region for SalesPersonID 4
2012-02-23 22:18:09.37 spid23s — Session 1 (Query Window 1) — Statement 3
2012-02-23 22:18:09.37 spid23s BEGIN TRAN
2012-02-23 22:18:09.37 spid23s update SalesPerson set Region=’Beijing’ where SalesPersonID = 4;
2012-02-23 22:18:09.37 spid23s resource-list
2012-02-23 22:18:09.37 spid23s ridlock fileid=1 pageid=184 dbid=2 objectname=tempdb.dbo.Orders id=lock8012e600 mode=X associatedObjectId=1224979099300986880
2012-02-23 22:18:09.37 spid23s owner-list
2012-02-23 22:18:09.37 spid23s owner id=process43f048 mode=X
2012-02-23 22:18:09.37 spid23s waiter-list
2012-02-23 22:18:09.37 spid23s waiter id=process4d3048 mode=U requestType=wait
2012-02-23 22:18:09.37 spid23s ridlock fileid=1 pageid=157 dbid=2 objectname=tempdb.dbo.SalesPerson id=lock826ba480 mode=X associatedObjectId=1297036693379874816
2012-02-23 22:18:09.37 spid23s owner-list
2012-02-23 22:18:09.37 spid23s owner id=process4d3048 mode=X
2012-02-23 22:18:09.37 spid23s waiter-list
2012-02-23 22:18:09.37 spid23s waiter id=process43f048 mode=U requestType=wait
Interpretation from above mentioned Error
Information
SPID 53 is running an update statement “UPDATE
[Orders] set [OrderDate] = @1 WHERE [OrderID]=@2″. It holds an U
lock on ridlock fileid=1 pageid=184 dbid=2 objectname=tempdb.dbo.Orders
id=lock8012e600 mode=X associatedObjectId=1224979099300986880. This lock
is blocking SPID 57, which is waiting to acquire an X lock on that key resource.
SQL Server has chosen SPID 53 as the deadlock
victim, it’s batch will cancelled and it’s transaction will be rolled back.
To make you more clear, graphically, I enabled
the profiler and capture the Deadlock graph, which given me this information.
If I would have enabled the profiler to capture
Deadlock Graph then this what I am going to get
This summaries, how can we READ Deadlock from
SQL ERRORLOG for Deadlock Analysis.
IS there a way I can stimulate a deadlock in SQL
Server, so that I can use that as an example of deadlock
Let’s take an example, where we will result /
cause a dead lock to SQL Serve?
To stimulate the Deadlock, let’s create two
tables which we are going to use as an example of Deadlock
STEP 1 – Create Sample Tables which we will use
Deadlock Example
-- Sample Table, which will track individual
Orders entered by
-- Various Sales Persons
create table Orders
(
OrderID int,
OrderDate datetime,
Amount money,
SalesPersonID int
)
go
-- Sample Table, which will track all individual
Sales Persons details
create table SalesPerson
(
SalesPersonID int,
Name varchar(100),
Region varchar(100)
);
-- Insert Date in SalesPerson
insert SalesPerson Values (1,'Dave Lawlor', 'California');
insert SalesPerson Values (2,'Mark F',
'Atlanta');
insert SalesPerson Values (3,'Vivek Pundit',
'India');
insert SalesPerson Values (4,'Chi Li Hu',
'China');
insert SalesPerson Values (5,'Mat Ross',
'London');
-- Insert Date in Orders Table
insert Orders values (101,'2011-01-01', 343,1)
insert Orders values (102,'2011-02-01', 35,2)
insert Orders values (103,'2011-03-01', 33,3)
insert Orders values (104,'2011-04-01', 445,1)
insert Orders values (105,'2011-05-01', 865,3)
insert Orders values (106,'2011-06-01', 23,5)
insert Orders values (107,'2011-07-01', 673,1)
insert Orders values (108,'2011-01-01', 343,1)
insert Orders values (109,'2011-02-01', 135,2)
insert Orders values (110,'2011-03-01', 373,3)
-- select Table Data
select * from Orders;
select * from SalesPerson;
STEP 2 – Open TWO new Query Windows where we
will run 4 update statements
1 – Execute the following Query on Query Windows
1
-- Step 1 update a Order Table and update the
Sales Person Id for Order 108
-- Session 1 (Query Window 1) -- Statement 1
BEGIN TRAN
update Orders set SalesPersonID=4 where OrderID
= 108;
2 – Execute the following Query on Query Windows
2
-- Step 2 update Sales Person Table and update
the Sales Person Name for SalesPersonID 4
-- Session 2 (Query Window 2) -- Statement 2
BEGIN TRAN
update SalesPerson set Name='Li Hu Chu' where
SalesPersonID = 4;
3 – Execute the following Query on Query Windows
1
-- Step 3 update Sales Person Table and update
the Sales Region for SalesPersonID 4
-- Session 1 (Query Window 1) -- Statement 3
BEGIN TRAN
update SalesPerson set Region='Beijing' where
SalesPersonID = 4;
4 – Execute the following Query on Query Windows
2
-- Step 4 update Orders Table and update the
Sales OrderDate for Order 108
-- Session 2 (Query Window 2) -- Statement 4
BEGIN TRAN
update Orders set OrderDate='2011-11-11
11:11:11.000' where OrderID = 108;
OUTPUT at STEP 4
Once you execute the 4th statement, you will get
the following error message
Msg 1205, Level 13, State 45, Line 5
Transaction (Process ID 67) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Transaction (Process ID 67) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
NOTE : Currently this DEAD LOCK Error is
displayed at session level, I mean to say either at query window or at user
front end. But this information in not get logged either in SQL Server Error
Logs or Event Viewer by default.
As a preventive. we should keep an active eye on
deadlocks and take necessary actions to avoid DEADLOCK issues.
But if these events are not getting logged
anywhere, there how we are going to check these?, So in next topic I am going
to discuss, how to track DEADLOCK information, so that these can be analyzed.
Please check My previous article, "How to Keep track of DEADLOCK in SQL
Server", where we learn
how to trace DEADLOCK in SQL Server
Backup SQL table, have you ever tried to backup
a single SQL table inside a database? Let’s see How to backup SQL table | SQL
Table Backup Restore
11) Which Tools are
used for Performance Tuning?
There are many tools are used for Performance
tuning
a) Windows tools for monitoring applications:- Performance monitor, Performance Counters and
Logs, Task manager, Network manager
b) SQL Server tools for monitoring components:- SQL trace, SQL Profiler, DMVs, System Stored
procedures, Graphical show plan, Activity Monitor, DBCC, Built-in Functions,
Trace flags
12)How to identify
longest running queries?
There are two ways to identify slow running
queries
1) Profiler (By using duration of the query)
3) DBCC OPENTRAN
13)Reasons for Slow
Running Query?
There are a number of
common reasons for slow-running queries
a) Lack of useful indexes, Lack of useful data striping (RAID).
b) Blockings, Table scans, Lack of useful partitioning
c) Missing or out of date statistics (update statistics)
d) Slow network communication.
e) Insufficient memory available for SQL Server.
f) Insufficient disk space.
g) Excess recompilations of Stored Procedures
h) Procedures and Triggers without SET NOCOUNT On
14)How to analyze query
performance?
We can analyze query performance in three ways
1) T-SQL:- SET SHOWPLAN_ALL ON/OFF, SET SHOWPLAN_TEXT ON/OFF
2) SSMS:- Estimated Execution Plan & Actual Execution plan
3) Profiler:- To display text and XML execution plans, see Displaying Execution
Plans by Using SQL Server Profiler Event Classes
15) How to increase
Query performance?
We can improve query performance in the
following ways
1) Add indexes if required
2) Run Update statistics for out of date statistics
3) Resolving Blocking issues
4) Add space to DB files or TempDB, if that are not
having enough space
5) Reduce the too much normalization
6) Using Temporary tables instead of Cursors
7) SPs and Triggers are with Set NOCOUNT On
8) Unnecessarily complicated joins
16) Explain about
Profiler? What are the Uses of Profiler?
SQL Profiler can capture SQL Server events from
the server to analyze or troubleshoot performance problems such as Finding
Slow-running queries and Monitoring performance etc. Profiler is useful for
maintaining security, troubleshooting, monitoring and optimization.
Uses of SQL Profiler:-
a) Find the worst-performing queries.
b) Identify the cause of a deadlock.
c) Monitor stored procedure performance
d) Audit SQL Server activity.
e) Monitoring T-SQL activity per user.
f) Collect a representative sample of events for
stress testing.
g) Collect a sample of events for tuning the
physical database design by using Database Engine Tuning Advisor.
17) What are the
Events is captured SQL Profiler?
We can capture the events such as
a) T-SQL Statements, Stored Procedures
b) Cursors, Locks (deadlocks)
c) Databases objects and auto growth of size of
data & log files
d) Errors & warnings (syntax errors)
e) Performance (show plan)
f) Table Scans
g) Security audits (failed logins, password
changes)
h) Monitor server control, memory changes (CPU,
Reads, Writes)
i) Sessions, Transactions, Tuning
18) Explain about
Database Tuning Advisor? What is Workload?
Database Tuning Advisor can analyze the
performance effects of workloads run against one or more Databases or a SQL
Profiler trace (they may contain T-SQL batch or remote procedure call). After
analyzing, it recommends to add, remove or modify physical design structures
such as clustered and non-clustered indexes, indexed views and partitioning.
Workload:- A workload is a set of Transact-SQL statements that
executes against databases you want to tune
19) What is Dynamic
Management Views?
DMVs return server state information that we can
use to monitor the health of a server instance, diagnose problems, and tune
performance. There are two types of DMVs:
a) Server-scoped DMVs:- Require the VIEW SERVER STATE permission
on the server.
b) Database-scoped DMVs:- Require the VIEW DATABASE STATE permission on
the database.
20) What is DAC?
How to connect DAC?
DAC is stands for Dedicated Administrator
Connection. This diagnostic connection allows an administrator to access
running instance to troubleshoot problems or execute diagnostic queries on the
server - even when SQL Server is not responding to standard connection
requests. This connection uses 1434 port and can connect only one connection
per instance.
To connect DAC:-
1) SQLCMD:- -S
admin:<instance_name>
2) GUI:- SSMS Query Editor by
connecting to ADMIN:<instance_name>
21) Explain about
Database Console Commands (DBCC)?
DBCC Commands are used to check the consistency
of the Databases or Database Objects. While executing DBCC commands the DB
engine creates a database snapshot and then runs the checks against this
snapshot. After the DBCC command is completed, this snapshot is dropped.
22) What is Stored
Procure? What are the types of stored Procedures available in SQL server and
explain each?
A stored procedure is a precompiled executable
object that contains one or more Transact-SQL statements.
a) User Defined Stored Procedure:- Stored procedures are modules or
routines that encapsulate code for reuse. A stored procedure can take input
parameters, return tabular or scalar results and messages to the client
b) System Stored Procedure:- System stored procedures are used to perform
many administrative and informational activities.
c) Extended stored procedure:- Extended stored procedures are used to create
own external routines in a programming language such as C. Extended stored
procedures are DLLs that an instance of Microsoft SQL Server can dynamically
load and run.
23) What is Activity Monitor and use of that? What are the permissions
required to use Activity Monitor?
Activity Monitor is used to get information
about users connections to the Database Engine and the locks that they hold.
Activity Monitor is used to troubleshooting database locking issues, and to
terminate a deadlocked or unresponsive process.
To use activity monitor:- VIEW SERVER STATE permission
on Server and SELECT permission to the sysprocesses & syslocks tables
in the master database.
To Kill a Process:- sysadmin and processadmin database
roles and permission are required to KILL a process.
24) What is Execution Plan and explain it?
Execution Plan graphically displays the data
retrieval methods chosen by SQL Server. It represents the execution cost of
specific statements and queries in SQL Server. This graphical approach is very
useful for understanding the performance of the query.
1) What is Trace flag? Give some Trace flags?
Trace flags are used to temporarily set specific
server characteristics or to switch off/on a particular behavior. There are two
types of trace flags: session and global. Session trace flags are active for a
connection and are visible only to that connection. Global trace flags are set
at the server level and are visible to every connection on the server. Some
flags can only be enabled as global, and some can be enabled at either global
or session scope.
(1) 260 (2) 1204 (3) 1211 (4) 1222 (5) 1224 (6)
2528 (7) 3205 (8) 3625 (9) 4616 (10) 7806 (11) 1400
To set on/off Traceflag:- (1) DBCC TRACEON (2) DBCC TRACEOFF
To Enable Trace flag globally :- DBCC TRACEON with the -1 argument (Ex:- DBCC
TRACEON 2528, -1)
-T startup option:- Indicates that an instance of SQL Server
should be started with a specified trace flag (trace#) in effect.
To Determine trace Flags are currently active:- DBCC TRACESTATUS
25)What are the common
failures occur in SQL Server 2005?
There are three common failures occur in SQL
Server 2005.
1) Database Failures
2) Physical Server Failures
3) SQL Server Service failures
26) What are the
causes of Database Failures?
There are three common issues will causes
Database failures. Log File viewer is very useful to diagnose these problems
that will occur in SQL Server 2005.
1) Database has run out of Disk space:-
a) If a Database is online, and running out of disk
space the data cannot be inserted into the database.
b) If the Database during recovery, and the data
file becomes full the Database engine marks the Database as “Resource Pending”.
2) T. Log is full:-
a) If the Database is Online, and the T.Log becomes
full the Database Engine issues 9002 error and it is in read-only state and
will not allow updates.
b) If the Database during recovery, and the T.Log
becomes full the Database engine marks the Database as “Resource Pending”.
3) TempDB has run out of Disk space:- TempDB stores User objects, Internal Objects
and Version stores. If the TempDB database runs out of space, it causes
significant problems for SQL Server 2005. The errors are written to SQL Server
log and these errors (1101, 1105, 3959, 3967, 3958, 3966) indicates
TempDB has insufficient space.
27) How to
understand Database Engine Errors?
If any error occurs, the server writes error
messages to logs (Database mail, SQL Agent, SQL Server & Windows NT). These
logs having Error number, Error message, Severity, State, Procedure name, Line
number. We can easy to understand errors by viewing Log file viewer.
28) What is
Severity level in Event log? At what severity levels are written to the SQL
Server log?
The Severity level tells how bad the error is.
Above 19 Severity level errors are written to the SQL Server log.
29) What is State
Attribute of an error message in Event log?
The state attributes provides details of what
caused the error.
30) What are the
Causes of Physical Server Failures?
There are five common issues will causes
Physical Server failures.
1) Disk failures
2) Memory failures
3) Processor failures
4) Network card failures
5) RAID failures
31)If Log file is full
what you will do?
If the T.Log file is full the Database issues
9002 error and it is in Read-only state and will not allow updates.
The following tasks will
responding T.Log file
1) Backing up the log
2) Adding one or more log files
3) Moving the Log to another disk
4) Increasing log file size or enabling auto growth
5) Teminating long-running transactins.
32) If Data file is
full what you will do?
If the primary data file is full we can add
secondary data files.
Adding a file to database: - Right click on database > Properties > Files > click add
> give the values for logical name, file type, file group, initial size,
auto growth, path and file name .
33) If a Database
is under Suspect mode? What you will do?
sp_resetstatus:- Resets the status of a suspect database (sp_resetstatus
‘Adventureworks’)
34) If the server has completely failed, and how to all the backups
restored onto a new server?
a) Build the Windows server
and restore the domain logins to support Windows authentication.
b) Install SQL Server and
any service-pack upgrades.
c) Put SQL Server in
single-user mode and restore the master database.
d) Restore the msdb
database.
e) If the model database
was modified, restore it.
f) Restore
the user databases.
What
is Lock Escalation?
Lock
escalation is the process of converting a lot of low level locks (like row
locks, page locks) into higher level locks (like table locks). Every lock is a
memory structure too many locks would mean, more memory being occupied by
locks. To prevent this from happening, SQL Server escalates the many fine-grain
locks to fewer coarse-grain locks. Lock escalation threshold was definable in
SQL Server 6.5, but from SQL Server 7.0 onwards it’s dynamically managed by SQL
Server.
What
is a bookmark lookup?
When
a non clustered index is used for the seek and the data needed was not
at the leaf level.
at the leaf level.
What
is a key lookup?
Same
as bookmark lookup, when a non clustered index is used for the seek and the
data needed was not
at the leaf level.
at the leaf level.
What
new indexes are introduced in SQL Server onwards ?
-
Spatial
- XML
- XML
Could
you please describe some properties / Facts about NULL during comparisons.
NULL
can not used with any comparing operator, NULL
- NULL will never be true or false
- NULL can not compared as =,<>,<,>,
<=,<= etc.
- NILL is always equates will NULL only
What
are cursors? Explain different types of cursors. What are the disadvantages of
cursors? How can you avoid cursors?
Cursors
allow row-by-row processing of the resultsets.
Types
of cursors:
Static,
Dynamic,
Dynamic,
Forward-only,
Keyset-driven.
See
books online for more information.
Disadvantages
of cursors: Because we know cursor doing roundtrip it will make network line
busy and also make time consuming methods. First of all select query gernate
output and after that cursor goes one by one so roundtrip happen.Another
disadvange of cursor are ther are too costly because they require lot of
resources and temporary storage so network is quite busy. Moreover, there are
restrictions on SELECT statements that can be used with some types of cursors.
Most
of the times, set based operations can be used instead of cursors. Here is an
example:
If
you have to give a flat hike to your employees using the following criteria:
Salary
between 30000 and 40000 — 5000 hike
Salary between 40000 and 55000 — 7000 hike
Salary between 40000 and 55000 — 7000 hike
Salary
between 55000 and 65000 — 9000 hike
In
this situation many developers tend to use a cursor, determine each employee’s
salary and update his salary according to the above formula. But the same can
be achieved by multiple update statements or can be combined in a single UPDATE
statement as shown below:
UPDATE
tbl_emp SET salary =
CASE WHEN salary BETWEEN 30000 AND 40000 THEN salary + 5000
CASE WHEN salary BETWEEN 30000 AND 40000 THEN salary + 5000
WHEN
salary BETWEEN 40000 AND 55000 THEN salary + 7000
WHEN
salary BETWEEN 55000 AND 65000 THEN salary + 10000
END
Another
situation in which developers tend to use cursors: You need to call a stored
procedure when a column in a particular row meets certain condition. You don’t
have to use cursors for this. This can be achieved using WHILEloop, as long as
there is a unique key to identify each row.
Could
you please explain, how to use Cursors ?
1.
Declare a CURSOR
2.
OPEN a CURSOR
3.
FETCH data in CURSOR
4.
finally close CURSOR
Suppose,
we are building a UAT environment and we need to build a algorithm to export
exact 50% of the rows (I means to say alternative rows either even or ODD). So
write a query to select prime number rows from table.
select profileid,name,friend_name
from (select f.*,
row_number() over (order by profileid asc) rn
from Friend f) a
where rn%2=1;
Testing
Script
create table Friend
(
ProfileID
uniqueidentifier,
Name varchar(50),
Friend_Name varchar(50)
)
insert Friend values
(NEWid(),'RAM', 'Shyam')
insert Friend values ('FFCB96AD-0F16-4A77-B634-3CE1F697A3D1','RAM',
'Tony')
insert Friend values ('FFCB96AD-0F16-4A77-B634-3CE1F697A3D1','RAM',
'Vibha')
insert Friend values
(NEWid(),'SHYAM', 'RAM')
insert Friend values ('42A6A0EC-8EE5-4611-92C7-A23B0970B463','SHYAM',
'SAM')
insert Friend values ('42A6A0EC-8EE5-4611-92C7-A23B0970B463','SHYAM',
'Vibha')
insert Friend values ('42A6A0EC-8EE5-4611-92C7-A23B0970B463','SHYAM',
'John')
insert Friend values
(NEWid(),'VIBHA', 'RAM')
insert Friend values ('AC40284F-4E54-495A-BF62-9701474C44C0','VIBHA',
'SHYAM')
insert Friend values ('AC40284F-4E54-495A-BF62-9701474C44C0','VIBHA',
'George')
insert Friend values ('AC40284F-4E54-495A-BF62-9701474C44C0','VIBHA',
'TOM')
insert Friend values
(NEWid(),'TOM', 'RAM')
insert Friend values ('DE86E5EC-9748-47A0-936E-0BB6BCBCA1A0','TOM',
'DNATAG')
insert Friend values ('DE86E5EC-9748-47A0-936E-0BB6BCBCA1A0','TOM',
'Reddy')
go
select profileid,name,friend_name
from (select e.*,
row_number() over (order by profileid asc) rn
from Friend e) a
where rn%2=1;
What
is the system function to get the current user’s user id?
USER_ID().
Also check out other system functions like
USER_NAME(),
SYSTEM_USER,
SYSTEM_USER,
SESSION_USER,
CURRENT_USER,
USER,
SUSER_SID(),
HOST_NAME().
What
is precedence constraints and can you name some?
Precedence
constraints are used in DTS / SSIS packages to move from one
task to another. We have three type of precedence constraints
task to another. We have three type of precedence constraints
1.
Success
2.
Failure
3.
Completion
What
sort of resource contention we can have, which can cause database to run slow?
1.
CPU bottleneck
2.
Memory bottleneck
3.
Network IO bottleneck
4.
Disk IO bottleneck
5.
Paging File (process
trimming)
6.
Lock contention
7.
Corrupt index
8.
Recompilation
Can
you have a nested transaction?
Yes,
SQL Server do support nested transaction up to 32 levels. Check out BEGIN TRAN,
COMMIT, ROLLBACK, SAVE TRAN and @@TRANCOUNT
Which
is faster a Table Scan, or a Clustered Index Scan?
Same
speed in case a table has a clustered index that it’s always show index scan
instead of table scan.
What
is an extended stored procedure? Can you instantiate a COM object by using
T-SQL?
An
extended stored procedure is a function within a DLL (written in a programming
language like C, C++ using Open Data Services (ODS) API) that can be called
from T-SQL, just the way we call normal stored procedures using theEXEC
statement. See books online to learn how to create extended stored procedures
and how to add them to SQL Server.
Yes,
you can instantiate a COM (written in languages like VB, VC++) object from
T-SQL by using sp_OACreatestored procedure.
Also
see books online for sp_OAMethod, sp_OAGetProperty, sp_OASetProperty,
sp_OADestroy.
What
is recompilation?
When
the cached execution plan for a query cannot be used so the procedure
recompiles.
recompiles.
What
is parallelism?
SQL
Server can perform a query or index operation in parallel by using several
operating system threads, the operation can be completed quickly. When a single
query runs of multiple CPUs is known as query parallelism.
What
is the default query threshold for parallelism?
The
query optimizer decides to utilize multiple SPIDS running on different
processors to query / transfer data. Default threshold is 5 seconds.
What
are the main reasons for statement recompilation ?
Recompilation
happen mainly because of
- underlying statistics change
- DDL changes within the procedure.
- The parameters the procedure was compiled with vary
from the recently passed in parameters.
- The query plan was flushed from cache.
How
will you handle exceptions in SQL Server programming
By
using TRY-CATCH constructs,
What
is difference between Co-related sub query and nested sub query?
Correlated
subquery runs
once for each row selected by the outer query. It contains a reference to a
value from the row selected by the outer query.
Nested
subquery runs
only once for the entire nesting (outer) query. It does not contain any
reference to the outer query row.
For
example,
Correlated
Subquery:
select
e1.empname, e1.basicsal, e1.deptno from emp e1 where e1.basicsal = (select
max(basicsal) from emp e2 where e2.deptno = e1.deptno)
Nested
Subquery:
select
empname, basicsal, deptno from emp where (deptno, basicsal) in (select deptno,
max(basicsal) from emp group by deptno)
Let’s
assume, you are working for online product selling company like AMAZON, now you
need to write two alternatives query to return the firstname, lastname and the
most recent OrderID for all customers.
-- OPTION 1
SELECT o.OrderID,c.FirstName,c.LastName
FROM Orders o
JOIN Customers c
ON o.CustomerID =
c.CustomerID
WHERE OrderDate = (SELECT
MAX(OrderDate)
FROM Orders
WHERE CustomerID =
o.CustomerID
-- OPTION 2
SELECT
c.FirstName,c.LastName,o.OrderNumber FROM Orders o
JOIN
(
SELECT MAX(OrderDate) AS
MaxOrderDate,
custid
FROM orders
GROUP BY custid
) o_2
ON o.custid = o_2.custid
AND o.orderdate =
o_2.MaxOrderDate
JOIN customers c
ON c.CustID = o.CustID
What
tools do you use for performance tuning?
Query
Analyzer, Profiler, Index Wizard, Performance Monitor
What
are extended stored procedures?
How
can you execute a DOS command from SQL or through SQL query by using
xp_cmdshell?
exec xp_cmdshell 'dir
c:\*.exe'
What
sp_MSforeachtable does ?
You
can use sp_MSforeachtable undocumented stored procedure to rebuild all indexes
in your database. Try to schedule it to execute during CPU idle time and slow
production periods.
sp_MSforeachtable @command1=”print ‘?’ DBCC DBREINDEX (‘?’)”
sp_MSforeachtable @command1=”print ‘?’ DBCC DBREINDEX (‘?’)”
How
do I prevent SQL injection in my applications?
Check
my previous post, “How to secure against SQL injection“.
What
you do when a particular query is slow?
1.
Run SQL profiler and
determine if abnormal amounts of IO or CPU is used.
2.
Run profiler to
determine if recompilation is a factor.
3.
Update the statistics.
4.
Check the execution plan
Can
we convert the column datatype in to different datatype in a exiting table ?
YES, we
can change data type of column for an exiting table too but we need to make
sure the new datatype is compateble with old datatype. For Example, we can not
convert a column which store varchar values and has textual data in it to
a int type data type. Following TSQL can be used to modify (alter) a exiting
column
alter
table tablename alter Column Columnname newdatatype
What
is a live lock?
A
live lock is one, where a request for an exclusive lock is repeatedly denied
because a series of overlapping shared locks keeps interfering. SQL Server
detects the situation after four denials and refuses further shared locks. A
live lock also occurs when read transactions monopolize a table or page,
forcing a write transaction to wait indefinitely.
What
are Checkpoint In SQL Server ?
When
we done operation on SQL SERVER that is not commited directly to the
database.All operation must be logged in to Transaction Log files after that
they should be done on to the main database.CheckPoint are the point which
alert Sql Server to save all the data to main database if no check point is
there then log files get full we can use Checkpoint command to commit all data
in the SQL SERVER.When we stop the SQL Server it will take long time because
Checkpoint is also fired.
What
is an execution plan? How would you view the execution
plan?
An
execution plan is basically a road map that graphically or textually shows the
data retrieval methods chosen by the SQL Server query optimizer for a stored
procedure or ad-hoc query and is a very useful tool for a developer to
understand the performance characteristics of a query or stored procedure
since the plan is the one that SQL Server will place in its cache and use
to execute the stored procedure or query. From within Query Analyzer is an
option called "Show Execution Plan" (located on the Query
drop-down menu). If this option is turned on it will display query execution
plan in separate window when query is ran again.
What
is an index? What are the types of indexes? How many clustered indexes can be
created on a table? I create a separate index on each column of a table. what
are the advantages and disadvantages of this approach?
Indexes
in SQL Server are similar to the indexes in books. They help SQL Server
retrieve the data quicker.
· Indexes are of two types.
Clustered indexes and non-clustered indexes. When you create a clustered index
on a table, all the rows in the table are stored in the order of the clustered
index key. So, there can be only one clustered index per table. Non-clustered
indexes have their own storage separate from the table data storage.
Non-clustered indexes are stored as B-tree structures (so do clustered
indexes), with the leaf level nodes having the index key and it’s row locater.
The row located could be the RID or the Clustered index key, depending up on
the absence or presence of clustered index on the table.
If
you create an index on each column of a table, it improves the query
performance, as the query optimizer can choose from all the existing indexes to
come up with an efficient execution plan. At the same time, data modification
operations (such as INSERT, UPDATE, DELETE) will become slow, as every time
data changes in the table, all the indexes need to be updated. Another
disadvantage is that, indexes need disk space, the more indexes you have, more
disk space is used.
Explain
different isolation levels
An
isolation level determines the degree of isolation of data between concurrent
transactions. The default SQL Server isolation level is Read Committed. Here
are the other isolation levels (in the ascending order of isolation): Read
Uncommitted, Read Committed, Repeatable Read, Serializable. See SQL Server
books online for an explanation of the isolation levels. Be sure to read about
SET TRANSACTION ISOLATION LEVEL, which lets you customize the isolation level
at the connection level.
What
is a transaction and what are ACID properties?
A
transaction is a logical unit of work in which, all the steps must be performed
or none. ACID stands for Atomicity, Consistency, Isolation, Durability. These
are the properties of a transaction. For more information and explanation of
these properties, see SQL Server books online or any RDBMS fundamentals text
book.
What’s
the difference between a primary key and a unique key?
Both
primary key and unique enforce uniqueness of the column on which they are
defined. But by default primary key creates a clustered index on the column,
where are unique creates a non-clustered index by default. Another major
difference is that, primary key does not allow NULLs, but unique key allows one
NULL only.
Difference
between Stored Procedure and Trigger?
- we can call stored procedure explicitly.
- but trigger is automatically invoked when the action
defined in trigger is done.
ex: create trigger after Insert on - this trigger invoked after we insert something on that
table.
- Stored procedure can’t be inactive but trigger can be
Inactive.
- Triggers are used to initiate a particular activity
after fulfilling certain condition.It need to define and can be enable and
disable according to need.
What is Service Broker
Its
a message queuing technology in SQL to helps developer to develop fully
ditributed applications.Its helps to send asynchronous, transactional
message.Its also helps to send message to another database.
What
is SQL Profiler
SQL
Profiler is a graphical tool thats helps administrator to capture events in
instance of Microsoft Sql Server. We can get all the events that done on file
or on SQL Table. We can filter the events that we need for us. We
can also get the subset of event that we need.
Which
recovery model gives a best sql server database performance ?
· Simple
Recovery Model – It allows for the fastest bulk operations
and the simplest backup-and-restore strategy.
· Bulk
Logged Recovery Model – allows recovery in case
of media failure and gives best performance using least log space for certain
bulk operations like BULK INSERT, bcp, CREATE INDEX , REBUILD INDEX etc.
No comments:
Post a Comment