DBPedias

Your Database Knowledge Community

John Sterrett

  1. 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.

  2. 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.

  3. 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.

  4. #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. 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?”

  6. 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 an 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 hey 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!

  7. 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

  8. Upcoming speaking engagements

    Ayyyy, matey being that today is the International Speak Like a Pirate Day I thought it was appropriate to post some future dates for my Performance Tuning for Pirates presentation.

    You can download the slides, check out the reference material and videos here!

    North Texas SQL Server Group

    If your in the DFW area and haven’t been to a North Texas SQL Server Group meeting I highly recommend you check one out.  I will be speaking tomorrow (Thursday,  September 19th) and its not too late to sign up to attend this free event.

     

    SQL Saturday #171 in Pittsburgh, PA

    On October 6th Pittsburgh will be hosting its first SQL Saturday. It’s an honor to be speaking during the first time slot. If you in the area, there is no better opportunity to get free SQL Server training. I look forward to meeting you there. If for some reason, you cannot make it make sure you check out the Pittsburgh SQL Server User Groups monthly meetings as there also free!

  9. #TSQL2Day – A Day in the Life of A Service DBA

    Today I am excited to join in with my #sqlfamily and participate in this months #tsql2day throw down. This month Erin Stellato is the king pin and her topic is “A day in the Life.” This gives me a great opportunity to explain a day in the life of a DBA who works for a company who provides DBA services remotely. A typical day has me working on several projects or problems with several clients. One of the things I enjoy about my job is that each day has a new set of challenges.  The following are the highlights of my work day on Wednesday, July 11th.

    Backups instead of Coffee..

    You might start your morning with a cup of coffee but I got to start my day with working with a new client going over an very important issue. We noticed holes in a clients backup maintenance plan so I got to work with them to correct those holes.  I know this isn’t the sexiest task out there for DBA’s but making sure that you can recover is one of the most important tasks  for a DBA.

    Configuring A Cluster to improve High Availability.

    Implementing a cluster usually gives you higher availability for your databases but you might not be getting the highest availability possible from how you configured your cluster.  Today, I reviewed a four node cluster and found a few flaws that limit the availability of the cluster. To summarize here are some of my findings. The cluster was running in node majority instead of node and disk majority. Instances of SQL Server were not added on all the nodes. The preferred nodes and possible owners were not configured correctly. I look forward to doing another blog post at a later date going over each of these settings.

    Troubleshooting Version Store

    Today,  I got to work with another team mate to help troubleshoot why the version store was filling the tempdb database and causing slowness with the clients application. This gave me an opportunity to go learn more about what all is used by the version store. Noticing that the client used RCSI for their main database we were able to use the Performance Data Warehouse to find a massive update statement that did more writes than expected which caused the growth problems with tempdb.

    Assessment review with Client

    One thing I enjoy about my job is going over assessments with a client. This usually gives me an opportunity to share some knowledge about how the database engine works. I also gave some recommendations that can be used to improve their performance and how to bring their server up to speed with our best practices.

    Favorite Part of the Day!

    Every day I get to eat lunch.  I try to make sure I have a lunch date with #babybeluga Gregory my one year old son. This is by far my favorite part of the day and it reminds me why I love working from home.

    Well, there you have it. I hope you enjoyed my blog post on A Day in the Life. I look forward to seeing the recap of how everyone else in the SQL Community spent there day.

  10. Stress Testing Stored Procedures with Free Tools

    I currently have a presentation named Performance Tuning for Pirates. This presentation goes over using several free tools to help you with your performance tuning process. Today, I am happy to share my first video going over these tools.

    Using SQLQueryStress to stress test Stored Procedures

    SQLQueryStress by Adam Machanic (blog | twitter)  is one of my favorite tools for doing a quick stress test against a user object like a stored procedure. This tool can actually be used to do stress testing on T-SQL queries but I usually use it for compiled objects like stored procedures.  I love this tool because it allows you to save and load configurations to quickly redo tests. It also allows you to use a dataset for input parameters and allows you to add additional stress with configuring iterations and threads.

    Note: It also comes in handy when you need to mock up some stress for demos.

    I also written a tip for www.mssqltips.com that goes over a step by step guide on how to use SQLQueryStress.

  1. 1
  2. Next ›
  3. Last »