Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Тестирование 2014: NATIVE_COMPILATION x100  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
USE TestDB
GO
CREATE PROCEDURE [dbo].[spTest]
	@Count	BigInt
AS BEGIN
	SET NOCOUNT ON;
	WHILE (@Count > 0)
		SET @Count -= 1;
END
GO
CREATE PROCEDURE [dbo].[spTestNative]
	@Count	BigInt
WITH	NATIVE_COMPILATION
,	EXECUTE AS OWNER
,	SCHEMABINDING
AS BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT,LANGUAGE = 'english')
	WHILE (@Count > 0)
		SET @Count -= 1;
END
GO
CREATE TABLE dbo.Test (
	ID	Int	NOT NULL
	CONSTRAINT [PK_Test]	PRIMARY KEY
,	[Count]	BigInt	NOT NULL
)
GO
CREATE TABLE dbo.TestNative (
	ID	Int		NOT NULL
	CONSTRAINT [PK_TestNative]	PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 256)
,	[Count]	BigInt	NOT NULL
) WITH (MEMORY_OPTIMIZED = ON)
GO
INSERT dbo.Test		(ID,[Count]) VALUES (1,0)
INSERT dbo.TestNative	(ID,[Count]) VALUES (1,0)
GO
CREATE PROCEDURE [dbo].[spTableTest]
	@Count	BigInt
AS BEGIN
	SET NOCOUNT ON;

	BEGIN TRAN TTableTest;

	UPDATE	dbo.Test
	SET	[Count] = @Count
	WHERE	ID = 1;

	WHILE (@Count > 0)
		UPDATE	dbo.Test
		SET	@Count = [Count] -= 1
		WHERE	ID = 1;

	COMMIT TRAN TTableTest;
END
GO
CREATE PROCEDURE [dbo].[spTableTestNative]
	@Count	BigInt
WITH	NATIVE_COMPILATION
,	EXECUTE AS OWNER
,	SCHEMABINDING
AS BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT,LANGUAGE = 'english')
	UPDATE	dbo.TestNative
	SET	[Count] = @Count
	WHERE	ID = 1;

	WHILE (@Count > 0)
		UPDATE	dbo.TestNative
		SET	@Count = [Count] -= 1
		WHERE	ID = 1;
END
GO
EXEC dbo.spTest		10000000	-- 4 sec
EXEC dbo.spTestNative	1000000000	-- 5 sec

EXEC dbo.spTableTest		200000	-- 2 sec
EXEC dbo.spTableTestNative	20000	-- 5;15 sec

SELECT * FROM dbo.Test
SELECT * FROM dbo.TestNative
GO
DROP PROCEDURE dbo.spTest, dbo.spTestNative, dbo.spTableTest, dbo.spTableTestNative
DROP TABLE dbo.Test, dbo.TestNative;
Т.е. я конечно понимаю 100е кратное увеличение скорости для TSQL, но MEMORY_OPTIMIZED таблицы во столько же раз медленнее обычных.

Что я делаю не так?

PS: Файловую группу для MEMORY_OPTIMIZED сами добавьте перед этим.
4 июл 13, 01:37    [14519840]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование 2014: NATIVE_COMPILATION x100  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Mnior,

А параметр BUCKET_COUNT

Как-то влияет на производительность?
просто у них в примерах не меньше 100000 он стоит
4 июл 13, 15:28    [14522957]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование 2014: NATIVE_COMPILATION x100  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Andrey Sribnyak,

Монописуально, что 1 что 100000.
4 июл 13, 20:08    [14524498]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование 2014: NATIVE_COMPILATION x100  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Mnior,

Вставка, кстати происходит не быстро, а очень быстро:

CREATE PROCEDURE dbo.usp_InsertVal @StartId int, @InsertCount int 
 WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER 
 AS 
 BEGIN ATOMIC 
 WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')

  DECLARE @Id int = @StartId

  WHILE @Id < @StartId + @InsertCount 
  BEGIN 
    INSERT INTO dbo.TestNative VALUES 
         (@Id, @Id) 
    SET @Id += 1 
  END

END 
 GO

set statistics time on
 -- insert 1,000,000 rows 
 DECLARE @StartId int = (SELECT MAX(ID)+1 FROM dbo.TestNative) 
  exec dbo.usp_InsertVal @StartId, 1000000
 GO
set statistics time off



SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 7 ms.

SQL Server Execution Times:
CPU time = 530 ms, elapsed time = 533 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

5 июл 13, 17:10    [14529098]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование 2014: NATIVE_COMPILATION x100  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Andrey Sribnyak,

Гораздо странней другое...

выполняем последовательно код:
UPDATE STATISTICS dbo.TestNative WITH FULLSCAN, NORECOMPUTE
set statistics time on
 -- insert 1,000,000 rows 
 DECLARE @StartId int = (SELECT MAX(ID)+1 FROM dbo.TestNative) 
  exec dbo.usp_InsertVal @StartId, 1000000
 GO
set statistics time off


Результаты выполнения:


SQL Server Execution Times:
CPU time = 15 ms, elapsed time = 7 ms.

SQL Server Execution Times:
CPU time = 531 ms, elapsed time = 527 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

+++++++++++++++++++++++++++++++

SQL Server Execution Times:
CPU time = 296 ms, elapsed time = 299 ms.

SQL Server Execution Times:
CPU time = 593 ms, elapsed time = 598 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

+++++++++++++++++++++++++++++++


SQL Server Execution Times:
CPU time = 344 ms, elapsed time = 345 ms.

SQL Server Execution Times:
CPU time = 421 ms, elapsed time = 423 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

+++++++++++++++++++++++++++++++

SQL Server Execution Times:
CPU time = 514 ms, elapsed time = 518 ms.

SQL Server Execution Times:
CPU time = 453 ms, elapsed time = 439 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
+++++++++++++++++++++++++++++++

SQL Server Execution Times:
CPU time = 827 ms, elapsed time = 817 ms.

SQL Server Execution Times:
CPU time = 437 ms, elapsed time = 443 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
+++++++++++++++++++++++++++++++
SQL Server Execution Times:
CPU time = 1029 ms, elapsed time = 1034 ms.

SQL Server Execution Times:
CPU time = 437 ms, elapsed time = 441 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 m
+++++++++++++++++++++++++++++++
...



т.е с увеличением числа записей, время в общем рядовой операции, с первичным ключём

SELECT MAX(ID)+1 FROM dbo.TestNative

возрастает на треть с каждым миллионом записей в этой таблице
5 июл 13, 17:29    [14529223]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить