|
18 | 18 | END; |
19 | 19 | GO |
20 | 20 |
|
| 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 | + |
21 | 84 | -- Switch to the new database |
22 | 85 | USE RelibankDB; |
23 | 86 | GO |
|
37 | 100 | CancellationUserID VARCHAR(50), |
38 | 101 | CancellationTimestamp FLOAT |
39 | 102 | ); |
| 103 | + PRINT 'Created Transactions table'; |
40 | 104 | END; |
41 | 105 | GO |
42 | 106 |
|
|
47 | 111 | AccountID INT PRIMARY KEY, |
48 | 112 | CurrentBalance DECIMAL(19, 4) NOT NULL |
49 | 113 | ); |
| 114 | + PRINT 'Created Ledger table'; |
50 | 115 | END; |
51 | 116 | GO |
52 | 117 |
|
@@ -85,15 +150,66 @@ BEGIN |
85 | 150 | StartDate DATE NOT NULL, |
86 | 151 | Timestamp FLOAT NOT NULL |
87 | 152 | ); |
| 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'; |
88 | 197 | END; |
89 | 198 | GO |
90 | 199 |
|
| 200 | +-- ============================================================================== |
| 201 | +-- INITIALIZATION COMPLETE MARKER |
| 202 | +-- ============================================================================== |
| 203 | + |
91 | 204 | -- Create an initialization flag table to indicate setup is complete |
92 | 205 | IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='InitComplete' and xtype='U') |
93 | 206 | BEGIN |
94 | 207 | CREATE TABLE InitComplete ( |
95 | | - InitID INT PRIMARY KEY |
| 208 | + InitID INT PRIMARY KEY, |
| 209 | + SetupTimestamp DATETIME DEFAULT GETDATE(), |
| 210 | + NewRelicConfigured BIT DEFAULT 1 |
96 | 211 | ); |
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'; |
98 | 214 | END; |
99 | 215 | GO |
0 commit comments