Access
 sql >> база данни >  >> RDS >> Access

Създаване и достъп до OLTP бази данни и таблици в паметта

Това е втората статия от поредица от статии за OLTP в паметта на SQL Server.

Встъпителната статия — SQL Server In-Memory OLTP, представи накратко основите на новия двигател Hekaton. В тази част ще се съсредоточим върху практиката. За да бъдем по-конкретни, ще видим как да създадем оптимизирани в паметта бази данни и таблици, както и как да ги оценим с помощта на T-SQL.

Предварителни условия за започване на използване на бази данни, оптимизирани за памет

OLTP в паметта се инсталира автоматично с 64-битово Enterprise или Developer издание на SQL Server 2014 или SQL Server 2016. 32-битовото издание на SQL Server не предоставя компоненти за OLTP в паметта.

По този начин, ако имате инсталирано 64-битово издание за разработчици на SQL Server на вашия компютър, можете да започнете да създавате бази данни и структури от данни, които ще съхраняват оптимизирани за паметта данни без настройка на добавки.

Всяка отделна база данни, която ще съдържа оптимизирани за памет таблици, трябва да съдържа една файлова група MEMORY_OPTIMIZED_DATA. Тази файлова група съдържа един или няколко контейнера. Всеки отделен контейнер съхранява данни и/или делта файлове. SQL Server използва тези файлове за възстановяване на оптимизирани за памет таблици. Контейнерите могат да бъдат поставени в различните дискови масиви,
подобно на файловите групи FILESTREAM.

Синтаксисът за създаване на оптимизирана за памет файлова група е почти същият като при традиционната файлова група FILESTREAM, с няколко разлики:

  1. За база данни може да се създаде само една файлова група, оптимизирана за памет.
  2. Опцията СЪДЪРЖИ MEMORY_OPTIMIZED_DATA трябва да бъде посочена изрично.

Можете да създадете файловата група в процеса на създаване на база данни:

CREATE DATABASE InMemoryDemo
ON PRIMARY
(
NAME = N'InMemoryDemo',
FILENAME = N'D:\Data\InMemoryOLTPDemo.mdf'
),
FILEGROUP IMOFG CONTAINS MEMORY_OPTIMIZED_DATA
(
NAME = N'InMemoryDemo_Data',
FILENAME = N'D:\IMOFG\InMemoryDemo_Data.mdf'
)

Като алтернатива можете да добавите файловата група MEMORY_OPTIMIZED_DATA към съществуваща база данни и след това да добавите файлове към тази файлова група.

-- Adding the containers
ALTER DATABASE
  DemoDB ADD FILE
  (
  NAME = 'DemoDB_Mod',
  FILENAME = 'D:\Data\DemoDB_Mod'
  )
  TO FILEGROUP DemoDB_Mod

Вътрешно, In-Memory OLTP използва механизъм за поточно предаване, базиран на технологията FILESTREAM, който е добре адаптиран за последователен I/O достъп.

Създаване на оптимизирани за памет таблици

Сега имаме всичко необходимо, за да започнем да създаваме оптимизирани за паметта обекти. Нека създадем таблица, оптимизирана за памет.

Синтаксисът за създаване на оптимизирани в паметта таблици е много подобен на този за създаване на дискови таблици. Има обаче няколко разширения и ограничения:

  1. Клаузата MEMORY_OPTIMIZED =ON идентифицира таблица като оптимизирана в паметта.
  2. Оптимизираните в паметта таблици не поддържат всички типове данни, които поддържат традиционните таблици. Следните типове данни не се поддържат:
  • отместване на датата и времето
  • география
  • геометрия
  • йерархия
  • версия на реда
  • XML
  • sql_variant
  • Дефинирани от потребителя типове

Оптимизирана за памет таблица може да бъде създадена със следните стойности на трайност:SCHEMA_AND_DATA или SCHEMA_ONLY. SCHEMA_AND_DATA е стойността по подразбиране.
В случай, че посочите SCHEMA_ONLY, всички промени в таблицата няма да бъдат регистрирани и данните от таблицата не се съхраняват на диска.

Всяка една оптимизирана за памет таблица трябва да съдържа поне един индекс. Обърнете внимание, че ограничението PRIMARY KEY имплицитно създава индекс. Една трайна таблица, оптимизирана за памет, винаги изисква ограничение PRIMARY KEY.

CREATE TABLE dbo.Person (
  [Name] VARCHAR(32) NOT NULL PRIMARY KEY NONCLUSTERED
 ,[City] VARCHAR(32) NULL
 ,[Country] VARCHAR(32) NULL
 ,[State_Province] VARCHAR(32) NULL
 ,[LastModified] DATETIME NOT NULL
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);

Композитни индекси могат да се добавят, когато всички колони са създадени:

CREATE TABLE dbo.Person (
  [Name] VARCHAR(32) NOT NULL PRIMARY KEY NONCLUSTERED
 ,[City] VARCHAR(32) NULL
 ,[Country] VARCHAR(32) NULL
 ,[State_Province] VARCHAR(32) NULL
 ,[LastModified] DATETIME NOT NULL
 ,INDEX T1_INDX_C1C2 NONCLUSTERED ([Name], [City])
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);

Когато създавате оптимизираната в паметта таблица, OLTP машината в паметта създава DML рутинни процедури, за да има достъп до тази таблица. Той зарежда рутинни програми като DLL файлове. За конкретна операция SQL Server извиква задължителен DLL файл.

Промяна на таблици и индекси

Беше невъзможно да се ПРОМЕНЯТ таблици преди SQL Server 2016. За да направите промени в схемата, трябваше да пуснете и пресъздадете таблицата в паметта.

В новата версия на SQL Server ALTER TABLE се поддържа частично.

SQL Server 2016 ви предоставя възможността да извършвате офлайн операции:добавяне и пускане (модифициране) на колони, индекси и ограничения. Също така вече е възможно да се работи с таблици в паметта с помощта на дизайнера на таблици SSMS или редактора на таблици dbForge Studio за SQL Server.

Имайте предвид, че ALTER TABLE изисква повторно изграждане на таблицата. Ето защо трябва да сте сигурни, че имате достатъчно памет, преди да стартирате тази операция. По време на операцията за повторно изграждане всеки отделен ред се вмъква отново в новата таблица и таблицата не е налична, докато се извършва операцията ALTER.

Можете да въведете множество промени в една таблица и да ги комбинирате в един оператор ALTER TABLE. Можете да ДОБАВЯТЕ колони, индекси и ограничения и можете да ИЗПУСКАТЕ колони, индекси и ограничения. Имайте предвид, че не можете да комбинирате команди ADD и DROP заедно в една ALTER TABLE.

-- index operations
-- change hash index bucket count
ALTER TABLE dbo.TableName ALTER INDEX IX_Name REBUILD WITH (BUCKET_COUNT = 131072);
GO
-- add index
ALTER TABLE dbo.TableName ADD INDEX IX_Name NONCLUSTERED (ColName);
GO
-- drop index
ALTER TABLE dbo.TableName DROP INDEX IX_Name;
GO
-- add multiple indexes
ALTER TABLE dbo.TableName ADD INDEX IX_Name NONCLUSTERED (ColName),
 INDEX IX_Name2 NONCLUSTERED (ColName2);
GO
-- Add a new column and an index 
ALTER TABLE dbo.TableName ADD Date DATETIME, INDEX IX_Name NONCLUSTERED (ColName);
GO
-- Drop a column
ALTER TABLE dbo.TableName DROP COLUMN ColName;
GO

Типове таблици и променливи на таблици

SQL Server 2016 ви предоставя възможността да създавате оптимизирани за паметта типове таблици, които можете да използвате, докато дефинирате променлива на таблица:

CREATE TYPE TypeName
AS TABLE (
Col1 SMALLINT NOT NULL,
Col2 INT NOT NULL,
Col3 INT NOT NULL,
Col4 INT NOT NULL,
INDEX IX_Col1 NONCLUSTERED HASH (Col1)
WITH (BUCKET_COUNT = 131072),
INDEX IX_Col1 NONCLUSTERED (Col2))
WITH (MEMORY_OPTIMIZED = ON);
GO
DECLARE @VariableName TypeName;
GO

Тази променлива се съхранява само в паметта. Оптимизираните в паметта таблици и типове таблици използват едни и същи структури от данни, така че достъпът до данни ще бъде по-ефективен в сравнение с променливите на таблици, базирани на диск.

За повече подробности, моля, вижте следната публикация в блога на MSDN:Подобряване на производителността на временните таблици и променливите на таблицата с помощта на оптимизация на паметта

Резюме

In-Memory OLTP е сравнително млада технология, която е проектирана да работи с огромни и много натоварени OLTP системи, които поддържат стотици или дори хиляди едновременни потребители. Тя е въведена в SQL Server 2014 и еволюира в SQL Server 2016.
В същото време технологията съдържа редица ограничения и ограничения.
Не всички T-SQL функции и типове данни се поддържат от паметта- оптимизирани таблици, такива таблици не могат да съдържат редове, които надвишават 8060 байта, а също така не поддържат
ROW-OVERFLOW и LOB съхранение. Не можете да променяте таблици и индекси (в SQL Server 2014), след като таблицата е създадена.
Въпреки това, ние очакваме, че по-нататъшните версии на OLTP в паметта ще имат по-малко ограничения!

Прочетете също:

Използване на индекси в оптимизирани за паметта таблици на SQL Server


No
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализации от екипа на Microsoft Access (юни 2017 г.)

  2. Как да създадете ред с общи суми в Access

  3. Как да проектираме база данни за туристически уебсайт

  4. Как да предотвратим повреда на базата данни в Microsoft Access

  5. Създаване на контрол на достъп, базиран на роли в MongoDB