Skip to content

Instantly share code, notes, and snippets.

View EitanBlumin's full-sized avatar
🕵️‍♂️
Figuring it out

Eitan Blumin EitanBlumin

🕵️‍♂️
Figuring it out
View GitHub Profile
@EitanBlumin
EitanBlumin / Parse Vulnerability Assessment Result Files into HTML.sql
Last active June 3, 2022 09:32
Script to parse multiple Vulnerability Assessment Tool result files into an HTML reference list ( https://eitanblumin.com/sql-vulnerability-assessment-tool-rules-reference-list/ )
/******************************************************************
Parse SQL Vulnerability Assessment Tool Results
***********************************************
Author: Eitan Blumin | https://www.eitanblumin.com
Description:
Use this script to parse a Vulnerability Assessment Tool
results file into a relational structure and save in an HTML page.
This will output the T-SQL queries used by VAT behind the scenes
and their respective meta-data, as displayed in the VAT.
@EitanBlumin
EitanBlumin / MaxDOP_Configuration_Check.sql
Created September 16, 2020 10:09
T-SQL script to check and make sure that the configured MAXDOP is in the recommended range based on Microsoft best practice
/*
Check that the configured value for MAXDOP is in the recommended range, as described in this KB article:
https://support.microsoft.com/en-us/help/2806535/recommendations-and-guidelines-for-the-max-degree-of-parallelism-confi
If @WhatIf = 0 then MAXDOP will automatically be changed to the recommended setting.
*/
-- change this to 1 to only display findings without actually changing the config:
DECLARE @WhatIf BIT = 0;
--------------------------------------
@EitanBlumin
EitanBlumin / access_violation_dm_db_index_operational_stats.sql
Last active October 4, 2020 20:08
psst! hey, kid! wanna see an access violation error? here, run this on a SQL Server with MAXDOP != 1
/*
=================================================
Reproduce an access violation error in SQL Server
=================================================
The following script reproduces an Access Violation error
caused by a parallelism plan involving specific system table functions.
The error occurses ONLY with parallel execution plans.
Discovered by Eitan Blumin and Nathan Lifshes on 2020-09-06
The error has been reproduced in multiple SQL Server versions that were tested:
@EitanBlumin
EitanBlumin / SentryOne_AlwaysOn_Inventory_Check.sql
Created August 20, 2020 08:53
Query to run in the SentryOne database to check your inventory of AlwaysOn Availability Groups
SELECT SiteName, ReplicaName
, NumberOfAvailabilityGroups = COUNT(DISTINCT AGName)
, NumberOfPrimaries = COUNT(DISTINCT PrimaryReplica)
FROM
(
SELECT DISTINCT
ES.ObjectName AS ReplicaName, S.Name AS SiteName
, AG.Name AS AGName
, AG.PrimaryReplica
FROM [SentryOne].[AlwaysOn].[AvailabilityGroup] AS AG
@EitanBlumin
EitanBlumin / Find_Top_Exec_Plans_to_Optimize.sql
Last active November 15, 2022 02:06
T-SQL script to find cached execution plans with good potential for performance optimization (warnings, missing indexes, bad operators, etc.)
/*
=======================================================
Find Top Exec Plans to Optimize
=======================================================
Author: Eitan Blumin | eitanblumin.com , madeiradata.com
Date: 2020-08-12
Description:
Use this script to discover execution plans with a good
potential for performance optimization.
Finds execution plans with warnings and problematic operators.
@EitanBlumin
EitanBlumin / MoveHistoricalDataForTable.sql
Created July 30, 2020 14:16
Stored procedure to move time-based data from one table to another, for archiving historical data
IF OBJECT_ID('dbo.ArchivingActivityLog') IS NULL
BEGIN
CREATE TABLE dbo.ArchivingActivityLog
(
Id INT NOT NULL IDENTITY(1,1),
SourceTable SYSNAME NOT NULL,
Command NVARCHAR(MAX) NULL,
StartTime DATETIME NOT NULL CONSTRAINT DF_ArchivingActivityLog_StartTime DEFAULT (GETDATE()),
EndTime DATETIME NULL,
RowsMoved INT NULL,
@EitanBlumin
EitanBlumin / detect_not_secured_connections.sql
Last active November 16, 2021 08:52
T-SQL monitoring script to make sure that all connections to the SQL Server instance are secured with SSL
/*
Detect Non Secured Connections (SSL) to the SQL Server instance
===============================================================
Author: Eitan Blumin (t: @EitanBlumin | b: eitanblumin.com)
Last Update: 2020-07-15
Description: Use this to make sure that all connections to the SQL Server instance are secured with SSL.
*/
SELECT CONCAT('Not secured connection(s) detected of '
, ISNULL(QUOTENAME(COALESCE(ses.original_login_name, ses.nt_user_name, ses.login_name)), 'an unknown login')
, ' from ', ISNULL(QUOTENAME(client_net_address), 'an unknown address')
@EitanBlumin
EitanBlumin / find_unused_indexes_all_databases.sql
Created June 30, 2020 10:13
Find all unused indexes across all of your databases. Supports both on-premise instances, as well as Azure SQL Databases.
/*
Author: Eitan Blumin (t: @EitanBlumin | b: https://eitanblumin.com)
Description: Use this script to retrieve all unused indexes across all of your databases.
The data returned includes various index usage statistics and a corresponding drop command.
Supports both on-premise instances, as well as Azure SQL Databases.
*/
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
DECLARE @CMD NVARCHAR(MAX);
SET @CMD = N'
PRINT DB_NAME();
@EitanBlumin
EitanBlumin / GeneratePeriods_Inline.sql
Last active November 16, 2021 08:57
Table Function to generate periods for time series, based on an end date, period type, and number of periods back
/*
Author: Eitan Blumin (t: @EitanBlumin | b: https://eitanblumin.com)
Date Created: 2013-09-01
Last Update: 2020-07-28
Description:
CTE-based Inline Table Function to generate periods for time series, based on an end date, period type, and number of periods back.
Supported period types:
MI - Minute
H - Hour
@EitanBlumin
EitanBlumin / Script.PreDeployment.CLR_Signing.sql
Created June 19, 2020 09:19
Pre-Deployment Script Template for Importing a Signed CLR Assembly (SSDT Project)
/*
Pre-Deployment Script Template for Importing a Signed CLR Assembly (SSDT Project)
--------------------------------------------------------------------------------------
In order to use this script, you must configure the following SQLCMD Variables in your project:
$(PathToSignedDLL)
$(CLRKeyName)
$(CLRLoginName)
To configure your SQLCMD Variables: Right-click on your DB project, select "Properties", and go to "SQLCMD Variables".