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

Откуда:
Сообщений: 63
Решили мы значится попробовать новую технологию, взяли виртуалку MWindows server 2008 r2 sp1(Xeon(r) e5-2620 @2.00ghz, 16 гб ОЗУ
Поставили Sql server 2014 подняли копию нашей базы, переименовали несколько таблиц и сделали их копии в памяти, переписали туда данные. И получили ужасающее замедление, запрос который работал (с функциями) в районе 15 сек, ушел в глубокую задумчивость -ориентировочно больше часа. Функции заменили подзапросами так как вроде они не поддерживаются
Так как мы небольшие спецы в данном вопросе очевидно что-то сделано не так. Хотелось бы совета. Таблицы небольшие от 100 до 500 тыс записей, по идее если таблицы в памяти даже фуллскан должен был дать быстрый ответ.
Вот скрипты на их создание:
+
CREATE TABLE [dbo].[LegalInfo](
	[ID] [decimal](12, 0) PRIMARY KEY NONCLUSTERED IDENTITY(1,1) NOT NULL  ,
	[BankID] [decimal](12, 0) NULL,
	[SubscriberID] [decimal](12, 0) NOT NULL INDEX ix_LI_Subsid NONCLUSTERED ,
	[Name] [nvarchar](255) NULL,
	[OKPO] [nvarchar](30) NULL,
	[INN] [nvarchar](30) NULL,
	[LegalAddress] [nvarchar](255) NULL,
	[Account] [nvarchar](30) NULL,
	[CorrAccount] [nvarchar](30) NULL,
	[Phone] [nvarchar](100) NULL,
	[CreationDate] [datetime] NULL,
	[CreationUser] [nvarchar](30) NULL,
	[ModifyDate] [datetime] NULL,
	[ModifyUser] [nvarchar](30) NULL,
	[KPP] [nvarchar](30) NULL,
	[FizAddress] [nvarchar](255) NULL,
	[eMail] [nvarchar](30) NULL,
	[ContMain] [nvarchar](255) NULL,
	[Facs] [nvarchar](30) NULL,
	[Prim] [nvarchar](255) NULL,
	[Stab] [tinyint] NULL,
	[Pass] [nvarchar](255) NULL,
	[PassData] [datetime] NULL,
	[PassOtd] [nvarchar](255) NULL,
	[Bill_Update] [datetime] NULL,
	[Flag_new_company] [tinyint] NULL,
	[Company] [nvarchar](50) NULL,
	[Test_Flag] [int] NULL,
	[User1c] [nvarchar](50) NULL,
	[UpdateDate] [datetime] NULL,
	[SD] [tinyint] NULL,
	[Ringphone] [nvarchar](50) NULL,
	[AoGuid] [nvarchar](50) NULL,
	[City] [nvarchar](50) NULL,
	[Village] [nvarchar](50) NULL,
	[Street] [nvarchar](50) NULL,
	[HouseGuid] [nvarchar](50) NULL,
	[HouseNum] [nvarchar](50) NULL,
	[BuildNum] [nvarchar](10) NULL,
	[StrucNum] [nvarchar](10) NULL,
	[Office] [nvarchar](10) NULL,
	[DescAddress] [nvarchar](255) NULL,
	[prcsFlag] [tinyint] NULL,
	[ServiceAddress] [nvarchar](255) NULL,
	[Housetype] [nvarchar](10) NULL,
	[OfficeType] [nvarchar](10) NULL,
	[CityFlag] [tinyint] NULL,
	[JurAddress] [nvarchar](255) NULL,
	[SMSPhone] [nvarchar](50) NULL,
) WITH (MEMORY_OPTIMIZED=ON) 

CREATE TABLE [dbo].[LegalInfohist](
	[ID] [decimal](12, 0) PRIMARY KEY NONCLUSTERED IDENTITY(1,1) NOT NULL  ,
	Legalinfoid [decimal](12, 0),
	[BankID] [decimal](12, 0) NULL,
	[SubscriberID] [decimal](12, 0) NOT NULL INDEX ix_LI_Subsid NONCLUSTERED ,
	[Name] [nvarchar](255) NULL,
	[OKPO] [nvarchar](30) NULL,
	[INN] [nvarchar](30) NULL,
	[LegalAddress] [nvarchar](255) NULL,
	[Account] [nvarchar](30) NULL,
	[CorrAccount] [nvarchar](30) NULL,
	[Phone] [nvarchar](100) NULL,
	[CreationDate] [datetime] NULL,
	[CreationUser] [nvarchar](30) NULL,
	[ModifyDate] [datetime] NULL,
	[ModifyUser] [nvarchar](30) NULL,
	[KPP] [nvarchar](30) NULL,
	[FizAddress] [nvarchar](255) NULL,
	[eMail] [nvarchar](30) NULL,
	[ContMain] [nvarchar](255) NULL,
	[Facs] [nvarchar](30) NULL,
	[Prim] [nvarchar](255) NULL,
	[Stab] [tinyint] NULL,
	[Pass] [nvarchar](255) NULL,
	[PassData] [datetime] NULL,
	[PassOtd] [nvarchar](255) NULL,
	[Bill_Update] [datetime] NULL,
	[Flag_new_company] [tinyint] NULL,
	[Company] [nvarchar](50) NULL,
	[Test_Flag] [int] NULL,
	[User1c] [nvarchar](50) NULL,
	[UpdateDate] [datetime] NULL,
	[SD] [tinyint] NULL,
	[Ringphone] [nvarchar](50) NULL,
	[AoGuid] [nvarchar](50) NULL,
	[City] [nvarchar](50) NULL,
	[Village] [nvarchar](50) NULL,
	[Street] [nvarchar](50) NULL,
	[HouseGuid] [nvarchar](50) NULL,
	[HouseNum] [nvarchar](50) NULL,
	[BuildNum] [nvarchar](10) NULL,
	[StrucNum] [nvarchar](10) NULL,
	[Office] [nvarchar](10) NULL,
	[DescAddress] [nvarchar](255) NULL,
	[prcsFlag] [tinyint] NULL,
	[ServiceAddress] [nvarchar](255) NULL,
	[Housetype] [nvarchar](10) NULL,
	[OfficeType] [nvarchar](10) NULL,
	[CityFlag] [tinyint] NULL,
	[JurAddress] [nvarchar](255) NULL,
	[SMSPhone] [nvarchar](50) NULL,
	Changedate datetime not null INDEX ix_LI_Changedate NONCLUSTERED
) WITH (MEMORY_OPTIMIZED=ON) 

CREATE TABLE [dbo].[Subscriber](
	[ID] [DECIMAL](12,0)  PRIMARY KEY NONCLUSTERED IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](255) NOT NULL,
	[FullName] [nvarchar](255) NULL,
	[Saldo] [money] NOT NULL,
	[IsLegal] tinyint NOT NULL,
	[isIP] tinyint NOT NULL,
	[ContrDate] [datetime] NOT NULL INDEX ix_Subs_Contrdate NONCLUSTERED,
	[ContrNumber] [NVARCHAR](30)  NOT NULL,
	[PeriodID] [DECIMAL](12,0)  NULL,
	[PeriodStartDate] [int] NULL,
	[PeriodDataID] [DECIMAL](12,0)  NULL,
	[CreationDate] [datetime] NULL,
	[AccountType] [tinyint] NULL,
	[PaymentDate] [int] NULL,
	[tmpCardID] [DECIMAL](12,0)  NULL,
	[AuthRequestProfileID] [numeric](12, 0) NULL,
	[AuthAnswerProfileID] [numeric](12, 0) NULL,
	[ClientGroupID] [numeric](12, 0) NOT NULL INDEX ix_Subs_CliGroup NONCLUSTERED,
	[bill_update] [datetime] NULL ,
	[router] [tinyint] NULL DEFAULT (0),
	[router_set] [tinyint] NULL DEFAULT (0),
	[sms_send] [tinyint] NULL  DEFAULT (0),
	[user1c] [nvarchar](50) NULL,
	 [UpdateDATE] [datetime] NULL,
	 [AgentFlag] [tinyint] NULL,
	 [PrevContract] [nvarchar](11) NULL,
	 [ChangeDate] [datetime] NULL,
	 [ChangeDesc] [nvarchar](50) NULL,
	 [changeuser] [nvarchar](50) NULL,
	 [vipdate] [datetime] NULL,
	[vipuser] [nvarchar](10) NULL
)WITH (MEMORY_OPTIMIZED=ON) 


CREATE TABLE [dbo].[SubscriberHistory](
	[ID] [DECIMAL](12,0)  PRIMARY KEY NONCLUSTERED IDENTITY(1,1) NOT NULL,
	[SubscriberID] [DECIMAL](12,0) not null INDEX ix_Subsh_Subsid NONCLUSTERED,
	[Name] [nvarchar](255) NOT NULL,
	[FullName] [nvarchar](255) NULL,
	[Saldo] [money] NOT NULL,
	[IsLegal] tinyint NOT NULL,
	[isIP] tinyint NOT NULL,
	[ContrDate] [datetime] NOT NULL INDEX ix_Subsh_Contrdate NONCLUSTERED,
	[ContrNumber] [NVARCHAR](30)  NOT NULL,
	[PeriodID] [DECIMAL](12,0)  NULL,
	[PeriodStartDate] [int] NULL,
	[PeriodDataID] [DECIMAL](12,0)  NULL,
	[CreationDate] [datetime] NULL,
	[AccountType] [tinyint] NULL,
	[PaymentDate] [int] NULL,
	[tmpCardID] [DECIMAL](12,0)  NULL,
	[AuthRequestProfileID] [numeric](12, 0) NULL,
	[AuthAnswerProfileID] [numeric](12, 0) NULL,
	[ClientGroupID] [numeric](12, 0) not NULL INDEX ix_Subsh_CliGroup NONCLUSTERED,
	[bill_update] [datetime] NULL ,
	[router] [tinyint] NULL DEFAULT (0),
	[router_set] [tinyint] NULL DEFAULT (0),
	[sms_send] [tinyint] NULL  DEFAULT (0),
	[user1c] [nvarchar](50) NULL,
	 [UpdateDATE] [datetime] NULL,
	 [AgentFlag] [tinyint] NULL,
	 [CloseDate] [datetime] NOT NULL INDEX ix_Subsh_Closedate NONCLUSTERED ,
	 [PrevContract] [nvarchar](11) NULL,
	 [ChangeDate] [datetime] NULL,
	 [ChangeDesc] [nvarchar](50) NULL,
	 [closeuser] [nvarchar](50) NULL,
	 [changeuser] [nvarchar](50) NULL,	 
)WITH (MEMORY_OPTIMIZED=ON) 
 


А вот запрос
declare @startdate datetime,
@enddate datetime
set @startdate='20150801'
set @enddate='20150831 23:59:59'

select  s2.ID,(select Clientgroupid from subscriberAll s
where subscriberid=s2.id
and closedate in(select min(closedate) from 
	subscriberAll s2 where s.subscriberid=s2.subscriberid
	and closedate>@startdate)
	)
,(select Company from LegalinfoAll s
where subscriberid=s2.id
and s.changedate in(select min(changedate) from 
	LegalinfoAll s2 where s.subscriberid=s2.subscriberid
	and changedate>@startdate)
	),
(select Clientgroupid from subscriberAll s
where subscriberid=s2.id
and closedate in(select min(closedate) from 
	subscriberAll s2 where s.subscriberid=s2.subscriberid
	and closedate>@enddate)
	),(select Company from LegalinfoAll s
where subscriberid=s2.id
and s.changedate in(select min(changedate) from 
	LegalinfoAll s2 where s.subscriberid=s2.subscriberid
	and changedate>@enddate)
	),s2.islegal
from Subscriber s2 inner join legalinfo li 
on s2.id=li.SubscriberID  
--Where s2.id=392466
and isnull(li.Test_Flag,0)=0
28 сен 15, 06:07    [18202351]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2014 проблема производительности In memory oltp тбалиц  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
maldalik,

Вот как раз фулскан на InMemory будет работать не быстро. Они не под это оринтированы.

https://www.sql.ru/forum/1113054/vpechatlenie-ot-memory-optimized-tehnologii-na-sql-2014
28 сен 15, 07:48    [18202410]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2014 проблема производительности In memory oltp тбалиц  [new]
maldalik
Member

Откуда:
Сообщений: 63
В любом случае фуллскана в плане не наблюдается, вот план

К сообщению приложен файл (plan.7z - 9Kb) cкачать
28 сен 15, 08:30    [18202467]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2014 проблема производительности In memory oltp тбалиц  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 888
самое простое сравните с прошлым планом, который у вас быстро выполняется, сравнить операции, найти различия, после этого понять, почему так выполняется в таблицах в памяти.
28 сен 15, 12:49    [18203782]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить