Saturday, December 18, 2010

Subnet Masks and Subnetting


I haven't work very much previously with network configuration but I am looking at more and more RAC issues recently.

I have started reading up to: Pro Oracle Database 10g RAC on Linux

This is a very good book, I have seen Julian present at an Oracle SIG before, and was rather baffled by the advanced RAC issues he tackled (I was a newbie DBA at the time). Still he had lots of enthusiasm and I have since read a number of presentation online.

Anyway while reading up about I decided I needed a refresher on the background network concepts:

The "Subnet Masks and Subnetting" webpage gives a simple example of how to use a 255.255.255.128 subnet mask to a create a restricted part in a class C network (e.g. 192.168.1.0) for a small enterprise.

Next I moved on to a more detailed explanation on wikipedia, subnetwork masks:

This logical addressing structure permits the selective routing of IP packets across multiple networks via special gateway computers, called routers, to a destination host if the network prefixes of origination and destination hosts differ, or sent directly to a target host on the local network if they are the same. Routers constitute logical or physical borders between the subnets, and manage traffic between them. Each subnet is served by a designated default router... The routing prefix of an address is written in a form identical to that of the address itself. This is called the network mask, or netmask, of the address. For example, a specification of the most-significant 18 bits of an IPv4 address, 11111111.11111111.11000000.00000000, is written as 255.255.192.0.

another important background concept for CIDR notation :

192.168.0.0, netmask 255.255.0.0 is written as 192.168.0.0/16
192.168.1.0, netmask 255.255.255.0 is written as 192.168.1.0/24

this concept is clearest by looking at the full binary format:

Binary form Dot-decimal notation
IP address 11000000.10101000.00000101.10000010 192.168.5.130
Subnet mask 11111111.11111111.11111111.00000000 255.255.255.0
Network prefix 11000000.10101000.00000101.00000000 192.168.5.0
Host part 00000000.00000000.00000000.10000010 0.0.0.130

so going back to the first example, which has a restricted access server on the 2nd half of there private class C network with IP 192.168.1.131, netmask 255.255.255.128 is written as 192.168.1.3/25

Binary form Dot-decimal notation
IP address 11000000.10101000.00000001.10000011 192.168.1.3
Subnet mask 11111111.11111111.11111111.10000000 255.255.255.128
Network prefix 11000000.10101000.00000101.10000000 192.168.1.1
Host part 00000000.00000000.00000000.00000011 0.0.0.3







Friday, November 26, 2010

Perl and Oracle

This page (http://www.orafaq.com/wiki/Perl) shows all the basics of setting up a perl script connection to an Oracle database can making basic calls...

PHP Oracle FAQ - Oracle Wiki

PHP Oracle FAQ - Oracle Wiki

A very good page showing how to work with PHP and Oracle.

I stumbled onto this page as I was just looking for a sample/simple stored procedure to borrow:

create procedure proc1(p1 IN number, p2 OUT number) as

begin

p2 := p1 + 10;

end;

|MG| Win7codecs 2.6.9 Download

|MG| Win7codecs 2.6.9 Download

There is something mysterious about codecs ... this one comes highly recommended :)

ORACLE-BASE - Recompiling Invalid Schema Objects

ORACLE-BASE - Recompiling Invalid Schema Objects

this is a good background summary page... the commands I like to keep at my fingertips are:

spool pre-compile-errors.lst

col owner form a15

col object_name a60

set line 100

select OWNER, object_name, object_type, status from dba_objects where status <> 'VALID';


spool utlrp.lst

@?/rdbms/admin/utlrp


spool post-compile-errors.lst

col owner form a15

col object_name form a30

set line 100

select OWNER, object_name, object_type, status from dba_objects where status <> 'VALID';

expdp/impdp, remap_schema and Oracle Wiki

Data Pump Export (expdp) and Data Pump Import(impdp) - Oracle Wiki

The Oracle wiki is great - a clear and concise repository of examples of standard DBA commands... I have been using remap_schema with impdp today. This wasn't on the page but all the basics of expdp and impdp were.

Saturday, June 12, 2010

Amsterdam foam - Ari Marcopoulo

Amsterdam is quite incredible, although it feels quite compact and friendly, you can easily walk across the city following beautiful canal paths and charming little streets.

However Amsterdam has a huge collection of museums, galleries, theatres and lots of charming buildings.

Foam is housed in a beautiful old canal mansion on Keizergracht, but unlike the "van Loon", on the opposite side of the canal, the inside of Foam is total modern with steel tubing and cobolt blue glass. The content of the gallery is very modern too, starting with Ari Marcopoulos who's work captures his interesting and colourful way of life, friends and family, plus the odd celebrity (e.g. Robert Mapplethorpe looking rather elegant):

Ari Marcopoulos (b. 1957) is an Amsterdam-born photographer and filmmaker, living and working in New York and California[1]. As a photographer, film artist and adventurist, Marcopoulos, who began his career in New York City assisting Andy Warhol, transplants himself into the intimate lives of people living on the edge. Artists, snowboarders, musicians and skateboarders have been both muses and commercial subject-matter throughout his quarter century career as a photographer.



Saturday, April 10, 2010

Carl Rosa Opera: The Pirates of Penzance


Saw a fantastic production of The Pirates of Penzance.

I like Musical and Gilbert and Sullivan is great fun - I know this has been out of fashion for some time but maybe it's on its way back!?

This production was fantastic, the costumes, the make-up, great comic timing, the orchestra and most of all the singing!

I think I first saw Gilbert and Sullivan aged 15, as an amateur production done at the local all girls private school (my mother taught physics their). I remember being really impressed - I think they teamed up with local boys private school. This was elite schooling at it best, teenagers doing something quite remarkable.

Today's production was cracking again - I was really impressed with the Carl Rosa Opera company! Mabel (lead soprano) trilled beautifully, a soaring wonderful voice. Samuel was sung by a well-rounded and deeply comfortable voice.

This is sung nearly perfectly by a very talented ensemble, complemented by some excellent individual performers, including two members of the original cast of Phantom of the Opera. Everyone sang well with brilliantly clear diction too, something so very necessary in getting across the full humour and cleverness of the lyrics. Rosie Ashe as pirate wench Ruth was superb, dexterously handling her exposition-heavy lyrics yet still hitting all the right comedic notes; Barry Clark’s Major General and Bruce Graham’s Police Sergeant were both nicely bumptious and Katy Batho impressed with a piercingly clear voice, hitting those top notes with a beautiful sound.

Sunday, April 4, 2010

Music Hall - a most capacious form of performance


The following usage of capacious had me reaching for my dictionary:


It [Music Hall] was a most capacious form of performance - people would come up and perform a turn... acting, comedy, song...


I like the idea of free space it conveys!


It also makes me think of one favourite books - Tipping The Velvet by Sarah Waters. This is a wonderful tale of closeted Victorian society. I love the lesbian and gay characters, it is shocking in parts and deeply romantic too.


capacious |kəˈpā sh əs|

adjective

having a lot of space inside; roomy : she rummaged in her capacious handbag.

DERIVATIVES

capaciously |kəˈpeɪʃəsli| adverb

capaciousness |kəˈpeɪʃəsnəs| noun

ORIGIN early 17th cent.: from Latin capax, capac- ‘capable’ + -ious .


Another great tla film: Latter Days

This is a truly amazing gay love story. 100% drama, 100% romantic and 100% gay and so so sweet.


Not only is this a wonderful tail of true love with a very well paced plot but it has a serious side.. it is easier to forget the insanity and sinister side of religion.


I'm not sure why gay and lesbians are attract to spiritual movements? However I will be staying clear of the Mormons:


Having grown up a Mormon and grappled with the church's bigotry towards Blacks (they were not allowed to hold the church's priesthood when I was a member) -- I wasn't aware of the organizations policy of excommunicating gay men and women until after I left the church in 1966 -- (I was 20.) I was stunned when I learned that friends who were gay were excommunicated even after serving on missions. LATTER DAYS exposes the Mormon's persecution of gay members. The film is LONG overdue. It does an excellent job of showing how the two lead males come to terms with one another, while managing to grow up and develop more fully as individuals. LATTER DAYS has great heart, wonderful original music and an added touch of class from Jacqueline Bisset. The film brilliantly tells the story of an individual who leaves behind the confines of organized religion and reclaims his very soul.


62 out of 75 people found the following review useful:
Heartwarming Story; Long Overdue, 22 November 2004


http://www.imdb.com/title/tt0345551/usercomments




Friday, April 2, 2010

Demotic Street Language - The Telegraph on the Money?


I stumbled across the following blog post, and while I rarely agree with The Telegraph's view on the world (rather to conservative/establishment-friendly for my taste), this "Telegraph blog post" makes a very interesting point/parallel:

Call me old-fashioned but should the Leader of Her Majesty’s Opposition in the run-up to an election (or at any other time for that matter) say that people are “gagging for change”? As we all know only too well, Dave has had the advantage of one of the finest educations money can buy. Is it too much to expect that somewhere along the way he may have acquired a vocabulary that would allow him to make a trenchant political point without reaching into the demotic depths?
http://blogs.telegraph.co.uk/news/davidhughes/100032397/demotic-dave-cameron-should-mind-his-language-and-remember-kinnock/

I like his usage of the term demotic - 100% correct but a very old fashioned formal term for Street Language.

I think politician should avoid try to be cool or expressing too much emotion, they will need to stay calm and focused under intense pressure, winning the general election is only the beginning not the finish line!

demoticadjectiveKnox picked up her demotic style of writing when she worked for a newspaper in Madison popular, vernacular, colloquial, idiomatic, vulgar, common;informal, everyday, slangy. antonym formal.

Monday, March 8, 2010

70-432 : Fixed server and database roles

For the 70-432 exam you must understand the difference between the server and the database within the server.


You will need to under the fixed server-level and fixed database-level plus the associated stored procedures.


I found the following very useful summary:


Fixed server roles: These are server-wide roles. Logins can be added to these roles to gain the associated administrative permissions of the role. Fixed server roles cannot be altered and new server roles cannot be created. Here are the fixed server roles and their associated permissions in SQL Server 2000:

Fixed server role

Description

sysadmin

Can perform any activity in SQL Server

serveradmin

Can set server-wide configuration options, shut down the server

setupadmin

Can manage linked servers and startup procedures

securityadmin

Can manage logins and CREATE DATABASE permissions, also read error logs and change passwords

processadmin

Can manage processes running in SQL Server

dbcreator

Can create, alter, and drop databases

diskadmin

Can manage disk files

bulkadmin

Can execute BULK INSERT statements


Here is a list of stored procedures that are helpful in managing fixed server roles:

sp_addsrvrolemember

Adds a login as a member of a fixed server role

sp_dropsrvrolemember

Removes an SQL Server login, Windows user or group from a fixed server role

sp_helpsrvrole

Returns a list of the fixed server roles

sp_helpsrvrolemember

Returns information about the members of fixed server roles

sp_srvrolepermission

Returns the permissions applied to a fixed server role


Fixed database roles: Each database has a set of fixed database roles, to which database users can be added. These fixed database roles are unique within the database. While the permissions of fixed database roles cannot be altered, new database roles can be created. Here are the fixed database roles and their associated permissions in SQL Server 2000:

Fixed database role

Description

db_owner

Has all permissions in the database

db_accessadmin

Can add or remove user IDs

db_securityadmin

Can manage all permissions, object ownerships, roles and role memberships

db_ddladmin

Can issue ALL DDL, but cannot issue GRANT, REVOKE, or DENY statements

db_backupoperator

Can issue DBCC, CHECKPOINT, and BACKUP statements

db_datareader

Can select all data from any user table in the database

db_datawriter

Can modify any data in any user table in the database

db_denydatareader

Cannot select any data from any user table in the database

db_denydatawriter

Cannot modify any data in any user table in the database


Here is a list of stored procedures that are helpful in managing fixed database roles:

sp_addrole

Creates a new database role in the current database

sp_addrolemember

Adds a user to an existing database role in the current database

sp_dbfixedrolepermission

Displays permissions for each fixed database role

sp_droprole

Removes a database role from the current database

sp_helpdbfixedrole

Returns a list of fixed database roles

sp_helprole

Returns information about the roles in the current database

sp_helprolemember

Returns information about the members of a role in the current database

sp_droprolemember

Removes users from the specified role in the current database


http://vyaskn.tripod.com/sql_server_security_best_practices.htm

Another blog which also covers the above is http://articles.techrepublic.com.com/5100-10878_11-1061781.html. This article had the advantage of several screenshots show how to administer security via SQL Server Management Studio (SSMS) but I just don't like an example where you allocate db_accessadmin to guest - this is just to counter intuitive!



70-432 : Index usage (sys.dm_db_index_usage_stats)

This blog article is aimed at people preparing for 70-432 exam.


This DMV is particularly useful and represents one area where SQLServer appears to be ahead of te Oracle database engine (there is no easy to see which indexes have not been used in the last day / week / month ...)


Starting with the msdn documentation for dm_db_index_usage_stats:

sys.dm_db_index_usage_stats (Transact-SQL)


Returns counts of different types of index operations and the time each type of operation was last performed.


Column name

Data type

Description

database_id

smallint

ID of the database on which the table or view is defined.

object_id

int

ID of the table or view on which the index is defined

index_id

int

ID of the index.

user_seeks

bigint

Number of seeks by user queries.

user_scans

bigint

Number of scans by user queries.

user_lookups

bigint

Number of bookmark lookups by user queries.

user_updates

bigint

Number of updates by user queries.

last_user_seek

datetime

Time of last user seek

last_user_scan

datetime

Time of last user scan.

last_user_lookup

datetime

Time of last user lookup.

last_user_update

datetime

Time of last user update.

system_seeks

bigint

Number of seeks by system queries.

system_scans

bigint

Number of scans by system queries.

system_lookups

bigint

Number of lookups by system queries.

system_updates

bigint

Number of updates by system queries.

last_system_seek

datetime

Time of last system seek.

last_system_scan

datetime

Time of last system scan.

last_system_lookup

datetime

Time of last system lookup.

last_system_update

datetime

Time of last system update.

clear.gif Remarks

Every individual seek, scan, lookup, or update on the specified index by one query execution is counted as a use of that index and increments the corresponding counter in this view. Information is reported both for operations caused by user-submitted queries, and for operations caused by internally generated queries, such as scans for gathering statistics.

The user_updates counter indicates the level of maintenance on the index caused by insert, update, or delete operations on the underlying table or view. You can use this view to determine which indexes are used only lightly by your applications. You can also use the view to determine which indexes are incurring maintenance overhead. You may want to consider dropping indexes that incur maintenance overhead, but are not used for queries, or are only infrequently used for queries.

The counters are initialized to empty whenever the SQL Server (MSSQLSERVER) service is started. In addition, whenever a database is detached or is shut down (for example, because AUTO_CLOSE is set to ON), all rows associated with the database are removed.

When an index is used, a row is added to sys.dm_db_index_usage_stats if a row does not already exist for the index. When the row is added, its counters are initially set to zero.

http://msdn.microsoft.com/en-us/library/ms188755.aspx


Now the following is a good blog post with an example of how this works in practice and also when you should be checking index usage stats. Not only does the following provide a nice simple of example of usage of the DMV sys.dm_db_index_usage_stats but it also makes a good point about focusing your attention and efforts on defragmentating the key indexes with high usage stats (it is too easy to get side tracked by problems where you can see something is clearly wrong, but you aren't necessarily tackling the key performance problems) :


Whenever I’m discussing index maintenance, and specifically fragmentation, I always make a point of saying ‘Make sure the index is being used before doing anything about fragmentation’.

If an index isn’t being used very much, but has very low page density (lots of free space in the index pages), then it will be occupying a lot more disk space than it could do and it may be worth compacting (with a rebuild or a defrag) to get that disk space back. However, usually there’s not much point spending resources to remove any kind of fragmentation when an index isn’t being used. This is especially true of those people who rebuild all indexes every night or every week.

...


If you're interested in whether an index is being used, you can filter the output. Let's focus in on a particular table - AdventureWorks.Person.Address.


SELECT * FROM sys.dm_db_index_usage_stats

WHERE database_id = DB_ID('AdventureWorks')

and object_id = OBJECT_ID('AdventureWorks.Person.Address');

GO


You'll probably see nothing in the output, unless you've been playing around with that table. Let's force the clustered index on that table to be used, and look at the DMV output again.


SELECT * FROM AdventureWorks.Person.Address;

GO


SELECT * FROM sys.dm_db_index_usage_stats

WHERE database_id = DB_ID('AdventureWorks')

and object_id = OBJECT_ID('AdventureWorks.Person.Address');

GO


Now there's a single row, showing a scan on the clustered index. Let's do something else.


SELECT StateProvinceID FROM AdventureWorks.Person.Address

WHERE StateProvinceID > 4 AND StateProvinceId <>

GO


SELECT * FROM sys.dm_db_index_usage_stats

WHERE database_id = DB_ID('AdventureWorks')

and object_id = OBJECT_ID('AdventureWorks.Person.Address');

GO


And there's another row, showing a seek in one of the table's non-clustered indexes.


http://blogs.msdn.com/sqlserverstorageengine/archive/2007/04/20/how-can-you-tell-if-an-index-is-being-used.aspx





70-432 : Locks and Latchs (sys.dm_db_index_operational_stats)

This blog article is aimed at people preparing for 70-432 exam.


The MCTS 70-432 exams introduces some of the dynamic management views (DMVs). I like the ideas of DMVs, as a seasoned Oracle DBA I know many of the key Oracle Instance and Database views well. Once of the advantages of having a SQL view (as opposed to a GUI tool) is that he DMV query can be scheduled to run periodically and log key columns over time (very important for a DBA).


Starting with the msdn documentation for dm_db_index_operational_stats we can that it can capture leaf DML operations plus lock and latch waits:


You can use sys.dm_db_index_operational_stats to track the length of time that users must wait to read or write to a table, index, or partition, and identify the tables or indexes that are encountering significant I/O activity or hot spots.

Use the following columns to identify areas of contention.

To analyze a common access pattern to the table or index partition, use these columns:

  • leaf_insert_count
  • leaf_delete_count
  • leaf_update_count
  • leaf_ghost_count
  • range_scan_count
  • singleton_lookup_count

To identify latching and locking contention, use these columns:

  • page_latch_wait_count and page_latch_wait_in_ms
    These columns indicate whether there is latch contention on the index or heap, and the significance of the contention.
  • row_lock_count and page_lock_count
    These columns indicate how many times the Database Engine tried to acquire row and page locks.
  • row_lock_wait_in_ms and page_lock_wait_in_ms
    These columns indicate whether there is lock contention on the index or heap, and the significance of the contention.

To analyze statistics of physical I/Os on an index or heap partition

  • page_io_latch_wait_count and page_io_latch_wait_in_ms
    These columns indicate whether physical I/Os were issued to bring the index or heap pages into memory and how many I/Os were issued.

Column Remarks

The values in lob_orphan_create_count and lob_orphan_insert_count should always be equal.

The value in the columns lob_fetch_in_pages and lob_fetch_in_bytes can be greater than zero for nonclustered indexes that contain one or more LOB columns as included columns. For more information, see Index with Included Columns. Similarly, the value in the columns row_overflow_fetch_in_pages and row_overflow_fetch_in_bytes can be greater than 0 for nonclustered indexes if the index contains columns that can be pushed off-row. For more information, see Row-Overflow Data Exceeding 8 KB.

How the Counters Are Reset

The data returned by sys.dm_db_index_operational_stats exists only as long as the metadata cache object that represents the heap or index is available. This data is neither persistent nor transactionally consistent. This means you cannot use these counters to determine whether an index has been used or not, or when the index was last used. For information about this, see sys.dm_db_index_usage_stats.

The values for each column are set to zero whenever the metadata for the heap or index is brought into the metadata cache and statistics are accumulated until the cache object is removed from the metadata cache. Therefore, an active heap or index will likely always have its metadata in the cache, and the cumulative counts may reflect activity since the instance of SQL Server was last started. The metadata for a less active heap or index will move in and out of the cache as it is used. As a result, it may or may not have values available. Dropping an index will cause the corresponding statistics to be removed from memory and no longer be reported by the function. Other DDL operations against the index may cause the value of the statistics to be reset to zero.

http://msdn.microsoft.com/en-us/library/ms174281(SQL.90).aspx

Next what is the difference between a lock and a latch? A lock (aka "enqueue") is a request for exclusive or shared owner of some data - a row,page or extent (a set of eight contiguous pages makes up an extent). Now for Oracle a latch is lock on an internal data structure in the SGA:


What is the difference between locks, latches, enqueues and semaphores?

A latch is an internal Oracle mechanism used to protect data structures in the SGA from simultaneous access. Atomic hardware instructions like TEST-AND-SET are used to implement latches. Latches are more restrictive than locks in that they are always exclusive. Latches are never queued, but will spin or sleep until they obtain a resource, or time out.

Enqueues and locks are different names for the same thing. Both support queuing and concurrency. They are queued and serviced in a first-in-first-out (FIFO) order.

Semaphores are an operating system facility used to control waiting. Semaphores are controlled by the following Unix parameters: semmni, semmns and semmsl. Typical settings are:

  • semmns = sum of the "processes" parameter for each instance (see init.ora for each instance)
  • semmni = number of instances running simultaneously;
  • semmsl = semmns

http://www.orafaq.com/wiki/Oracle_database_Internals_FAQ#What_is_the_difference_between_locks.2C_latches.2C_enqueues_and_semaphores.3F

while for SQLServer a latch is often described as a "lightweight lock" and again is about protect internal database engine structures like buffers:


Tips for Using SQL Server Performance Monitor Counters

By : Brad McGehee

Aug 24, 2005



A latch is in essence a "lightweight lock". From a technical perspective, a latch is a lightweight, short-term synchronization object (for those who like technical jargon). A latch acts like a lock, in that its purpose is to prevent data from changing unexpectedly. For example, when a row of data is being moved from the buffer to the SQL Server storage engine, a latch is used by SQL Server during this move (which is very quick indeed) to prevent the data in the row from being changed during this very short time period. This not only applies to rows of data, but to index information as well, as it is retrieved by SQL Server.

Just like a lock, a latch can prevent SQL Server from accessing rows in a database, which can hurt performance. Because of this, you want to minimize latch time.

SQL Server provides three different ways to measure latch activity. They include:

  • Average Latch Wait Time (ms): The wait time (in milliseconds) for latch requests that have to wait. Note here that this is a measurement for only those latches whose requests had to wait. In many cases, there is no wait. So keep in mind that this figure only applies for those latches that had to wait, not all latches.
  • Latch Waits/sec: This is the number of latch requests that could not be granted immediately. In other words, these are the amount of latches, in a one second period, that had to wait. So these are the latches measured by Average Latch Wait Time (ms).
  • Total Latch Wait Time (ms): This is the total latch wait time (in milliseconds) for latch requests in the last second. In essence, this is the two above numbers multiplied appropriately for the most recent second.

When reading these figures, be sure you have read the scale on Performance Monitor correctly. The scale can change from counter to counter, and this is can be confusing if you don't compare apples to apples.

Based on my experience, the Average Latch Wait Time (ms) counter will remain fairly constant over time, while you may see huge fluctuations in the other two counters, depending on what SQL Server is doing.

http://www.sql-server-performance.com/tips/sql_server_performance_monitor_coutners_p3.aspx


To finish the following query looks useful, a good example of how to use the sys.dm_db_index_operational_stats view:


Tables where the most latch contention is occurring

select object_schema_name(ddios.object_id) + '.' + object_name(ddios.object_id) as objectName,
indexes.name, case when is_unique = 1 then 'UNIQUE ' else '' end + indexes.type_desc as index_type,
page_latch_wait_count , page_io_latch_wait_count
from sys.dm_db_index_operational_stats(db_id(),null,null,null) as ddios
join sys.indexes
on indexes.object_id = ddios.object_id
and indexes.index_id = ddios.index_id
order by page_latch_wait_count + page_io_latch_wait_count desc

http://sqlblog.com/blogs/louis_davidson/archive/2007/08/26/sys-dm-db-index-operational-stats.aspx


Sunday, March 7, 2010

70-432 : Lock Events, SQL Server Profiler & Deadlock examples


This blog article is aimed at people preparing for 70-432 exam and is an overview of lock event category with sample examples of how and when to use it


The 70-432 exams requires you are comfortable with the terminology around "lock events", a good place to start is simply referring to msdn documentation:


Locks Event Category


Use the event classes in the Locks event category to monitor locking activity in an instance of the Microsoft SQL Server Database Engine. These event classes can help you investigate locking problems caused by multiple users reading and modifying data concurrently.

Because the Database Engine often processes many locks, capturing the Locks event classes during a trace can incur significant overhead and result in large trace files or tables.

clear.gif In This Section


Topic

Description

Deadlock Graph Event Class

Provides an XML description of a deadlock.

Lock:Acquired Event Class

Indicates that a lock has been acquired on a resource, such as a row in a table.

Lock:Cancel Event Class

Tracks requests for locks that were canceled before the lock was acquired (for example, to prevent a deadlock).

Lock:Deadlock Chain Event Class

Monitors when deadlock conditions occur and which objects are involved.

Lock:Deadlock Event Class

Tracks when a transaction has requested a lock on a resource already locked by another transaction, resulting in a deadlock.

Lock:Escalation Event Class

Indicates that a finer-grained lock has been converted to a coarser-grained lock.

Lock:Released Event Class

Tracks when a lock is released.

Lock:Timeout (timeout > 0) Event Class

Tracks when lock requests cannot be completed because another transaction has a blocking lock on the requested resource. This event occurs only in situations where the lock time-out value is greater than zero.

Lock:Timeout Event Class


http://msdn.microsoft.com/en-us/library/ms177493.aspx

Next I want to mention a very interesting presentation I went to last year, I did blog about this last year:



tech: Deadlocks due collisions in "SQL Server's hashing algorithm" (June 2009 SQL Server UserGroup)


At the SQLServer usergroup there was a brief overview of a very technical problem - there appears to be a bug in SQLServer's "hashing algorithm" which under certain circumstances is triggering "deadlocks" to occur.


James' detailed blog:


http://blogs.conchango.com/jamesrowlandjones/archive/2009/05/28/the-curious-case-of-the-dubious-deadlock-and-the-not-so-logical-lock.aspx?CommentPosted=true#commentmessage


gives plenty of technical details behind this intriguing problem, and also the extensive collaborative investigation it took to unearth and document this bug.


I have gone through this great blog piece, highlighting what I see as the key concepts and steps. I have add some further references to key background concepts. This shows the process I went through to understand this issue, hopefully you find my comments a helpful introduction into understand this complex topics.


http://davetravelogue.blogspot.com/2009/06/tech-deadlocks-due-collisions-in-sql.html


This is a very interesting bug (complex and very rare) in SQL Server, the presentation at the London SQL Server UserGroup (www.sqlserverfaq.com) was very good and afterwards, I went though the details of the Conchango / EMC blog post go through the article. In my blog post ()


Don't want worry if you are struggling to follow this - this is very advanced/senior DBA material. However I would draw you're attention to the deadlock graph event, which can represented graphically or in XML format (see graphic at top of this page). This sort of information is similar to the data held within the Oracle dba_blockers view.


For a simpler / clean example of deadlocks Peter Wardy has written a good blog article which is easy to understand and recreate:


Creating a Deadlock

Below are the steps to generate a deadlock so that the behaviour of a deadlock can be illustrated:

-- 1) Create Objects for Deadlock Example
USE TEMPDB

CREATE TABLE dbo.foo (col1 INT)
INSERT dbo.foo SELECT 1

CREATE TABLE dbo.bar (col1 INT)
INSERT dbo.bar SELECT 1

-- 2) Run in first connection
BEGIN TRAN
UPDATE tempdb.dbo.foo SET col1 = 1

-- 3) Run in second connection
BEGIN TRAN
UPDATE tempdb.dbo.bar SET col1 = 1
UPDATE tempdb.dbo.foo SET col1 = 1

-- 4) Run in first connection
UPDATE tempdb.dbo.bar SET col1 = 1

Connection two will be chosen as the deadlock victim

ie.

Server: Msg 1205, Level 13, State 50, Line 1
Transaction (Process ID 56) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

Published Monday, December 12, 2005 11:00 AM by peter@wardyit.com


http://wardyit.com/blog//blog/archive/2005/12/12/65.aspx


Lastly I also found a very well written blog post by Brad McGehee


Brad is an Industry speaker, writer, and consultant on Microsoft SQL Server, specializing in SQL Server performance tuning, clustering, and high availability. He is the founder of www.SQL-Server-Performance.Com, and oversaw its growth to 350,000 visits each month. He is now Director of DBA Education at Red Gate Software. Brad is a frequent speaker at SQL PASS, SQL Connections, SQL Server user groups, and other industry seminars, and he is the author or co-author of more than 12 technical books and over 100 published articles. He spends what time he has left with his family in Hawaii. He is a Microsoft SQL Server MVP, MCSE+I, MCSD, MCT See also ..


The whole article is well worth reading but the following section is probably particularly relevant for the 70-432 exam:

To capture a SQL Server trace using SQL Server Profiler, you need to create a trace, which includes several basic steps:

1) You first need to select the events you want to collect. Events are an occurrence of some activity inside SQL Server that Profiler can track, such as a deadlock or the execution of a Transact-SQL statement.

2) Once you have selected the events you want to capture, the next step is to select which data columns you want to return. Each event has multiple data columns that can return data about the event. To minimize the impact of running Profiler against a production server, it is always a good idea to minimize the number of data columns returned.

3) Because most SQL Servers have many different users running many different applications hitting many different databases on the same SQL Server instance, filters can be added to a trace to reduce the amount of trace data returned. For example, if you are only interested in finding deadlocks in one particular database, you can set a filter so that only deadlock events from that database are returned.

4) If you like, you can choose to order the data columns you are returning, and you can even group or aggregate events to make it easier to analyze your trace results. While I do this for many of my traces, I usually don’t bother with this step when tracking down deadlock events.

5) Once you have created the trace using the above steps, you are ready to run it. If you are using the SQL Server Profiler GUI, trace results are displayed in the GUI as they are captured. In addition, you can save the events you collect for later analysis.

Now that you know the basics, let’s begin creating a trace that will enable us to collect and analyze deadlocks.

Selecting Events

While there is only one event required to diagnose most deadlock problems, I like to include additional context events in my trace so that I have a better understanding of what is happening with the code. Context events are events that help put other events into perspective. The events I suggest you collect include:

· Deadlock graph

· Lock: Deadlock

· Lock: Deadlock Chain

· RPC:Completed

· SP:StmtCompleted

· SQL:BatchCompleted

· SQL:BatchStarting


http://www.simple-talk.com/sql/learn-sql-server/how-to-track-down-deadlocks-using-sql-server-2005-profiler/