-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDemo_01_Setup.sql
More file actions
142 lines (132 loc) · 4.16 KB
/
Demo_01_Setup.sql
File metadata and controls
142 lines (132 loc) · 4.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
Slava Murygin
Demo for "SQL Server on Linux"
2017-02-01
*/
use Master;
GO
IF EXISTS (SELECT TOP 1 1 FROM sys.sql_logins WHERE name = 'LinuxTest')
BEGIN
DROP LOGIN LinuxTest;
END
GO
CREATE LOGIN LinuxTest with PASSWORD= N'LinuxTe@t1';
GO
IF EXISTS (SELECT TOP 1 1 FROM sys.databases WHERE name = 'LinuxTest')
BEGIN
ALTER DATABASE LinuxTest SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE LinuxTest
END
GO
/*
CREATE DATABASE LinuxTest
ON PRIMARY
( NAME = N'LinuxTest', FILENAME = N'C:\var\opt\mssql\UserData\LinuxTest.mdf' , SIZE = 1GB , FILEGROWTH = 100MB )
LOG ON
( NAME = N'LinuxTest_log', FILENAME = N'C:\var\opt\mssql\UserData\LinuxTest_log.ldf' , SIZE = 1GB , FILEGROWTH = 100MB);
GO
*/
/*
USE [master]
GO
CREATE DATABASE [LinuxTest] ON
( FILENAME = N'C:\var\opt\mssql\UserData\LinuxTest.mdf' ),
( FILENAME = N'C:\var\opt\mssql\UserData\LinuxTest_log.ldf' )
FOR ATTACH
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [LinuxTest]
GO
-- sp_detach_db [LinuxTest]
*/
CREATE DATABASE LinuxTest
ON PRIMARY
( NAME = N'LinuxTest', FILENAME = N'C:\var\opt\mssql\data\LinuxTest.mdf' , SIZE = 1GB , FILEGROWTH = 100MB )
LOG ON
( NAME = N'LinuxTest_log', FILENAME = N'C:\var\opt\mssql\data\LinuxTest_log.ldf' , SIZE = 1GB , FILEGROWTH = 100MB);
GO
ALTER DATABASE LinuxTest SET RECOVERY SIMPLE;
GO
ALTER DATABASE LinuxTest ADD FILEGROUP [imoltp_mod]
CONTAINS MEMORY_OPTIMIZED_DATA;
GO
/*
ALTER DATABASE LinuxTest ADD FILE
(name = [imoltp_dir], filename= 'C:\var\opt\mssql\UserData\imoltp_dir')
TO FILEGROUP imoltp_mod;
GO
*/
ALTER DATABASE LinuxTest ADD FILE
(name = [imoltp_dir], filename= 'C:\var\opt\mssql\data\imoltp_dir')
TO FILEGROUP imoltp_mod;
GO
USE LinuxTest;
GO
DROP USER IF EXISTS [LinuxTest];
GO
CREATE USER [LinuxTest] FOR LOGIN [LinuxTest] WITH DEFAULT_SCHEMA=[dbo]
GO
ALTER ROLE [db_owner] ADD MEMBER [LinuxTest]
GO
DROP PROCEDURE IF EXISTS usp_TranTest;
GO
DROP PROCEDURE IF EXISTS [dbo].usp_TranReport;
GO
DROP TABLE IF EXISTS tbl_Transactions;
GO
DROP TABLE IF EXISTS tbl_Multiplier;
GO
CREATE TABLE [dbo].[tbl_Multiplier] (
ID INT NOT NULL PRIMARY KEY NONCLUSTERED,
MP INT NOT NULL,
RecordCount INT NOT NULL,
TS DATETIME NOT NULL)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_AND_DATA);
GO
INSERT INTO [dbo].[tbl_Multiplier](ID,MP,RecordCount,TS) VALUES (1,10,0,GetDate());
GO
CREATE TABLE [dbo].[tbl_Transactions] (
c1 INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
c2 TINYINT NOT NULL
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_AND_DATA);
GO
CREATE PROCEDURE [dbo].usp_TranTest
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC
WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
DECLARE @i INT,
@rowcount INT;
SELECT @rowcount = MAX(MP) FROM [dbo].tbl_Multiplier;
SELECT @i = IsNull(MAX(c1),0)+1, @rowcount += @i FROM [dbo].[tbl_Transactions];
WHILE @i < @rowcount
BEGIN;
INSERT INTO [dbo].[tbl_Transactions](c1,c2)
SELECT @i, (datepart(MILLISECOND, getdate())) % 2
SET @i += 1;
END;
END;
GO
CREATE PROCEDURE [dbo].usp_TranReport
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC
WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
DECLARE @CT DATETIME = GetDate()
DECLARE @CNT INT, @WND INT;
SELECT @CNT = COUNT(*), @WND = ISNULL(SUM(c2),0), @CT = GetDAte()
FROM [dbo].[tbl_Transactions];
SELECT 'Linux' = CAST(CAST( CASE @CNT WHEN 0 THEN 50 ELSE (@CNT - @WND) * 100. / @CNT END as DECIMAL(6,3)) as CHAR(7)) + '%'
, 'Windows' = CAST(CAST( CASE @CNT WHEN 0 THEN 50 ELSE @WND * 100. / @CNT END as DECIMAL(6,3)) as CHAR(7)) + '%'
, 'Total' = RTRIM(CAST(@CNT as CHAR(8))) + ' Records'
, 'Per Second' = CAST(CAST( (@CNT - RecordCount)*1000/DATEDIFF(MILLISECOND, TS, @CT) as DECIMAL(9,3)) as VARCHAR)
FROM [dbo].[tbl_Multiplier]
UPDATE [dbo].[tbl_Multiplier]
SET RecordCount = @CNT, TS = @CT;
END;
/*
CREATE TABLE LinuxTest.dbo.tbl_Transactions (
ID INT IDENTITY(1,1) PRIMARY KEY,
A CHAR(1)
);
GO
*/