
Fabian Tech Tips

Having the right tools can make a significant difference in SQL Server performance tuning.
Oct 13, 2024
16 min read
0
6
0
Having the right tools can make a significant difference in SQL Server performance tuning. Enter Glenn's SQL Server Performance Tools, a comprehensive suite designed to optimize and enhance your SQL Server environments.
This blog aims to spotlight why Glenn's tools should be your go-to resource for SQL Server performance management. From detailed monitoring and analysis to insightful recommendations and actionable solutions, Glenn's SQL Server Performance tools empower you to achieve peak performance and stability. Whether you're dealing with query tuning, index optimization, or overall system health, these tools provide a robust and reliable foundation for any SQL Server DBA.
Dive in to discover the myriad benefits and features that make Glenn's SQL Server Performance tools a must-have in your database management toolkit. Stay tuned for an in-depth exploration and practical insights into leveraging these tools for optimal results.
https://glennsqlperformance.com/resources/
Over 100 performance-related scripts are covering SQL version 2012 for the Azure-hosted database.
Glenn Berry has organized them so that each server version can run only on features available for that specific version of SQL.
I have edited out the scripts for SQL 2016 to make a short guide on some of the key diagnostic features I use regularly. The query numbers change for each version.
Once you have used Glenn Berry diagnostic scripts a few times, they will become essential to your SQL troubleshooting tool kit.
-- SQL Managed Instance Diagnostic Information Queries-- Glenn Berry -- Last Modified: April 1, 2023-- https://glennsqlperformance.com/-- https://sqlserverperformance.wordpress.com/-- YouTube: https://bit.ly/2PkoAM1 -- Twitter: GlennAlanBerry-- Diagnostic Queries are available here-- https://glennsqlperformance.com/resources/-- If you like PowerShell, there is a very useful community solution for running these queries in an automated fashion-- https://dbatools.io/-- Invoke-DbaDiagnosticQuery-- https://dbatools.io/functions/invoke-dbadiagnosticquery/--******************************************************************************--* Copyright (C) 2022 Glenn Berry--* All rights reserved. --*--*--* You may alter this code for your own non-commercial purposes. You may--* republish altered code as long as you include this copyright and give due credit. --*--*--* THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF --* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED --* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A--* PARTICULAR PURPOSE. --*--******************************************************************************-- Check the major product version to see if it is SQL Managed Instance -- Instance level queries *******************************-- SQL and OS Version information for current instance (Query 1) (Version Info)
------ -- The version number from @@VERSION will not match what is in the SQL Server error log-- How to determine the version, edition and update level of SQL Server and its components -- https://bit.ly/2oAjKgW -- Download SQL Server Management Studio (SSMS)-- https://bit.ly/1OcupT9-- Download and install Azure Data Studio -- https://bit.ly/2vgke1A-- Get selected server properties (Query 2) (Server Properties); -------- This gives you a lot of useful information about your "instance" of SQL Managed Instance-- SERVERPROPERTY (Transact-SQL)-- https://bit.ly/2eeaXeI-- Get instance-level configuration values for instance (Query 3) (Configuration Values);
-------- Focus on these settings:-- automatic soft-NUMA disabled (should be 0 in most cases)-- backup checksum default (should be 1)-- backup compression default (should be 1 in most cases)-- clr enabled (only enable if it is needed)-- cost threshold for parallelism (depends on your workload)-- lightweight pooling (should be zero)-- max degree of parallelism (depends on your workload and hardware)-- max server memory (MB) (set to an appropriate value, not the default)-- optimize for ad hoc workloads (should be 1)-- priority boost (should be zero)-- remote admin connections (should be 1)-- sys.configurations (Transact-SQL)-- https://bit.ly/2HsyDZI-- SQL Server Process Address space info (Query 4) (Process Memory)-- (shows whether locked pages is enabled, among other things)You want to see 0 for process_physical_memory_low-- You want to see 0 for process_virtual_memory_low-- This indicates that you are not under internal memory pressure-- If locked_page_allocations_kb > 0, then LPIM is enabled-- How to enable the "locked pages" feature in SQL Server 2012-- https://bit.ly/2F5UjOA-- Memory Management Architecture Guide-- https://bit.ly/2JKkadC-- Get SQL Server Agent jobs and Category information (Query 5) (SQL Server Agent Jobs)
-------- Gives you some basic information about your SQL Server Agent jobs, who owns them and how they are configured-- Look for Agent jobs that are not owned by sa-- Look for jobs that have a notify_email_operator_id set to 0 (meaning no operator)-- Look for jobs that have a notify_level_email set to 0 (meaning no e-mail is ever sent)---- MSDN sysjobs documentation-- https://bit.ly/2paDEOP-- SQL Server NUMA Node information (Query 6) (SQL Server NUMA Info
-------- Gives you some useful information about the composition and relative load on your NUMA nodes-- You want to see an equal number of schedulers on each NUMA node-- sys.dm_os_nodes (Transact-SQL)-- https://bit.ly/2pn5Mw8-- Balancing Your Available SQL Server Core Licenses Evenly Across NUMA Nodes-- https://bit.ly/2vfC4Rq-- Server Resource Statistics (Query 7) (Server Resource Stats)
-------- Shows recent resource usage, in 15-second slices-- sys.server_resource_stats (Azure SQL Database)-- https://bit.ly/3qUgHiz-- Overview of Azure SQL Managed Instance resource limits-- https://bit.ly/3pACjkl-- SQL Managed Instance Pricing-- https://bit.ly/2XlEE2u-- Hardware information from SQL Managed Instance (Query 8) (Hardware Info)
-------- Gives you some good basic hardware information about your database server-- Note: virtual_machine_type_desc of HYPERVISOR does not automatically mean you are running SQL Server inside of a VM-- It merely indicates that you have a hypervisor running on your host-- sys.dm_os_sys_info (Transact-SQL)-- https://bit.ly/2pczOYs-- Soft NUMA configuration was a new column for SQL Server 2016-- OFF = Soft-NUMA feature is OFF-- ON = SQL Server automatically determines the NUMA node sizes for Soft-NUMA-- MANUAL = Manually configured soft-NUMA-- Configure SQL Server to Use Soft-NUMA (SQL Server)-- https://bit.ly/2HTpKJt-- sql_memory_model_desc values (Added in SQL Server 2016 SP1)-- CONVENTIONAL-- LOCK_PAGES-- LARGE_PAGES -- Get information on location, time and size of any memory dumps from SQL Server (Query 9) (Memory Dump Info)
-------- This will not return any rows if you have -- not had any memory dumps (which is a good thing)-- sys.dm_server_memory_dumps (Transact-SQL)-- https://bit.ly/2elwWll-- Look at Suspect Pages table (Query 10) (Suspect Pages)
-------- event_type value descriptions-- 1 = 823 error caused by an operating system CRC error-- or 824 error other than a bad checksum or a torn page (for example, a bad page ID)-- 2 = Bad checksum-- 3 = Torn page-- 4 = Restored (The page was restored after it was marked bad)-- 5 = Repaired (DBCC repaired the page)-- 7 = Deallocated by DBCC-- Ideally, this query returns no results. The table is limited to 1000 rows.-- If you do get results here, you should do further investigation to determine the root cause-- Manage the suspect_pages Table-- https://bit.ly/2Fvr1c9-- File names and paths for all user and system databases on instance (Query 11) (Database Filenames and Paths
-------- Things to look at:-- Are data files and log files on different drives?-- Is everything on the C: drive?-- Is tempdb on dedicated drives?-- Is there only one tempdb data file?-- Are all of the tempdb data files the same size?-- Are there multiple data files for user databases?-- Is percent growth enabled for any files (which is bad)?-- Volume info for all LUNS that have database files on the current instance (Query 12) (Volume Info)
-------- Shows you the total and free space on the LUNs where you have database files-- Being low on free space can negatively affect performance-- sys.dm_os_volume_stats (Transact-SQL)-- https://bit.ly/2oBPNNr-- Drive level latency information (Query 13) (Drive Level Latency)
-------- Shows you the drive-level latency for reads and writes, in milliseconds-- Latency above 30-40ms is usually a problem-- These latency numbers include all file activity against all SQL Server -- database files on each drive since SQL Server was last started-- Calculates average latency per read, per write, and per total input/output for each database file (Query 14) (IO Latency by File)
-------- Helps determine which database files on the entire instance have the most I/O bottlenecks-- This can help you decide whether certain LUNs are overloaded and whether you might-- want to move some files to a different location or perhaps improve your I/O performance-- These latency numbers include all file activity against each SQL Server -- database file since SQL Server was last started-- Look for I/O requests taking longer than 15 seconds in the six most recent SQL Server Error Logs (Query 15) (IO Warnings)
------ -- Finding 15 second I/O warnings in the SQL Server Error Log is useful evidence of-- poor I/O performance (which might have many different causes)-- Look to see if you see any patterns in the results (same files, same drives, same time of day, etc.)-- Diagnostics in SQL Server help detect stalled and stuck I/O operations-- https://bit.ly/2qtaw73-- Recovery model, log reuse wait description (Query 16) (Database Properties)-- and compatibility level for all databases on instance
-------- sys.databases (Transact-SQL)-- https://bit.ly/2G5wqaX-- sys.dm_os_performance_counters (Transact-SQL)-- https://bit.ly/3kEO2JR-- sys.dm_database_encryption_keys (Transact-SQL)-- https://bit.ly/3mE7kkx-- Things to look at:-- How many databases are on the instance?-- What recovery models are they using?-- What is the log reuse wait description?-- What compatibility level are the databases on? -- Is Auto Update Statistics Asynchronously enabled?-- Is Delayed Durability enabled-- Make sure auto_shrink is not enabled!-- is_mixed_page_allocation_on is a new property for SQL Server 2016. Equivalent to TF 1118 for a user database-- SQL Server 2016: Changes in default behavior for autogrow and allocations for tempdb and user databases-- https://bit.ly/2evRZSR-- A non-zero value for target_recovery_time_in_seconds means that indirect checkpoint is enabled -- If the setting has a zero value it indicates that automatic checkpoint is enabled-- https://docs.microsoft.com/en-us/azure/sql-database/sql-database-managed-instance-transact-sql-information-- Missing Indexes for all databases by Index Advantage (Query 17) (Missing Indexes All Databases)
-------- Getting missing index information for all of the databases on the instance is very useful-- Look at last user seek time, number of user seeks to help determine source and importance-- Also look at avg_user_impact and avg_total_user_cost to help determine importance-- SQL Server is overly eager to add included columns, so beware-- Do not just blindly add indexes that show up from this query!!!-- SQL Server Index Design Guide-- https://bit.ly/2qtZr4N-- Get VLF Counts for all databases on the instance (Query 18) (VLF Counts)
-------- High VLF counts can affect write performance to the log file-- and they can make full database restores and crash recovery take much longer-- Try to keep your VLF counts under 200 in most cases (depending on log file size)-- Important change to VLF creation algorithm in SQL Server 2014-- https://bit.ly/2Hsjbg4-- SQL Server Transaction Log Architecture and Management Guide-- https://bit.ly/2JjmQRZ-- Get CPU utilization by database (Query 19) (CPU Usage by Database)
-------- Helps determine which database is using the most CPU resources on the instance-- There are two copies on the master database. The low DatabaseID is the physical master, -- and the high DatabaseID is the replicated master-- Note: This only reflects CPU usage from the currently cached query plans-- Get I/O utilization by database (Query 20) (IO Usage By Database)
-------- Helps determine which database is using the most I/O resources on the instance-- These numbers are cumulative since the last service restart-- They include all I/O activity, not just the nominal I/O workload-- Get total buffer usage by database for current instance (Query 21) (Total Buffer Usage by Database)-- This make take some time to run on a busy instance
-------- Tells you how much memory (in the buffer pool) -- is being used by each database on the instance-- Get tempdb version store space usage by database (Query 22) (Version Store Space Usage)
------ -- sys.dm_tran_version_store_space_usage (Transact-SQL)-- https://bit.ly/2vh3Bmk-- Clear Wait Stats with this command-- DBCC SQLPERF('sys.dm_os_wait_stats', CLEAR);-- Isolate top waits for server instance since last restart or wait statistics clear (Query 23) (Top Waits)
-------- Cumulative wait stats are not as useful on an idle instance that is not under load or performance pressure-- SQL Server Wait Types Library-- https://bit.ly/2ePzYO2-- The SQL Server Wait Type Repository-- https://bit.ly/1afzfjC-- Wait statistics, or please tell me where it hurts-- https://bit.ly/2wsQHQE-- SQL Server 2005 Performance Tuning using the Waits and Queues-- https://bit.ly/1o2NFoF-- sys.dm_os_wait_stats (Transact-SQL)-- https://bit.ly/2Hjq9Yl-- And #(Connection Counts by IP Address)
-------- This helps you figure where your database load is coming from-- and verifies connectivity from other machines-- Solving Connectivity errors to SQL Server-- https://bit.ly/2EgzoD0-- Get Average Task Counts (run multiple times) (Query 25) (Avg Task Counts)
-------- Sustained values above 10 suggest further investigation in that area-- High Avg Task Counts are often caused by blocking/deadlocking or other resource contention-- Sustained values above 1 suggest further investigation in that area-- High Avg Runnable Task Counts are a good sign of CPU pressure-- High Avg Pending DiskIO Counts are a sign of disk pressure-- How to Do Some Very Basic SQL Server Monitoring-- https://bit.ly/2q3Btgt-- Detect blocking (run multiple times) (Query 26) (Detect Blocking)
-------- Helps troubleshoot blocking and deadlocking issues-- The results will change from second to second on a busy system-- You should run this query multiple times when you see signs of blocking-- Get CPU Utilization History for last 256 minutes (in one minute intervals) (Query 27) (CPU Utilization History)
-------- Look at the trend over the entire period -- Also look at high sustained 'Other Process' CPU Utilization values-- Note: This query sometimes gives inaccurate results (negative values)-- on high core count (> 64 cores) systems-- Get top total worker time queries for entire instance (Query 28) (Top Worker Time Queries)
-------- Helps you find the most expensive queries from a CPU perspective across the entire instance-- Can also help track down parameter sniffing issues-- Page Life Expectancy (PLE) value for each NUMA node in current instance (Query 29) (PLE by NUMA Node)
-------- PLE is a good measurement of internal memory pressure-- Higher PLE is better. Watch the trend over time, not the absolute value-- This will only return one row for non-NUMA systems-- Page Life Expectancy isnt what you think-- https://bit.ly/2EgynLa-- Memory Grants Pending value for current instance (Query 30) (Memory Grants Pending)
-------- Run multiple times, and run periodically if you suspect you are under memory pressure-- Memory Grants Pending above zero for a sustained period is a very strong indicator of internal memory pressure-- Memory Clerk Usage for instance (Query 31) (Memory Clerk Usage)-- Look for high value for CACHESTORE_SQLCP (Ad-hoc query plans)
-------- MEMORYCLERK_SQLBUFFERPOOL was new for SQL Server 2012. It should be your highest consumer of memory-- CACHESTORE_SQLCP SQL Plans -- These are cached SQL statements or batches that aren't in stored procedures, functions and triggers-- Watch out for high values for CACHESTORE_SQLCP-- Enabling 'optimize for ad hoc workloads' at the instance level can help reduce this-- Running DBCC FREESYSTEMCACHE ('SQL Plans') periodically may be required to better control this-- CACHESTORE_OBJCP Object Plans -- These are compiled plans for stored procedures, functions and triggers-- sys.dm_os_memory_clerks (Transact-SQL)-- https://bit.ly/2H31xDR-- Find single-use, ad-hoc and prepared queries that are bloating the plan cache (Query 32) (Ad hoc Queries)
-------- Gives you the text, type and size of single-use ad-hoc and prepared queries that waste space in the plan cache-- Enabling 'optimize for ad hoc workloads' for the instance can help (SQL Server 2008 and above only)-- Running DBCC FREESYSTEMCACHE ('SQL Plans') periodically may be required to better control this-- Enabling forced parameterization for the database can help, but test first!-- Plan cache, adhoc workloads and clearing the single-use plan cache bloat-- https://bit.ly/2EfYOkl-- Get top total logical reads queries for entire instance (Query 33) (Top Logical Reads Queries)SELECT TOP(50)
-------- Helps you find the most expensive queries from a memory perspective across the entire instance-- Can also help track down parameter sniffing issues-- Get top average elapsed time queries for entire instance (Query 34) (Top Avg Elapsed Time Queries)
-------- Helps you find the highest average elapsed time queries across the entire instance-- Can also help track down parameter sniffing issues-- Look at UDF execution statistics (Query 35) (UDF Stats by DB)SELECT TOP (25)
-------- sys.dm_exec_function_stats (Transact-SQL)-- https://bit.ly/2q1Q6BM-- Showplan Enhancements for UDFs-- https://bit.ly/2LVqiQ1-- Database specific queries *****************************************************************-- **** Please switch to a user database that you are interested in! *****--USE YourDatabaseName; -- make sure to change to an actual database on your instance, not the master system database--GO-- Individual File Sizes and space available for current database (Query 36) (File Sizes and Space)
-------- Look at how large and how full the files are and where they are located-- Make sure the transaction log is not full!!-- is_autogrow_all_files was new for SQL Server 2016. Equivalent to TF 1117 for user databases-- SQL Server 2016: Changes in default behavior for autogrow and allocations for tempdb and user databases-- https://bit.ly/2evRZSR-- Log space usage for current database (Query 37) (Log Space Usage)
-------- Look at log file size and usage, along with the log reuse wait description for the current database-- sys.dm_db_log_space_usage (Transact-SQL)-- https://bit.ly/2H4MQw9-- Status of last VLF for current database (Query 38) (Last VLF Status)
-------- Determine whether you will be able to shrink the transaction log file-- vlf_status Values-- 0 is inactive -- 1 is initialized but unused -- 2 is active-- sys.dm_db_log_info (Transact-SQL)-- https://bit.ly/2EQUU1v-- Get database scoped configuration values for current database (Query 39) (Database-scoped Configurations)
-------- This lets you see the value of these new properties for the current database-- Clear plan cache for current database-- ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;-- ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)-- https://bit.ly/2sOH7nb-- I/OStatistics by file for the current database (Query 40) (IO Stats By File)
-------- This helps you characterize your workload better from an I/O perspective for this database-- It helps you determine whether you has an OLTP or DW/DSS type of workload-- Get most frequently executed queries for this database (Query 41) (Query Execution Counts)
-------- Queries 48 through 53 are the "Bad Man List" for stored procedures-- Top Cached SPs By Execution Count (Query 42) (SP Execution Counts)
-------- Tells you which cached stored procedures are called the most often-- This helps you characterize and baseline your workload-- Top Cached SPs By Avg Elapsed Time (Query 43) (SP Avg Elapsed Time)
-------- This helps you find high average elapsed time cached stored procedures that-- may be easy to optimize with standard query tuning techniques-- Top Cached SPs By Total Worker time. Worker time relates to CPU cost (Query 44) (SP Worker Time)
-------- This helps you find the most expensive cached stored procedures from a CPU perspective-- You should look at this if you see signs of CPU pressure-- Top Cached SPs By Total Logical Reads. Logical reads relate to memory pressure (Query 45) (SP Logical Reads)
-------- This helps you find the most expensive cached stored procedures from a memory perspective-- You should look at this if you see signs of memory pressure-- Top Cached SPs By Total Physical Reads. Physical reads relate to disk read I/O pressure (Query 46) (SP Physical Reads)
-------- This helps you find the most expensive cached stored procedures from a read I/O perspective-- You should look at this if you see signs of I/O pressure or of memory pressure -- Top Cached SPs By Total Logical Writes (Query 47) (SP Logical Writes)-- Logical writes relate to both memory and disk I/O pressure
-------- This helps you find the most expensive cached stored procedures from a write I/O perspective-- You should look at this if you see signs of I/O pressure or of memory pressure-- Cached SPs Missing Indexes by Execution Count (Query 48) (SP Missing Index)
-------- This helps you find the most frequently executed cached stored procedures that have missing index warnings-- This can often help you find index tuning candidates-- Lists the top statements by average input/output usage for the current database (Query 49) (Top IO Statements)
-------- Helps you find the most expensive statements for I/O by SP-- Possible Bad NC Indexes (writes > reads) (Query 50) (Bad NC Indexes)
-------- Look for indexes with high numbers of writes and zero or very low numbers of reads-- Consider your complete workload, and how long your instance has been running-- Investigate further before dropping an index!-- Missing Indexes for current database by Index Advantage (Query 51) (Missing Indexes)
-------- Look at index advantage, last user seek time, number of user seeks to help determine source and importance-- SQL Server is overly eager to add included columns, so beware-- Do not just blindly add indexes that show up from this query!!!-- Find missing index warnings for cached plans in the current database (Query 52) (Missing Index Warnings)-- Note: This query could take some time on a busy instance
-------- Helps you connect missing indexes to specific stored procedures or queries-- This can help you decide whether to add them or not-- Breaks down buffers used by current database by object (table, index) in the buffer cache (Query 53) (Buffer Usage)-- Note: This query could take some time on a busy instance
-------- Tells you what tables and indexes are using the most memory in the buffer cache-- It can help identify possible candidates for data compression-- Get Table names, row counts, and compression status for clustered index or heap (Query 54) (Table Sizes)
-------- Gives you an idea of table sizes, and possible data compression opportunities-- Get some key table properties (Query 55) (Table Properties)
-------- Gives you some good information about your tables-- is_memory_optimized and durability_desc were new in SQL Server 2014-- temporal_type_desc, is_remote_data_archive_enabled, is_external were new in SQL Server 2016-- sys.tables (Transact-SQL)-- https://bit.ly/2Gk7998-- When were Statistics last updated on all indexes? (Query 56) (Statistics Update)
------ -- Helps discover possible problems with out-of-date statistics-- Also gives you an idea which indexes are the most active-- sys.stats (Transact-SQL)-- https://bit.ly/2GyAxrn-- UPDATEs to Statistics (Erin Stellato)-- https://bit.ly/2vhrYQy-- Look at most frequently modified indexes and statistics (Query 57) (Volatile Indexes)
-------- This helps you understand your workload and make better decisions about -- things like data compression and adding new indexes to a table-- Get fragmentation info for all indexes above a certain size in the current database (Query 58) (Index Fragmentation)-- Note: This query could take some time on a very large database
;-------- Helps determine whether you have framentation in your relational indexes-- and how effective your index maintenance strategy is--- Index Read/Write stats (all tables in current DB) ordered by Reads (Query 59) (Overall Index Usage - Reads)
-- Order by reads-------- Show which indexes in the current database are most active for Reads--- Index Read/Write stats (all tables in current DB) ordered by Writes (Query 60) (Overall Index Usage - Writes)
-------- Show which indexes in the current database are most active for Writes-- Look at Columnstore index physical statistics (Query 61) (Columnstore Index Physical Stat)
-------- sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)-- https://bit.ly/2q276XQ-- Get lock waits for current database (Query 62) (Lock Waits)
-------- This query is helpful for troubleshooting blocking and deadlocking issues-- sys.dm_db_index_operational_stats (Transact-SQL)-- https://bit.ly/3l5rGEw-- Look at UDF execution statistics (Query 63) (UDF Statistics)
-------- New for SQL Server 2016-- Helps you investigate scalar UDF performance issues-- Does not return information for table valued functions-- sys.dm_exec_function_stats (Transact-SQL)-- https://bit.ly/2q1Q6BM-- Determine which scalar UDFs are in-lineable (Query 64) (Inlineable UDFs)
-------- Scalar UDF Inlining-- https://bit.ly/2JU971M-- sys.sql_modules (Transact-SQL)-- https://bit.ly/2Qt216S-- Get QueryStore Options for this database (Query 65) (QueryStore Options)
-------- New for SQL Server 2016-- Requires that Query Store is enabled for this database-- Make sure that the actual_state_desc is the same as desired_state_desc-- Make sure that the current_storage_size_mb is less than the max_storage_size_mb-- Tuning Workload Performance with Query Store-- https://bit.ly/1kHSl7w-- Get input buffer information for the current database (Query 66) (Input Buffer)
-------- Gives you input buffer information from all non-system sessions for the current database-- Replaces DBCC INPUTBUFFER-- New DMF for retrieving input buffer in SQL Server-- https://bit.ly/2uHKMbz-- sys.dm_exec_input_buffer (Transact-SQL)-- https://bit.ly/2J5Hf9q-- Get any resumable index rebuild operation information (Query 67) (Resumable Index Rebuild)
------ -- index_resumable_operations (Transact-SQL)-- https://bit.ly/2pYSWqq-- Get database automatic tuning options (Query 68) (Automatic Tuning Options)
------ -- sys.database_automatic_tuning_options (Transact-SQL)-- https://bit.ly/2FHhLkL-- Look at recent Full backups for the current database (Query 69) (Recent Full Backups)
-------- Automatic database backups by the MI Service will not appear in this list-- Are your backup sizes and times changing over time?-- Are you using backup compression?-- Are you using backup checksums?-- Are you doing copy_only backups?-- Are you doing encrypted backups?-- Have you done any backup tuning with striped backups, or changing the parameters of the backup command?-- In SQL Server 2016, native SQL Server backup compression actually works -- much better with databases that are using TDE than in previous versions-- https://bit.ly/28Rpb2x-- Microsoft Visual Studio Dev Essentials-- https://bit.ly/2qjNRxi-- Microsoft Azure Learn-- https://bit.ly/2O0Hacc
The above is saved on my mobile phone as a quick guide to see if this is the correct tool for the job. Use the link below for complete details.
https://glennsqlperformance.com/resources/