About me: My name is Maria Zakourdaev. I have more than 10 years experience with SQL Server (starting from SQL Server 6.5). The last five years have been spent mostly on benchmarking different SQL Server features and flows, like data import, indexes impact on DML flows, star transformations in RDBMS, Hierarchic queries and custom OLAP-like aggregations. I was a speaker in the Microsoft Teched (Israel) on the SQL Server track. I am also an active member of the Israel SQL Server Group.

Tuesday, June 8, 2010

WITH (NOLOCK) still places locks !

Did you know, that when you use READ UNCOMMITTED isolation level or WITH (NOLOCK) hint inside the query, it is still places Sch-S (schema stability) locks during compilation and execution and can be blocked by any concurrent trancastion that that holds a Sch-M (schema modification) lock on the table!
So, when using READ UNCOMMITTTED isolation level, keep in mind that READUNCOMMITTED and NOLOCK hints apply only to the data locks and there is nothing you can do with Sch-S lock.

Labels: , , , , , , , , , , , ,

Monday, June 7, 2010

Back to the future: SQL Profiler Trace Replay

Are you familiar with Trace Replay feature SQL Profiler? It's not really popular but actually can do a lot for you.
Replay is the ability to save a trace and replay it later. This functionality lets you reproduce activity captured in a trace. When you create or edit a trace, you can save the trace to replay it later.
Replaying trace is useful when
- you need to troubleshoot production issues then you can run recorded trace against fixed application to make sure all bugs were fixed.
- you need to simulate production load on QA/dev environment for stress testing
- test new code that is written on development server by simulating real DML load.
The process of recording and replaying trace is really easy.
- Use preconfigured replay template (TSQL_Replay) because, if you do not capture all required data, SQL Server Profiler will not replay the trace (!)
- Save the trace using any format: table or trace file. If you want to use rollover files with limited size take into consideration the following:
* File name should not contain symbol '_', otherwise Profiler will not load all files when you open the files for replay
* Keep as less files as you can because I haven't found option to tell the profiler " Load all rollover files". It will ask you file after the file if you want to load next file and you will need to press ok.
- Open trace file on target server. If menu Replay items are disabled, this means that file is not completely loaded. Wait with patience.
- When you see that Replay Menu items got enabled, choose Start and here you go.
- Database matching can be done on databaseid but, in most cases, those are different and profiler will match using databasename

Make sure all logins, users , permissions etc. must be the same on source and target servers

Good luck.

Labels: , , , , , , , , , , ,

Tuesday, June 1, 2010

See all locks that were issued by your query

If you ever wondedered what king of locks your selct query ever issues and for how long, run it in QA environment with isolation level Repeatable Read, which holds all locks you select issues till the end of transaction. Default isolation level Read Committed keeps query locks only till select query has finished running so in most cases you are not able to catch them in sp_lock if your select works fast enough.

So, add"SET TRANSACTION ISOLATION LEVEL REPEATABLE READ" inside transaction, then open another window and check out EXEC sp_lock and in some cases you will be surprized how many locks sql server places and removes during simple queries.

Labels: , , , , , , ,