Skip to content

Instantly share code, notes, and snippets.

@petesql
petesql / logging_sp_who2_to_table.sql
Created February 25, 2025 18:32
Logging sp_who2 Results to Table
-- logging sp_who2 results to table
CREATE TABLE #sp_who2 (
SPID INT,
Status VARCHAR(MAX),
Login VARCHAR(MAX),
HostName VARCHAR(MAX),
BlkBy VARCHAR(MAX),
DBName VARCHAR(MAX),
Command VARCHAR(MAX),
CPUTime INT,
@petesql
petesql / select-from-sysjobs.sql
Created February 15, 2025 22:19
Show all SQL Agent Jobs (without steps)
-- Show all SQL Agent Jobs (without steps)
SELECT * FROM msdb.dbo.sysjobs;
@petesql
petesql / list-agent-jobs-with-info.sql
Created February 15, 2025 22:16
List SQL Agent Jobs Script
-- List all SQL Agent jobs with schedule details
SELECT
j.job_id,
j.name,
j.description,
j.enabled,
j.date_created,
j.date_modified,
s.step_id,
s.step_name,
@petesql
petesql / get-exclusive-locks-sql-server.sql
Created January 23, 2025 22:04
Get Exclusive Locks for Tables in SQL Server
-- show exclusive locks on tables for a database
DECLARE @DatabaseName NVARCHAR(128) = 'database01'
DECLARE @DatabaseID INT = DB_ID(@DatabaseName)
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'
USE ' + QUOTENAME(@DatabaseName) + ';
SELECT
ses.login_name AS UserName,
ses.session_id AS SessionID,
@petesql
petesql / get-database-file-sizes-with-free-space.sql
Created January 13, 2025 21:54
Get Database Files Sizes and Free Space
-- Create temp table for storing database size information
DECLARE @command NVARCHAR(MAX);
DROP TABLE IF EXISTS #MSSQL_Database_Sizes;
CREATE TABLE #MSSQL_Database_Sizes (
[database_name] NVARCHAR(MAX) NULL,
current_size_mb INT NULL,
freespace_mb INT NULL,
collection_date DATE NULL
);
@petesql
petesql / get-last-backups-all-databases.sql
Created January 13, 2025 20:54
Get Last Backups All Databases
-- Show last backups on all databases
SELECT
ISNULL(d.[name], bs.[database_name]) AS [Database], d.recovery_model_desc AS [Recovery Model],
MAX(CASE WHEN [type] = 'D' THEN bs.backup_finish_date ELSE NULL END) AS [Last Full Backup],
MAX(CASE WHEN [type] = 'I' THEN bs.backup_finish_date ELSE NULL END) AS [Last Differential Backup],
MAX(CASE WHEN [type] = 'L' THEN bs.backup_finish_date ELSE NULL END) AS [Last Log Backup]
FROM
sys.databases AS d WITH (NOLOCK)
LEFT OUTER JOIN msdb.dbo.backupset AS bs WITH (NOLOCK)
ON bs.[database_name] = d.[name]
@petesql
petesql / generate-sql-move-temp-db.sql
Created January 9, 2025 12:32
Generate SQL: Move TempDB Database Files
-- Prepare SQL for TempDB Database File Move
SELECT 'ALTER DATABASE tempdb MODIFY FILE (NAME = [' + f.name + '],'
+ ' FILENAME = ''Z:\MSSQL\DATA\' + f.name
+ CASE WHEN f.type = 1 THEN '.ldf' ELSE '.mdf' END
+ ''');'
FROM sys.master_files f
WHERE f.database_id = DB_ID(N'tempdb');
@petesql
petesql / get-unused-indexes.sql
Created December 19, 2024 19:48
Show Unused Indexes SQL Server
-- This query retrieves and suggests unused index information from the DMV (Dynamic Management Views) in SQL Server.
-- It identifies unused or rarely used non-clustered indexes and generates DROP INDEX statements for them.
SELECT TOP 25
o.name AS ObjectName,
i.name AS IndexName,
i.index_id AS IndexID,
dm_ius.user_seeks AS UserSeek,
dm_ius.user_scans AS UserScans,
dm_ius.user_lookups AS UserLookups,
@petesql
petesql / get-missing-indexes.sql
Created December 19, 2024 19:45
Show Missing Indexes SQL Server
-- This query retrieves and suggests missing index information from the DMV (Dynamic Management Views) in SQL Server.
-- It calculates an improvement measure for each missing index and generates a CREATE INDEX statement to address the missing index.
SELECT
CONVERT(varchar(30), GETDATE(), 126) AS runtime,
mig.index_group_handle,
mid.index_handle,
CONVERT(decimal(28, 1), migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans)) AS improvement_measure,
'CREATE INDEX missing_index_' +
CONVERT(varchar, mig.index_group_handle) + '_' +
@petesql
petesql / get-index-fragmentation.sql
Created December 19, 2024 13:36
Get Index Fragmentation Levels SQL Server
-- Script to retrieve index fragmentation levels in SQL Server
-- This script will list fragmented indexes in the database, showing table name, index name, fragmentation percentage, and more
SELECT
OBJECT_NAME(s.OBJECT_ID) AS TableName, -- Table name where the index is located
i.name AS IndexName, -- Name of the index
ROUND(s.avg_fragmentation_in_percent, 2) AS FragmentationPercentage, -- Fragmentation percentage rounded to 2 decimal places
s.page_count AS PageCount, -- Number of pages used by the index
i.type_desc AS IndexType, -- Type of the index (Clustered, Nonclustered, etc.)
s.stats_id AS StatsID -- Statistics ID for the index
FROM