Skip to content

Commit 6a88a53

Browse files
authored
Merge pull request #23 from newrelic/ftr/add-mssql-new-relic-setup-init
feat: new relic mssql integration set up in the init.sql
2 parents 6b53163 + a2b41a8 commit 6a88a53

File tree

1 file changed

+118
-2
lines changed

1 file changed

+118
-2
lines changed

transaction_service/mssql/init.sql

Lines changed: 118 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,69 @@ BEGIN
1818
END;
1919
GO
2020

21+
-- ==============================================================================
22+
-- NEW RELIC MONITORING SETUP - SERVER LEVEL
23+
-- ==============================================================================
24+
25+
-- Create New Relic login and user if it doesn't exist
26+
USE master;
27+
GO
28+
29+
IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = 'newrelic')
30+
BEGIN
31+
CREATE LOGIN newrelic WITH PASSWORD = 'YourStrong@Password!';
32+
PRINT 'Created New Relic login';
33+
END
34+
ELSE
35+
BEGIN
36+
PRINT 'New Relic login already exists, skipping creation';
37+
END;
38+
GO
39+
40+
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = 'newrelic')
41+
BEGIN
42+
CREATE USER newrelic FOR LOGIN newrelic;
43+
PRINT 'Created New Relic user in master';
44+
END;
45+
GO
46+
47+
-- Grant server-level permissions to newrelic user
48+
IF EXISTS (SELECT * FROM sys.server_principals WHERE name = 'newrelic')
49+
BEGIN
50+
-- These GRANT statements are idempotent - they won't error if already granted
51+
GRANT CONNECT SQL TO newrelic;
52+
GRANT VIEW SERVER STATE TO newrelic; -- Required for DMVs (sys.dm_exec_*)
53+
GRANT VIEW ANY DEFINITION TO newrelic; -- Required for execution plans
54+
PRINT 'Granted server-level permissions to New Relic user';
55+
END;
56+
GO
57+
58+
-- Disable 'optimize for ad hoc workloads' setting
59+
-- This ensures that query plans are cached immediately instead of only storing stubs
60+
DECLARE @adhoc_current INT;
61+
SELECT @adhoc_current = CONVERT(INT, value_in_use)
62+
FROM sys.configurations
63+
WHERE name = 'optimize for ad hoc workloads';
64+
65+
IF @adhoc_current = 1
66+
BEGIN
67+
PRINT 'Disabling ad hoc workload optimization for better monitoring...';
68+
EXEC sp_configure 'show advanced options', 1;
69+
RECONFIGURE;
70+
EXEC sp_configure 'optimize for ad hoc workloads', 0;
71+
RECONFIGURE;
72+
PRINT 'Ad hoc optimization disabled';
73+
END
74+
ELSE
75+
BEGIN
76+
PRINT 'Ad hoc optimization already disabled';
77+
END;
78+
GO
79+
80+
-- ==============================================================================
81+
-- DATABASE SETUP - RELIBANK
82+
-- ==============================================================================
83+
2184
-- Switch to the new database
2285
USE RelibankDB;
2386
GO
@@ -37,6 +100,7 @@ BEGIN
37100
CancellationUserID VARCHAR(50),
38101
CancellationTimestamp FLOAT
39102
);
103+
PRINT 'Created Transactions table';
40104
END;
41105
GO
42106

@@ -47,6 +111,7 @@ BEGIN
47111
AccountID INT PRIMARY KEY,
48112
CurrentBalance DECIMAL(19, 4) NOT NULL
49113
);
114+
PRINT 'Created Ledger table';
50115
END;
51116
GO
52117

@@ -85,15 +150,66 @@ BEGIN
85150
StartDate DATE NOT NULL,
86151
Timestamp FLOAT NOT NULL
87152
);
153+
PRINT 'Created RecurringSchedules table';
154+
END;
155+
GO
156+
157+
-- ==============================================================================
158+
-- NEW RELIC MONITORING SETUP - DATABASE LEVEL
159+
-- ==============================================================================
160+
161+
-- Create newrelic user in RelibankDB and grant permissions
162+
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = 'newrelic')
163+
BEGIN
164+
CREATE USER newrelic FOR LOGIN newrelic;
165+
PRINT 'Created New Relic user in RelibankDB';
166+
END;
167+
GO
168+
169+
-- Grant database-level permissions (these are idempotent)
170+
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = 'newrelic')
171+
BEGIN
172+
ALTER ROLE db_datareader ADD MEMBER newrelic;
173+
GRANT VIEW DATABASE PERFORMANCE STATE TO newrelic; -- Required for Query Store
174+
GRANT VIEW DATABASE STATE TO newrelic; -- Required for Query Store
175+
PRINT 'Granted database-level permissions to New Relic user';
176+
END;
177+
GO
178+
179+
-- Enable Query Store for New Relic query monitoring
180+
DECLARE @qs_enabled BIT;
181+
SELECT @qs_enabled = CONVERT(BIT, is_query_store_on)
182+
FROM sys.databases
183+
WHERE name = 'RelibankDB';
184+
185+
IF @qs_enabled = 0 OR @qs_enabled IS NULL
186+
BEGIN
187+
PRINT 'Enabling Query Store for New Relic monitoring...';
188+
ALTER DATABASE RelibankDB SET QUERY_STORE = ON (
189+
QUERY_CAPTURE_MODE = ALL,
190+
DATA_FLUSH_INTERVAL_SECONDS = 900
191+
);
192+
PRINT 'Query Store enabled';
193+
END
194+
ELSE
195+
BEGIN
196+
PRINT 'Query Store already enabled';
88197
END;
89198
GO
90199

200+
-- ==============================================================================
201+
-- INITIALIZATION COMPLETE MARKER
202+
-- ==============================================================================
203+
91204
-- Create an initialization flag table to indicate setup is complete
92205
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='InitComplete' and xtype='U')
93206
BEGIN
94207
CREATE TABLE InitComplete (
95-
InitID INT PRIMARY KEY
208+
InitID INT PRIMARY KEY,
209+
SetupTimestamp DATETIME DEFAULT GETDATE(),
210+
NewRelicConfigured BIT DEFAULT 1
96211
);
97-
INSERT INTO InitComplete VALUES (1);
212+
INSERT INTO InitComplete (InitID, NewRelicConfigured) VALUES (1, 1);
213+
PRINT 'Database initialization complete with New Relic monitoring configured';
98214
END;
99215
GO

0 commit comments

Comments
 (0)