Thursday, July 16, 2009

Troubleshoot Blocking

Troubleshooting Blocking 

What is blocking? Blocking occurs when one connection to SQL Server locks one or more records, and a second connection to SQL Server requires a conflicting lock type on the record or records locked by the first connection. This causes the second connection to wait until the first connection releases its locks. By default, a connection will wait an unlimited amount of time for the blocking lock to go away. Blocking is not the same thing as a deadlock. 

How to avoid blocking

  1. Keep transaction as short as possible

  2. Use locking hints

  3. Follow best practices for Database Maintenance regularly

  4. Improve Query performance so it executes in seconds


Note:

By default, blocking locks do not time out.You can set blocking timeout using below SET statement.

SET LOCK_TIMEOUT timeoutPeriod

 How to find blocking

  1. SP_WHO2 and find the blkby column from output for blocking details

  2. Use SP_Lock to find out lock acquired by blocking query

  3. Select * from sysprocesses where blocked <>0

  4. You can get the blocking SQL Statement using DBCC INPUTBUFFER(SPID)

  5. SP_WHO2 SPID

kernel udopen: operating system error 2 in SQL Server 6.5

One of my blog reader encountered below error, I have given him the below solution which has resolved this issue.

Error: (SQL Server 6.5)

2009/07/15 19:42:26.89 spid1    Activating disk 'ITEMPRICE_DATA1'

2009/07/15 19:42:26.89 kernel   udopen: operating system error 2(The system cannot find the file specified.) during the creation/opening of physical device F:\DATA\ITEMPRICE_DATA1.DAT

2009/07/15 19:42:26.89 kernel   udactivate (primary): failed to open device F:\DATA\ITEMPRICE_DATA1.DAT for vdn 42

2009/07/15 19:42:26.89 spid1    Activating disk 'ITEMPRICE_DATA2'

2009/07/15 19:42:26.89 kernel   udopen: operating system error 2(The system cannot find the file specified.) during the creation/opening of physical device F:\DATA\ITEMPRICE_DATA2.DAT

2009/07/15 19:42:26.89 kernel   udactivate (primary): failed to open device F:\DATA\ITEMPRICE_DATA2.DAT for vdn 43

Solution

1) Rebuilding System Databases by running setup again from the SQL Server Install CD and do a rebuild master.

2) If it's a 6.5 box, you can go to the console and view the sa password in the registry. run regedit from the console:
HKEY_CURRENT_USER
Software
Microsoft
MSSQLServer
SQLEW
Registered
SQL 6.5
ServerName

3) Check for the directory whether F:\ has Data directory or not

4) Check if the drive was corrupted

4) Check the SQL Server Service running on which account, check the permission of that account

5) http://support.microsoft.com/kb/180500

6) http://support.microsoft.com/kb/236989

7) Go through BOL on SQL Server 6.5 startup parameters

8) Try to login using command prompt and execute Sp_Resetstatus, DBCC CheckDB etc

sqlservr -c -f -T3608 -T4022

9) Check all the databases status from sysdatabases

 

How to find database restore history from MSDB?

You can use the below query to get the particular database restore history. 
  



SELECT TOP 10 *

FROM restorehistory WITH (nolock)WHERE (destination_database_name = 'Database Name')ORDER BY restore_date DESC

All Databases

SELECT TOP 10 * FROM restorehistory WITH (nolock)ORDER BY restore_date DESC

How to improve communication skills & Support Service

As DBA comes under the support industry, it is extremely important for DBAs to improve communication skills. As we are working production servers and backend, it is extremely important for us to communicate properly. 

  • Please take care of the below points to improve your written communication skill. 

  •  When you reply all, make sure to move names from TO to CC and CC to TO list according to whom you are writing emails



  • Be concise and to the point. Use simple English.

  • Avoid the use of slang words/abbreviations

  • Use proper spelling, grammar & punctuation

  • Do not write in CAPITALS. CAPITALS indicate that we are shouting.

  • Numbers should be expressed as words when the number is less than 10 or is used to start a sentence (example: Ten years ago, my brother and I…). The number 10, or anything greater than 10, should be expressed as a figure (example: My brother has 13 Matchbox cars.)

  • You should just mention the name instead of Hi Jugal.As we are working as support team, use `We` instead of `I`. For example; Jugal instead of Hi Jugal

  • You should change the text in the Subject line during reply emails if it is not relevant.

  • If you are asking for something in the email, you should ask them first and then mention why you need that.



  • Don’t write open ended email to user

  • If you are not sure for any support request, please ask end user for more inputs on particular request.

  • Inform your team regarding any conversation with client through chat or voice call

  • Update your work log every day

  • If you are not sure for any resolution steps, discuss it with your team and then provide it to client

  • When sending large attachments, always "zip" or compress them before sending.

  • Always include subject in your mail body.

  • Don’t send email to any account using your client account

  • Discuss as much as possible with your client

  • Grab as much as possible knowledge of the client process/environment

Thursday, June 25, 2009

How to improve TempDB performance?

How to improve TempDB performance? 

1) TempDB file size and physical placement on harddrive can affect the performance of a system

2) Set the tempdb recovery model to simple 

3) Do the capacity planning of the TempDB database and pre allocate the appropriate size to MDF files, which will improve performance for allocating size 

4) Put TempDB on fast I/O System 

5) Create as many tempdb data files by considering the number of cpu 

6) make all the tempdb data file size same

Troubleshoot Suspect Database Issue

Problem

How to troubleshoot suspect database problem? How to bring it back online? What are the do you need to perform once the database is online?



Solution

Step 1: Bring the database online using below script

USE Master

GO

 

-- Determine the original database status

SELECT [Name], DBID, Status

FROM master.dbo.sysdatabases

GO

 

-- Enable system changes

sp_configure 'allow updates',1

GO

RECONFIGURE WITH OVERRIDE

GO

 

-- Update the database status

UPDATE master.dbo.sysdatabases

SET Status = 24

WHERE [Name] = 'SuspectedDatabaseName'

GO

 

-- Disable system changes

sp_configure 'allow updates',0

GO

RECONFIGURE WITH OVERRIDE

GO

 

-- Determine the final database status

SELECT [Name], DBID, Status

FROM master.dbo.sysdatabases

GO

Step 2: Check for database corruption. This is very important step please execute it.

  • DBCC CHECKDB - Validate the overall database integrity

  • DBCC CHECKCATALOG - Validate the system catalog integrity

  • DBCC CHECKTABLE - Validate the integrity for a single table


Step 3: To resolve the corruption issue, please execute below commands

  • Drop and Recreate Index(es)

  • Move the recoverable data from an existing table to a new table

  • Update statistics

  • DBCC UPDATEUSAGE

  • sp_recompile


Step 4: Repeat Step 2 to validate all the corruption occurred

Tuesday, June 23, 2009

DRBD, Heartbeat and MySQL

The easiest solution to implement clustering in MySQL is DRBD and Heartbeat.

DRBD: The Distributed Replicated Block Device (DRBD) is a software-based, shared-nothing, replicated storage solution mirroring the content of block devices (hard disks, partitions, logical volumes etc.) between servers.

DRBD mirrors data

  • In real time. Replication occurs continuously, while applications modify the data on the device.

  • Transparently. The applications that store their data on the mirrored device are oblivious of the fact that the data is in fact stored on several computers.

  • Synchronously or asynchronously. With synchronous mirroring, a writing application is notified of write completion only after the write has been carried out on both computer systems. Asynchronous mirroring means the writing application is notified of write completion when the write has completed locally, but before the write has propagated to the peer system


You can download DRDB from below site

http://www.drbd.org/download/packages/

Memcached & MySQL

memcached (pronunciation: mem-cash-dee.) is a general-purpose distributed memory caching system that was originally developed by Danga Interactive for LiveJournal, but is now used by many other sites. It is often used to speed up dynamic database-driven websites by caching data and objects in memory to reduce the number of times an external data source (such as a database or API) must be read. Memcached is distributed under a permissive free software license. Memcached lacks authentication and security features, meaning it should only be used on servers with a firewall set up appropriately. By default, memcached uses the port 11211. Among other technologies, it uses libevent. Memcached's APIs provides a giant hash table distributed across multiple machines. When the table is full, subsequent inserts cause older data to be purged in least recently used (LRU) order. Applications using memcached typically layer memcached requests and additions into core before falling back on a slower backing store, such as a database. You can download memcached API from http://www.danga.com/memcached/