Determining specs for a new SQL Server

I have been tasked for “specking” out the requirements for a new OTLP SQL Server and I would like some feed back on this as well. 

Here are my initial requirements, we have to use SQL 2008 R2 because the application that will be using these databases have not been certified for SQL 2012 yet (boo)

Some background, the current server has over 1 TB of databases and is highly active with over 100 concurrent connections. These connection process UPDATE, INSERT, DELETE statements like they were going out of style. And one of these databases is a repository for data used by SSRS Reports.  Not an ideal situation, but I have to follow application manufacture guidelines.

here’s what I have:

  • OS: Windows Sever 2008 R2 x64
  • SQL: SQL Server 2008 R2 Enterprise Edition x64
  • Processors: 2 Quad core processors
  • Memory: as much as can be budgeted, but minimum of 64 GB
  • Local Drives:
  • 1 – System Drive for OS & Applications the minimum free space needs to equal the amount of RAM installed
  • 1 — for TempDB, Full-Text Indexes, other resources and System databases
  • Database drives: SAN Connections 2 drives: one drive for MDF and one drive for LDF

 

Please let me know if I missed something or if I am TOTALLY off my rocker with this setup.

Thanks!

SQLBackupAndFTP (a product review)

After reading Pinal Dave blog post on Best Practices to Store the SQL Server Backups, I noticed he mentioned an “easy to use” SQL Backup 3rd party software that allows network storage, even FTP transporting.

So, I thought I would give SQLBackupAndFTP a try.  The download is a relatively small foot-print and installation was a breeze, however I wish there were a x64 bit version.  I know x64 bit machines will run the software, but it is my personal “best practices” to not use x32 bit software with x64 bit machines.

Dave was right, this is most definitely an “easy to use” software.  I can see it coming in real handy with applications that require SQL Express.  With the database sizes (almost 1TB of data on one server) I work with, remote storage and FTP are not a viable option.  Setting up the network storage was a breeze.

I was a little worried when the error message popped up concerning Remote SQL Server backups, especially since it mentioned “beta”.

I believe this would be an excellent development/test environment backup solution because it can be installed on the server and managed on each server.  However, in a production environment with over 90 SQL Servers, a remote backup solution  would be ideal.  I am afraid this would not be the solution.  I could be wrong.  I am a little fearful to place it into production right now.

However, that all being said, I will definitely be putting it to use on my development servers, workstations and test servers.

Where is the key to the LOCK?

This past Friday evening, a simple data import process (that has been working for several months), decided to not work correctly.  Because there was no “early warning” type of notifications systems on the SQL 2005 server, the SQL Agent Job was actually running when Monday morning rolled around.

Using Idera’s SQL Check, I quickly noticed that there was a process that had a lock on a table that was causing some MAJOR problems.  Four different SQL processes was waiting on this lock.  And of course my supervisor was getting calls left and right from end users because their applications were not working.

I had to figure out what was going on.  I was able to get a list of processes and which one was causing all the problem with the sp_who2 command.

sp_who2'active'

However, this returned a “bias” HOST NAME.  I am not really sure why. But I confirmed with networking that the returned hostname and IP address do not exist on our network, but that is for another day.

I needed to know an accurate way to get all the information I needed at that moment when a job wrongs long.  This code is probably providing way more information than I really need, but sometimes more is better.  Even though the “host_name” is returning a “bogus” host name; the client_net_address is not!  This valid IP address is very important to locating the culprit machine.

SELECT 
    C.session_id
    ,C.client_net_address
    ,S.host_name
    ,S.Client_version
    ,S.client_interface_name
    ,S.login_name
    ,S.original_login_name
    ,db_name(R.database_id) AS [DB Name]
    ,R.status
    ,R.command
    ,R.blocking_session_id
    ,R.wait_type
    ,R.percent_complete
    ,wait_resource
    ,C.net_transport
    ,C.protocol_type
    ,C.auth_scheme
    ,C.last_read
    ,C.last_write
    ,S.cpu_time
    ,S.memory_usage
    ,(S.total_elapsed_time/1000) AS [Total Sec]
    ,S.lock_timeout
FROM sys.dm_exec_connections AS C
JOIN sys.dm_exec_requests AS R
    ON C.session_id=R.session_id
JOIN sys.dm_exec_sessions AS S
    ON C.session_id=S.session_id
ORDER BY session_id

Using Thomas LaRock’s  HOW TO: Find Currently Running Long SQL Agent Jobs, I setup up a simple 2 step SQL Agent job to check for 1) long running jobs and 2) session information (using the code above).  A simple “save results to txt file” allows me to export the results to and study them later.

USE [msdb]
GO
/****** Object:  Job [job_WH_MonitorDatabase]    Script Date: 10/30/2012 13:57:18 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [xx] Script Date: 10/30/2012 13:57:18 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'xxx' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'xxx'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'job_MonitorDatabase', 
        @enabled=1, 
        @notify_level_eventlog=0, 
        @notify_level_email=2, 
        @notify_level_netsend=0, 
        @notify_level_page=0, 
        @delete_level=0, 
        @description=N'’, 
        @category_name=N'xx', 
        @owner_login_name=N'INFOSYS\xx', 
        @notify_email_operator_name=N'xx', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Monitor]    Script Date: 10/30/2012 13:57:18 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Monitor', 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=3, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, @subsystem=N'TSQL', 
        @command=N'exec usp_LongRunningJobs', 
        @database_name=N'master', 
        @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [RecordProcesses]    Script Date: 10/30/2012 13:57:18 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'RecordProcesses', 
        @step_id=2, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, @subsystem=N'TSQL', 
        @command=N'select
    sysp.spid AS [SPID]
    ,sysp.status AS [Status]
    ,sysp.hostname AS [Host Name]
    ,cn.client_net_address AS [Client IP]
    ,db_name(sysp.dbid) AS [DB Name]
    ,convert(sysname, rtrim(sysp.loginame)) as [Login]
    ,sysp.program_name AS [Program]
    ,sysp.cmd AS [CMD Status]
    ,sysp.cpu AS [CPU usage]
    ,sysp.physical_io [IO]
    ,sysp.blocked AS [Blocked By]
    ,sysp.waitresource AS [Wait Resource]
from master.dbo.sysprocesses AS sysp
INNER JOIN sys.dm_exec_connections AS cn 
    ON sysp.spid=cn.session_ID
WHERE sysp.dbid > 4 AND sysp.cmd <> ''AWAITING COMMAND''
ORDER BY sysp.hostname', 
        @database_name=N'master', 
        @output_file_name=N'F:\SQLAgent_Logs\RunningProcesses.txt', 
        @flags=2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Daily', 
        @enabled=1, 
        @freq_type=4, 
        @freq_interval=1, 
        @freq_subday_type=4, 
        @freq_subday_interval=10, 
        @freq_relative_interval=0, 
        @freq_recurrence_factor=0, 
        @active_start_date=20121030, 
        @active_end_date=99991231, 
        @active_start_time=0, 
        @active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

Thanks for your time!  I will let you know how it turns out.

SQL Saturday Baton Rouge #150

sqlsat150_webOn Tuesday, I was notified that my presentation, “Making the CASE for a full-time DBA” got accepted on the schedule for SQL Saturday Baton Rouge #150.  WooHoo, my first SQL community event presentation!

I am thrilled and nervous at the same time.  I have many years experience speaking in front of people, that’s a no-brainer for me.  However, I have never spoken in front of peers on “work related” topics. 

My presentation is targeted to those “Accidental DBA’s” who find themselves administering and managing SQL Servers. 

  • Developers, Computer Technicians, System Administrators and other IT personnel who were not hired as a DBA, but find themselves doing the job.
  • individuals who scratch their head, Bing and Google-it to find answers.
  • individuals with less than 2 years of DBA experience.

The “who, what, where and how’s” of getting simple information out of SQL server and discovering the “major” problems and no-no’s in the SQL world.  Hopefully, I can provide some simple ways, steps and information that will make your “Accidental DBA” career easier. 

Once you can better understand SQL, just maybe you might like the work and want to be a full-time DBA.  How do I change career paths, where do I find more information, do I need certifications?  I will also briefly discuss how to “pitch a full-time DBA position” to your Manager, Director or VP.

There will be some humor, laughing (probably at me) and hopefully some informative information for those non-DBA types, the DBA newbies or DBA “wanna-bies”.

Thank you again for the SQL Saturday team, I hope I don’t disappoint.

 

UPDATE:  Because of my work, unfortunately I was unable to participate and had to withdraw from presenting.  I was crushed.  But there is always next year!!!!