T-SQLTuesday #42: The New Adventure!

It’s time for T-SQL Tuesday the forty-second, Wendy Pastrick asked that we talk

T-SQL Tuesday!

T-SQL Tuesday!

about our experiences with change in our work lives. I’d like to share some exciting news about myself and the new adventure I am taking.  Earlier this month I started a new journey with Dell as an Database Administrator Sr. Advisor. I also am happy to share why I decided to go down this path. Some of the reasons include new technology, career planning, exciting challenges with a great team.

New Technology!

I love being around new technology. Personally, I like to find new innovative technologies that can be used to improve business processes while save money and time. During the interview process I learned that the SQL team at Dell fits the bill. In fact, I heard about so many great projects including some under NDA all I can say is I feel like a kid in the candy store!

Career Planning!

Not every employeer makes it a priority to have you map your aspirations and goals. Very few companies help you do a fit gap assessment and tries to find business opportunities to fill them.  Dell goes out of its ways to help you with your career planning. This might be the greatest perk of the job.

Exciting Challenges with  a Great Team!

Not many people get excited about the opportunity to work with chained transactional replication where a subscriber is a publisher in another publication but I do.  That’s right, I love to be challenged and I am excited to work with some talented people. I am going to get to do both in my new role. I will be working with multiple DBA’s who have been working with SQL Server for over ten years. I look forward to sharing my knowledge and soaking up everything I can from them.

Benchmark SQL Server Disk Latency

Typically, I am a big advocate of performance monitor but one place I commonly see performance monitor being misused is with benchmarking disk counters for SQL Server.  Typically, you will see people applying best practices like having dedicated spindles for transactional log files and dedicated spindles for data files.  With that said, multiple database files and/or transactional log files are collocated on the same logical or physical drive(s). Therefore, when your looking a disk latency like reads per second or writes per second it can almost be impossible to determine which data file(s) is causing the disk latency. You just know which physical or logical drive has latency issues.

Meet THE  SYS.DM_IO_VIRTUAL_FILE_STATS DMV

Starting with SQL Server 2005 DBA’s were granted access to the sys.dm_io_virtual_file_stats dynamic management view. This DMV gives you access into how many physical I/O operations occurred, how much latency has occurred,  how much data was written and more.  The secret key is that this is for each independent database file and that this data is collected since the last time the instance started so we need to keep that in mind. Ideally, we would want to capture this data, wait for a period of time, capture this data again and then compare the results. This objective is completed in the code shown below. For this example we will wait five minutes between captures.

DECLARE @WaitTimeSec int
SET @WaitTimeSec = 300 -- seconds between samples.

/* If temp tables exist drop them. */
IF OBJECT_ID('tempdb..#IOStallSnapshot') IS NOT NULL
BEGIN
DROP TABLE #IOStallSnapshot
END

IF OBJECT_ID('tempdb..#IOStallResult') IS NOT NULL
BEGIN
DROP TABLE #IOStallResult
END

/* Create temp tables for capture baseline */
CREATE TABLE #IOStallSnapshot(
CaptureDate datetime,
read_per_ms float,
write_per_ms float,
num_of_bytes_written bigint,
num_of_reads bigint,
num_of_writes bigint,
database_id int,
file_id int
)

CREATE TABLE #IOStallResult(
CaptureDate datetime,
read_per_ms float,
write_per_ms float,
num_of_bytes_written bigint,
num_of_reads bigint,
num_of_writes bigint,
database_id int,
file_id int
)

/* Get baseline snapshot of stalls */
INSERT INTO #IOStallSnapshot (CaptureDate,
read_per_ms,
write_per_ms,
num_of_bytes_written,
num_of_reads,
num_of_writes,
database_id,
[file_id])
SELECT getdate(),
a.io_stall_read_ms,
a.io_stall_write_ms,
a.num_of_bytes_written,
a.num_of_reads,
a.num_of_writes,
a.database_id,
a.file_id
FROM sys.dm_io_virtual_file_stats (NULL, NULL) a
JOIN sys.master_files b ON a.file_id = b.file_id
AND a.database_id = b.database_id

/* Wait a few minutes and get final snapshot */
WAITFOR DELAY @WaitTimeSec

INSERT INTO #IOStallResult (CaptureDate,
read_per_ms,
write_per_ms,
num_of_bytes_written,
num_of_reads,
num_of_writes,
database_id,
[file_id])
SELECT getdate(),
a.io_stall_read_ms,
a.io_stall_write_ms,
a.num_of_bytes_written,
a.num_of_reads,
a.num_of_writes,
a.database_id,
a.[file_id]
FROM sys.dm_io_virtual_file_stats (NULL, NULL) a
JOIN sys.master_files b ON a.[file_id] = b.[file_id]
AND a.database_id = b.database_id

/* Get differences between captures */
SELECT
inline.CaptureDate
,CASE WHEN inline.num_of_reads =0 THEN 0
ELSE inline.io_stall_read_ms / inline.num_of_reads END AS read_per_ms
,CASE WHEN inline.num_of_writes = 0 THEN 0
ELSE inline.io_stall_write_ms / inline.num_of_writes END AS write_per_ms
,inline.io_stall_read_ms
,inline.io_stall_write_ms
,inline.num_of_reads
,inline.num_of_writes
,inline.num_of_bytes_written
,inline.database_id
,inline.[file_id]
FROM (
SELECT r.CaptureDate
,r.read_per_ms - s.read_per_ms AS io_stall_read_ms
,r.num_of_reads - s.num_of_reads AS num_of_reads
,r.write_per_ms - s.write_per_ms AS io_stall_write_ms
,r.num_of_writes - s.num_of_writes AS num_of_writes
,r.num_of_bytes_written - s.num_of_bytes_written AS num_of_bytes_written
,r.database_id AS database_id
,r.[file_id] AS [file_id]

FROM #IOStallSnapshot s
JOIN #IOStallResult r
ON (s.database_id = r.database_id and s.[file_id] = r.[file_id])
) inline

The next few questions you might have after capturing these metrics includes how do I automate capturing these disk metrics similar to perfmon? Can I setup a parameter to be used as the normal wait period and also supply an interval for how long I would like to capture data to establish my baseline? Or better yet, can I capture data when a workload is not performing as expected and compare it to the baseline established when the workload performance was good?

The answer to theses questions is YES! Below  is the code for my  stored procedure to capture disk latency, IOPs and bytes written.

Download SQL Server Disk Latency Stored Procedure.

/*
Author: John Sterrett (http://johnsterrett.com)
NOTICE: This code is provided as-is run it at your own risk. John Sterrett assumes no responsibility
for you running this script.

GOAL: Get latency and IOPS for each data file, keep meta data in lookup table, results in another table.

PARAM:  @WaitTime - time in seconds to wait between baselines
		@Length - Amount of time to baseline, if null then don't stop

VERSION:
	1.0 - 01/03/2012 - Original release
		Includes two lookup tables for datafiles and runs
	1.1 - 02/08/2012 - Includes computed column to get IOPs per datafile.
Missing Features: If you would like something added please follow up at http://johnsterrett.com/contact
-- Code to pull and update file path as needed
*/

/* Create tables */
CREATE SCHEMA DiskLatency
Go

CREATE TABLE DiskLatency.DatabaseFiles (
[ServerName] varchar(500),
[DatabaseName] varchar(500),
[LogicalFileName] varchar(500),
[Database_ID] int,
[File_ID] int
)

CREATE CLUSTERED INDEX idx_DiskLatency_DBID_FILE_ID ON DiskLatency.DatabaseFiles (Database_ID, File_ID)

CREATE TABLE DiskLatency.CaptureData (
ID bigint identity PRIMARY KEY,
StartTime datetime,
EndTime datetime,
ServerName varchar(500),
PullPeriod int
)

CREATE TABLE DiskLatency.CaptureResults (
CaptureDate datetime,
read_per_ms float,
write_per_ms float,
io_stall_read int,
io_stall_write int,
num_of_reads int,
num_of_writes int,
num_of_bytes_written bigint,
database_id int,
file_id int,
CaptureDataID bigint
)

CREATE CLUSTERED INDEX [idx_CaptureResults_CaptureDate] ON [DiskLatency].[CaptureResults]
(	[CaptureDate] DESC)

CREATE NONCLUSTERED INDEX idx_CaptureResults_DBID_FileID ON DiskLatency.CaptureResults (database_id, file_id)

CREATE NONCLUSTERED INDEX idx_CaptureResults_CaptureDataID ON DiskLatency.CaptureResults (CaptureDataId)

ALTER TABLE DiskLatency.CaptureResults ADD CONSTRAINT FK_CaptureResults_CaptureData FOREIGN KEY
	(	CaptureDataID) REFERENCES DiskLatency.CaptureData
	(	ID	)
GO
ALTER TABLE DiskLatency.CaptureResults ADD
iops AS(num_of_reads + num_of_writes)
GO

CREATE PROCEDURE DiskLatency.usp_CollectDiskLatency
	-- Add the parameters for the stored procedure here
	@WaitTimeSec INT = 60,
	@StopTime DATETIME = NULL
AS
BEGIN

	DECLARE @CaptureDataID int
	/* Check that stopdate is greater than current time. If not, throw error! */

	/* If temp tables exist drop them. */
	IF OBJECT_ID('tempdb..#IOStallSnapshot') IS NOT NULL
	BEGIN
		DROP TABLE #IOStallSnapshot
	END

	IF OBJECT_ID('tempdb..#IOStallResult') IS NOT NULL
	BEGIN
		DROP TABLE #IOStallResult
	END

	/* Create temp tables for capture baseline */
	CREATE TABLE #IOStallSnapshot(
	CaptureDate datetime,
	read_per_ms float,
	write_per_ms float,
	num_of_bytes_written bigint,
	num_of_reads bigint,
	num_of_writes bigint,
	database_id int,
	file_id int
	)

	CREATE TABLE #IOStallResult(
	CaptureDate datetime,
	read_per_ms float,
	write_per_ms float,
	num_of_bytes_written bigint,
	num_of_reads bigint,
	num_of_writes bigint,
	database_id int,
	file_id int
	)

	DECLARE @ServerName varchar(300)
	SELECT @ServerName = convert(nvarchar(128), serverproperty('servername'))

	/* Insert master record for capture data */
	INSERT INTO DiskLatency.CaptureData (StartTime, EndTime, ServerName,PullPeriod)
	VALUES (GETDATE(), NULL, @ServerName, @WaitTimeSec)

	SELECT @CaptureDataID = SCOPE_IDENTITY()

	/* Do lookup to get property data for all database files to catch any new ones if they exist */
	INSERT INTO DiskLatency.DatabaseFiles ([ServerName],[DatabaseName],[LogicalFileName],[Database_ID],[File_ID])
	SELECT @ServerName, DB_NAME(database_id), name, database_id, [FILE_ID]
	FROM sys.master_files mf
	WHERE NOT EXISTS
	(
		SELECT 1
		FROM DiskLatency.DatabaseFiles df
		WHERE df.Database_ID = mf.database_id AND df.[File_ID] = mf.[File_ID]
	)

	/* Loop through until time expires  */
	IF @StopTime IS NULL
		SET @StopTime = DATEADD(hh, 1, getdate())
	WHILE GETDATE() < @StopTime
	BEGIN

	/* Get baseline snapshot of stalls */
		INSERT INTO #IOStallSnapshot (CaptureDate,
		read_per_ms,
		write_per_ms,
		num_of_bytes_written,
		num_of_reads,
		num_of_writes,
		database_id,
		[file_id])
		SELECT getdate(),
			a.io_stall_read_ms,
			a.io_stall_write_ms,
			a.num_of_bytes_written,
			a.num_of_reads,
			a.num_of_writes,
			a.database_id,
			a.file_id
		FROM sys.dm_io_virtual_file_stats (NULL, NULL) a
		JOIN sys.master_files b ON a.file_id = b.file_id
		AND a.database_id = b.database_id

		/* Wait a few minutes and get final snapshot */
		WAITFOR DELAY @WaitTimeSec

		INSERT INTO #IOStallResult (CaptureDate,
			read_per_ms,
			write_per_ms,
			num_of_bytes_written,
			num_of_reads,
			num_of_writes,
			database_id,
			[file_id])
		SELECT getdate(),
			a.io_stall_read_ms,
			a.io_stall_write_ms,
			a.num_of_bytes_written,
			a.num_of_reads,
			a.num_of_writes,
			a.database_id,
			a.file_id
		FROM sys.dm_io_virtual_file_stats (NULL, NULL) a
		JOIN sys.master_files b ON a.file_id = b.file_id
		AND a.database_id = b.database_id

		INSERT INTO DiskLatency.CaptureResults (CaptureDataID,
			CaptureDate,
			read_per_ms,
			write_per_ms,
			io_stall_read,
			io_stall_write,
			num_of_reads,
			num_of_writes,
			num_of_bytes_written,
			database_id,
			[file_id])
		SELECT @CaptureDataID
			,inline.CaptureDate
			,CASE WHEN inline.num_of_reads =0 THEN 0 ELSE inline.io_stall_read_ms / inline.num_of_reads END AS read_per_ms
			,CASE WHEN inline.num_of_writes = 0 THEN 0 ELSE inline.io_stall_write_ms / inline.num_of_writes END AS write_per_ms
			,inline.io_stall_read_ms
			,inline.io_stall_write_ms
			,inline.num_of_reads
			,inline.num_of_writes
			,inline.num_of_bytes_written
			,inline.database_id
			,inline.[file_id]
		FROM (
		SELECT  r.CaptureDate
				,r.read_per_ms - s.read_per_ms AS io_stall_read_ms
				,r.num_of_reads - s.num_of_reads AS num_of_reads
				,r.write_per_ms - s.write_per_ms AS io_stall_write_ms
				,r.num_of_writes - s.num_of_writes AS num_of_writes
				,r.num_of_bytes_written - s.num_of_bytes_written AS num_of_bytes_written
				,r.database_id AS database_id
				,r.[file_id] AS [file_id]

		FROM #IOStallSnapshot s
			 INNER JOIN #IOStallResult r ON (s.database_id = r.database_id and s.file_id = r.file_id)
		) inline

		TRUNCATE TABLE #IOStallSnapshot
		TRUNCATE TABLE #IOStallResult
 END -- END of WHILE

 /* Update Capture Data meta-data to include end time */
 UPDATE DiskLatency.CaptureData
 SET EndTime = GETDATE()
 WHERE ID = @CaptureDataID

END
GO

Now that we have our stored procedure ready to go. Here is a simple block of code that you can run or embed in a SQL Agent Job to collect your counters to measure disk latency for each individual database file. For this example, were going to collect for an hour and wait a minute between collections.

DECLARE @EndTime datetime, @WaitSeconds int
SELECT @EndTime = DATEADD(hh, 1, getdate()),
       @WaitSeconds = 60

EXEC DiskLatency.usp_CollectDiskLatency
	@WaitTimeSec = @WaitSeconds,
	@StopTime = @EndTime

I hope you enjoyed this blog post on capturing the metrics needed to single out which database files you should focus on when you notice disk latency. Please check out my next blog post as I focus on some queries I might use to complete a review of the disk latency data that was collected from this blog post.

Performance Tuning Texas Style!

If your in Texas and interested in learning some tips to help you do SQL Server Performance Tuning with free tools then I highly suggest that you attend one of these presentations coming to a city near you!

If you cannot make it out no worries, you can catch a recorded version of my presentation.

SQL Server Performance Tuning with Free Tools!

The following is a recording of my Performance Tuning for Pirates session recorded by UserGroup.TV at SQL Saturday 125 in Oklahoma City.  I recommend that you check out UserGroup.TV as they provide some great content for free.  It was an honor to be selected for this recording.  I hope you enjoy the video.  If you have any questions and need some help feel free to contact me.

If the video doesn’t render correctly above try watching the video here (UserGroup.TV) or here (SQL PASS Performance Virtual Chapter).

Links to all tools and scripts plus reference material can be found  at my SQL Server Performance Tuning with Free Tools page.

12 Steps to Workload Tuning – Winter 2012 Performance Palooza!

I am a huge fan of the PASS Virtual Performance Chapter and I am excited that they pinged me to speak at their Winter 2012 Performance Palooza event tomorrow. This event is similar to 24 Hours of PASS but it will focus on Performance.

I will be sharing my 12 Steps to Workload Tuning at 1PM Central Time (1900 GMT). We will focus on the methodology and we will  use RML Utilities which is a free tool provided by Microsoft CSS to help you replay, add additional stress and compare results.  If you want to improve your performance tuning skills I strongly recommend you checkout out the schedule and attend as many sessions as possible.

#sqlpass #summit12 day two keynote review

The following is my highlights and thoughts about the day two keynote at the SQL PASS Member Summit.

Douglas McDowell started recapping yesterday events shortly followed by some great information about PASS financials. Five years ago there were no SQL Saturday, no 24hrs of PASS less than half the amount of chapters. Currently PASS is a 8 million dollars as a non-for profit organization. The majority of the funding comes from the member summit and it’s a bargain for attendees.

Wendy Pastrick, James Rowland-Jones and Sri Sridharan were introduced as new board members serving two-year terms from Jan 1 2013 to Dec 31 2014. It’s an honor to have them help lead our SQLPASS future.

Tom LaRock takes the stage. PASS wouldn’t exist with out the strong commitment from its volunteers. Due to growth the PASSion Award acknowledges volunteers every month. Glad to see some of my great friends in Dallas like Sri Sridharan, Ryan Adams and David Stine were winners. Jen Stirrup wins the PASSion Award for the year.

Tom talks about how PASS is working on improving its communication. If you have a recommendation for improvement PASS Board of Directors are walking around with black book to take notes. You can also attend Friday’s Board of Director Q&A to get instant feedback.

PASS Member Summit will move to Charlotte, NC on October 15-18 2013. This is a major move as many of us are in love with Seattle due to the Member Summit.

Tom thanks tons of companies who have sent more than five people to the PASS Member Summit. Many companies have sent 20 to 30 people.

Todays must see list includes WIT Luncheon, Community Zone, SQL Server Clinic, Dev Chalk Talks, Hands on Labs, Community Appreciation Party at EMP. Tomorrow’s must see to do list includes Dr. David Dewitt, Birds of a feather luncheon, Community Zone, SQL Server Clinic, Dev Chalk Talks, Hands on Labs, Board Q&A.

Quentin Clark the Corporate VP of Microsoft takes the stage and talks about data lifecycle. In my humble opinion, from this point on the rest of the keynote should have been moved to a general PASS session. It would have made a good Power Pivot session for that targeted audience. I believe it’s way too long for a keynote presentation for database professionals. If were going over BI I am expecting some short hitters that would wow me instead of a deep dive on a single topic. It’s also hard for me to follow along with the presenter. During the very first demo the speakers used ZoomIt so we could see the demo. From this point on it wasn’t used and I wasn’t able to see the examples and it made it hard for me to follow along.

5 recommendations for attending #sqlpass #summit12

The following are five recommendations I would like to share with anyone attending the #sqlpass member summit. I hope you have a blast!

GuideBook

If you have a smart phone I highly recommend grabbing the GuideBook application for your mobile device. This will give you direct access to the session schedule, general information and more. This is a very helpful tool for being flexible and changing which session you should attend on the fly.

Buy the conference sessions

There are so many great sessions its impossible to catch them all. I strongly recommend buying the USB drive that includes all the sessions so the pressure is off to try and make sure you see them all.  This will allow you to enjoy the conference without worrying about seeing the best session. Personally, this allows me to focus more on networking.

Networking

The SQL Server Community is awesome. There are so many people in the community willing help you accomplish your goals.  All you have to do is meet them. There really isn’t a better place to do that than PASS Member Summit. I would never be where I am today without some of the connections I have meet at the past PASS conferences.

SQL Server Clinic

Got a problem and don’t know how to solve it?  Your at the right place, not only are there tons of great DBA’s around to help, you also have the SQL team willing to help for free. This year I brought a couple interesting problems with me and I cannot wait to review them with the Microsoft support team to get their thoughts.

Vendors

Do you need more hours in the day? Do you wish there was a way to make a process easier? If so, most likely one of the many vendors at the conference has a solution for it. Time is money, so if one of these tools on display can free up your time wouldn’t you want to use it? All the major SQL Server vendors will be at the conference, hopefully spending a few minutes with them will save your hours of time next year.

Is #SQLPASS helping their speakers?

I love the SQL Community because it usually is a great environment to connect, share and learn. With that said, I am noticing that we can do a much better job with helping the people who share, learn how to share better.  For every single, Grant Fritchey, Thomas LaRock, Andy Leonard, Brent Ozar, Mike Walsh, Allen White (I could keep going..) there are several DBA’s who speak in the community who don’t get the feedback they need to get to the next level. The SQL PASS community does a great job of providing opportunities for people to speak but we fail as a group at giving speakers the proper feedback that is needed to help them succeed.

Being a speaker and regional mentor I have attended many user group meetings and SQL Saturday’s in the past few years. I have seen a lot of great changes in the community.  Recently, I motivated some friends into giving their first presentation at the local SQL Saturday. I was able to attend their sessions so I could directly give feedback. It makes me wonder how many speakers only get the feedback provided on the evaluation forms? How is it possible to use the limited information on these forms to make a presentation better? That is if you’re lucky enough to be presenting at an user group who uses speaker evaluation forms. I admit I was guilty of this while running the WVPASS User Group.  From firsthand knowledge I know running a user group can require a lot of time and dedication so I completely see how this important feedback is missed when there are several other important pieces to the user group leader puzzle.

My call to action (this is where the rant ends). What is the answer? I wish I knew, but I defiantly can provide some suggestions. It would be nice to have a consistent evaluation process during a SQL Saturday and other PASS events including virtual chapters and user group meetings. I would like to see questions that are open ended that provide constructive feedback to help speakers improve as they grow instead of hoping attendees provide feedback on the back of a form.  I think it would be nice to give attendees  an simple online tool that allows them to provide feedback during the session.  Once again, these are just suggestions. Maybe there all wrong as they are just ideas on how the process can be improved through my experience as a chapter leader, speaker, SQL Saturday organizer and regional mentor.

In closing, I look forward to hopefully finding the answer with some friends in my #sqlfamily.  Every year at the PASS  Member Summit there is a meeting where the community can meet and ask questions to the Board of Directors. This year, I plan to attend and ask, “As a volunteer, how can I be involved in improving our current system in place to provide speakers with better feedback to help them improve their public speaking skills and get them to the next level?”

Dallas, TX to Pittsburgh, PA A #sqlsat171 Story!

 

First SQL Saturday in Pittsburgh

First SQL Saturday in Pittsburgh

It was an honor to speak at the first SQL Saturday in Pittsburgh. The company I

We even got some professional development done while I was in the office.

We even got some professional development done while I was in the office.

currently work for is based out of Pittsburgh so I flew in a week early and traded my work from home lifestyle this week for working in the office.  It was fun to do some training and mentoring in person this week.  One of my coworkers went all out and hosted a great BBQ dinner while my boss picked me up at 1:30am on a Monday morning and let me crash with him all week.  I am very lucky to work with some great people.

For this event I had two goals. One, help Gina anyway possible with finding speakers and sponsors. Second, I wanted to encourage and help some great local DBA’s in Pittsburgh give their first #sqlpass presentation. So, months before this event I gave myself a personal challenge to target three great DBA’s in Pittsburgh and I tried to get them to deliver their first presentation locally at the SQL Saturday.  I was very happy to help and see two of the three potential speakers give great presentations.  They even filled all the seats and had standing room only.  One of them has even caught the speaking bug and submitted abstracts to SQL Saturday in DC.

Speakers Dinner…

The SQL Saturday committee did a great job on picking a venue for the speakers dinner. We meetup at the Rivers Casino across the river from downtown. We had a great view Mt. Washington and the Point. I wish I could have stayed longer but I had a work item that needed to be completed.

Day of the Event..

I started the morning by giving my Performance for Pirates (code, tools and

Kon did a great job, with the room being packed!

Kon did a great job for his first presentation with the room being packed!

videos provided with link) presentation.  Next, I got the opportunity to catch Eric Keeps dive into ORM that make DBA’s happy.  I was surprised when Eric showed one that allowed developers and DBA’s to build the SQL statements.  Finally, I caught Konstantin Melamud who presented an ”Introduction to Execution Plans” session.  He did a fantastic job, most of the people in the room wouldn’t know it was his first #sqlpass presentation.

One of the most important parts of attending SQL Saturday’s is to catchup and extend your network.  I love catching up with my #SQLFamily and extending it too.  I had a great time catching up with Karla Landrum,  Joey Dantoni, Rick Heiges, Craig Purnell, Eric Kepes and more (too many to list all!).  After some networking I had to cut out early to catch my flight. I was able to hitch a ride to the airport with Joey and get a sneak peek into traveling like a rockstar as he got me through priority checkin and the US Airways club. Thanks Joey!

The After Event Buzz…

Finally, its now close to a week after the event and I am still hearing good news about the event. We were able to round up about ten co-workers to join in and attend the event.  They are still talking about the event and cannot wait for the next one.  Many of them mentioned that they are going to start attending the Pittsburgh SQL Server User Group meetings, a few are considering going to the SQL Saturday in DC in December.  If this isn’t #SQLWinning I don’t know what is!

Presenting at OKC SQL Server User Group Tonight!

Tonight, October 8th at 6:30pm I am virtually speaking at the OKC SQL Server User Group.  I had a blast there earlier this year when I presented at their SQL Saturday event.  Tonight I will be talking about Performance Tuning for Pirates! There will be free knowledge and food for all who can make it down. I hope you can make it and I look forward to meeting you virtually!

Here are the meeting details!

The title for the talk is: Performance Tuning for Pirates and will cover:

If you follow baseball you will notice that the Pittsburgh Pirates (this speaker’s favorite team) has to do more with less to be successful. This trend can also exist within IT shops. If you need to improve the performance of your SQL Server instances and cannot purchase 3rd party tools this session is for you. Learn to improve your performance tuning process by using several free tools. This session will cover wait stats, dynamic management objects, perfmon, PAL, SQL Trace, ClearTrace, SQL Nexus and SQLDiag.

When: Tonight! Monday, October  08th

Time: 6:00 p.m.- 8:00 p.m.

Food and Drinks will be provided by GDH

Location: GDH Offices - Follow this link for information on location and parking!

1111 N Walker Ave
Oklahoma City, OK 73103

Directions link: Click Here
Our Website/MailingList: http://okcsql.org
Twitter/Facebook:  @OKCSQL and http://facebook.com/okcsql