Download tempdb

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Microsoft Access wikipedia , lookup

Tandem Computers wikipedia , lookup

Extensible Storage Engine wikipedia , lookup

Microsoft Jet Database Engine wikipedia , lookup

Clusterpoint wikipedia , lookup

Database model wikipedia , lookup

Relational model wikipedia , lookup

Open Database Connectivity wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

SQL wikipedia , lookup

PL/SQL wikipedia , lookup

Transcript
DBA200
TempDB
Best Practices, Advanced Configs. &
Troubleshooting
Omar Gonzalez
Sr. DBA at Dell
Fourth MeetUp
About my experience
Job Experience:
• Web Developer at Grupo Alica
• .NET/DB Developer at Coca-Cola
• .NET Support & SQL DBA at TCS
• DBA & Web Admin at Intel – contractor
• DB Admin Advisor at Dell
• Sr. DBA & HealthCare DB Team Lead at Dell
What is TempDB?
TempDB is a system database in SQL Server
Tempdb globally stores both internal and user objects and the
temporary tables, objects, and stored procedures that are created
during SQL Server operation.
The tempdb can become overloaded in terms of space available and
excessive DDL/DML operations. This can cause unrelated
applications running on the server to slow down or fail.
Common Issues
• Running out of storage space in tempdb
• Queries that run slowly due to the I/O bottleneck in tempdb
• Excessive DDL operations leading to a bottleneck in the system
tables
• Allocation contention.
• Metadata contention.
TempDB Usage
• User Objects
• Table and index
• Global and local temp tables
• Table variables
• Internal Objects
•
•
•
•
Has Joins
Sorts
Cursors (session scope)
LOB usage (batch scope)
• Version Store
•
•
•
•
Online indexing
Triggers
Snapshot-based isolation levels
Row versioning
• Free Space
Monitoring Space
Space used = Internal + User + VersionStore
Free Space = Reserved space – Space used
NOTE: These calculations don’t account for pages in mixed extents.
*DEMO
Trace Flag T1118
• Trace flag 1118 forces uniform extent allocations instead of mixed page
allocations. The trace flag is commonly used to assist in TEMPDB
scalability by avoiding SGAM and other allocation contention points.
• Blocking and performance problems may occur when you enable trace
flag 118 in SQL Server 2005 if the temporary table creation workload is
high. Fixed in SQL 2005 with SP2 + KB936185, or with SP3.
• New feature in SQL Server 2016 allows to specify uniform extents at DB
level instead of instance level (trace), by an alter statement. ALTER
DATABASE tempdb SET MIXED_PAGE_ALLOCATION OFF;
• This option is OFF by default, this option is ON for all system DBs.
TempDB is the only system DB that supports OFF.
TempDB Space Usage – User Objects
BreakDown
• Siginificant space used by user objects may indicate poor designated
queries, most of the time queries used for import-export or for processing
purposes.
• TempDB used as a staging area
• OLAP / Data WareHouses
• You can use the sys.dm_db_file_space_usage dynamic management view to
monitor the disk space used by the user objects, internal objects, and
version stores in the tempdbfiles.
• Additionally, to monitor the page allocation or deallocation activity
in tempdb at the session or task level, you can use
the sys.dm_db_session_space_usage andsys.dm_db_task_space_usage dyna
mic management views. These views can be used to identify large queries,
temporary tables, or table variables that are using a large amount
of tempdb disk space.
TempDB Space Usage – Internal Objects
BreakDown
• Work Table
• LOB usage, large object data type
• Text, Ntext, Image, Varchar(MAX), NVarchar(MAX), FileStream, XML
• String functions such as SUBSTRING, REPLICATE
• UDF (User Defined Functions)
• Cursors
• Use set-based functionality instead
•
•
•
•
•
temporary LOB storage is batch scoped and cursor worktable is session scoped
Sort Runs
Hash Joins or known as Work File
ALTER INDEX WITH REBUILD, SORT_IN_TEMPDB = ON;
Service Broker performs caching of objects in the context of query execution. The size is
approx. 1 KB per dialog.
• Used by Database Mail and Event notifications
• DBCC CHECKDB
• Run DBCC CHECKDB WITH ESTIMATEONLY
• Space required = Largest index + “index create memory” option
• Min memory per query option has precedence over the index create memory option.
TempDB Space Usage – Version Store
• Triggers
• Snapshot-based isolation levels based on row versioning
• Online maintenance
• ALTER INDEX WITH REORGANIZE;
• ALTER INDEX WITH REBULID, ONLINE=ON;
• BulkLoad Operations
• CTE
TempDB Config. Recommendations
Part 1
• Size it properly
• Avoid small sizes and small growths
• Minimum growth for 0-100 MB TempDB, 10 MB
• When TempDB is above 100 MB use a growth of at least 10% or equivalent in
MBs.
• Work around to presizing it.
• Enable Trace flag 1117 to grow all files in a filegroup equally.
• It not only impacts TempDB but all other DBs on the instance.
TempDB Config. Recommendations
Part 2
• Set recovery model to SIMPLE
• Automatically reclaims log space
• Create as many files as needed to maximize disk bandwith.
• As a general rule, create one file per core, up to 8 files.
• Make each data file the same size; this allows for optimal proportional-fill
performance.
• Put the tempdb database on a fast I/O subsystem. Use disk striping if
there are many directly attached disks.
• Add faster or additional I/O controllers. Add more cache for the controllers.
• Update SAN software for disks
• Align it to 64 KB allocation unit size, cluster size.
TempDB Config. Recommendations
Part 3
• Put the tempdb database on disks that differ from those that are used
by user databases.
• Reduce I/O waits
• Make sure SWAP or pagefile is not on the same drive as TempDB.
• Increase I/O bandwith by adding more physical drives to the disk array
and/or replace current disks with faster drives.
• SSD for StandAlone or SSD for TempDB in cluster SQL 2012
• Set PAGE_VERIFY option to CHECKSUM starting in SQL Server 2008.
• In earlier versions of SQL Server, the PAGE_VERIFY option is set to NONE for the
tempdb database and cannot be modified.
• In SQL 2008, the default value is CHECKSUM.
• For upgrades from SQL 2005 the default remains as NONE.
• When set to CHECKSUM, the PAGE_VERIFY option discovers damaged database
paged caused by disk I/O path errors and reports these errors
Maintenance Tasks
• Set all the data files to the same size
• DBCC SHRINKFILE: Page 1:1942632 could not be moved because it is a work
table page.
•
•
•
•
•
Reduce VLFs
Add/move files
Monitor space
Monitor space
Did I mention monitor space?
How can I monitor my TempDB?
•
•
•
•
•
•
•
Check for free space at the DB
Generate custom alerts
Create events
Create response jobs
Make notifications
Run periodic reports
Schedule auto-growths
Common Performance Counters
•
•
•
•
Avg. Disk Sec/Read
Avg. Disk Sec/Write
Physical Disk: %Disk Time
Physical Disk: %Idle Time
Common Errors Codes
• 1101/1105 – Any session must allocate space in tempdb.
• 3959 – The version store is full. Usually appears after a 1101 or
1105 error.
• 3967 – The version store is forced to shrink because tempdb is full
• 3958/3966 – A transaction cannot find the required version record
in tempdb.
Common Related Issues – High DB locks
• What is it?
• SH-DATABASE lock
• Symptoms
• General rule, keep less than 1K locks
• Sys.dm_tran_locks
• Fix/Resolution
•
•
•
•
SQL 2008 SP3 CU17
SQL 2008 R2 SP2 CU13
SQL 2012 SP1 CU9
SQL 2014 CU1
Common Related Issues – High WRITELOG
waits
• What is it?
• Long waits for SQL to write information into the transactional log file of the DB
(LDF).
• The log pool is an in-memory cache of the transaction log. By default, log pool
uses a single global PMO (Pointer to Memory Object) for all databases.
• When many threads try to write logs by using the log pool, all the threads have
to wait for the pointer to a memory object resulting in contention.
• What is LSN?
• Symptoms
•
•
•
•
Long WRITELOG waits detected on sys.dm_os_wait_stats DMV
Long recovery times at AOAG
Long rollback times at transactional replication
General long recovery time after reboots or after restoring DBs
• If you saw this also check for high VLFs
Common Related Issues – High WRITELOG
waits
• Fix/Resolution
• SQL 2012 SP1 CU3 + Enable trace flag T9024
• If the issues persist even after enabling trace flag T9024, you can also enable
trace flag T8048 which partitions the pointer to memory object at CPU level.
• SQL 2012 SP3
• SQL 2014 RTM + Enable trace flag T9024
• If the issues persist even after enabling trace flag T9024, you can also enable
trace flag T8048 which partitions the pointer to memory object at CPU level.
• SQL 2014 SP1
Common Related Issues – High CPU waits
• What is it ?
• Talk about the phases of a process, RUNNABLE, RUNNING, SUSPENDED
• How can I monitor it?
• Dm_os_wait_stats
•
•
•
•
•
CMEMTHREAD
https://blogs.msdn.microsoft.com/psssql/2011/09/01/sql-server-20082008-r2-on-newer-machines-with-morethan-8-cpus-presented-per-numa-node-may-need-trace-flag-8048/
If SQL 2008/2008R2 & CPUs>8. Think about enabling T8048.
SOS_SUSPEND_QUEUE
CXPACKET
• Fix/Resolution
• DO NOT change max worker threads
•
Check/Change MAXDOP instead & its associated cost
• Evaluate and determinate if you have the adequate number of CPUs and cores
• Check if any network offload settings are enabled. Most of those features are too old and have seen
environments with issues when there are more than 32 cores present.
Common Related Issues – OS Level
• Update BIOS version
• Apply OS hotfix as per KB2207548
• Power Plan
• Check that it is not set as Power Saving Mode for Prod instances, put it at
least on Balanced mode, High Performance is preferred.
• Follow KB981285 to disable Advanced Power Management in the system’s
BIOS for VMs
Common Related Issues – Query Level
•
•
•
•
Check for top queries by CPU, disk, etc.
Optimization for Ad-Hoc Workloads
SQL compilations per second
SQL re-compilations per second
• SPs WITH RECOMPILE option.
• Reduce contention at DB level
• This action will minimize locking contention while protecting transactions
from dirty reads of uncommitted data modifications.
• ALTER DATABASE <db name> SET ALLOW_SNAPSHOT_ISOLATION ON
• ALTER DATABASE <db name> SET READ_COMMITTED_SNAPSHOT ON
Common Related Issues – Memory Pressure
•
•
•
•
•
Buffer Cache Hit Ratio
Page Life Expectancy
Checkpoint pages/sec
Lazywrites/sec
DBCCs
•
•
•
•
•
•
•
DBCC FREESYSTEMCACHE(‘SQL Plans’)
DBCC FRESSIONCACHE
DBCC DROPCLEANBUFFERS
DBCC FREESYSTEMCACHE(‘All’)
DBCC FREEPROCCACHE; --WARNING!
DBCC SQLPERF(‘sys.dm_os_latch_stats’, CLEAR)
DBCC SQLPERF(‘sys.dm_os_wait_stats’, CLEAR)
Sources:
Optimizing tempdb Performance
https://technet.microsoft.com/en-us/library/ms175527(v=sql.105).aspx
Capacity Planning for TempDB
https://technet.microsoft.com/en-us/library/ms345368(v=sql.105).aspx
Troubleshooting Insufficient Disk Space in tempdb
https://technet.microsoft.com/en-us/library/ms176029(v=sql.105).aspx
Recommendations to reduce allocation contention in SQL Server tempdb database
https://support.microsoft.com/en-us/kb/2154845
Q&A
Thank You!!!