• No results found

SQL Server 2014 In-Memory Tables (Extreme Transaction Processing)

N/A
N/A
Protected

Academic year: 2021

Share "SQL Server 2014 In-Memory Tables (Extreme Transaction Processing)"

Copied!
43
0
0

Loading.... (view fulltext now)

Full text

(1)

SQL Server 2014 In-Memory

Tables (Extreme Transaction

Processing)

Basics

Tony Rogerson, SQL Server MVP @tonyrogerson

[email protected]

(2)

Who am I?

• Freelance SQL Server professional and Data Specialist • Fellow BCS, MSc in BI, PGCert in Data Science

• Started out in 1986 – VSAM, System W, Application System, DB2, Oracle, SQL Server since 4.21a

• Awarded SQL Server MVP yearly since 97

• Founded UK SQL Server User Group back in ’99, founder member of DDD, SQL Bits, SQL Relay, SQL Santa and Project Mildred

• Interested in commodity based distributed processing of Data.

• I have an allotment where I grow vegetables - I do not do any analysis on how they grow, where they grow etc. My allotment is where I escape

(3)

Agenda

• Define concept “In-Memory” • Implementation

• Storage

• Memory, Buffer Pool and using Resource Pools • Memory Optimised Tables and Index Types

• Native Stored Procedures

(4)

Define

(5)

What is IMDB / DBIM / IMT?

• Entire database resides in Main memory

• Hybrid - selective tables reside entirely in memory • Row / Column store

• Oracle keeps two copies of the data – in row AND column store – optimiser chooses, no app change required

• SQL Server 2014 you choose –

• Columnstore (Column Store Indexing) – traditionally for OLAP

• Rowstore (memory optimised table with hash or range index) – traditionally for OLTP

• Non-Volatile Memory changes everything – it’s here now!

(6)

SQL Server “in-memory”

• Column Store (designed for OLAP)

• Column compression to reduce memory required • SQL 2012:

• One index per table, nonclustered only, table read-only • SQL 2014:

• Only index on table – clustered, table is now updateable

• Memory Optimised Tables (designed for OLTP)

(7)
(8)
(9)
(10)
(11)

DEMO

(12)

RAW DATA on Storage

(no index data)

Memory Raw Data Build Range and Hash Indexes Queryable

Database Recovery

• Make sure the IO Sub-system can handle the load – it will swamp the IO Sub-System

(13)

SQL Server Memory Pools

Stable Storage (MDF/NDF Files) Buffer Pool Table

Data Data in/out as required

Memory Internal Structures (proc/log cache etc.)

(14)

SQL Server Memory Pools

Stable Storage (MDF/NDF Files) Buffer Pool Table

Data Data in/out as required

Memory Internal Structures (proc/log cache etc.)

SQL Server Memory Space

(15)

Create Resource Pool

CREATE RESOURCE POOL mem_xtp_pool

WITH ( MAX_MEMORY_PERCENT = 50,

MIN_MEMORY_PERCENT = 50

);

ALTER RESOURCE GOVERNOR RECONFIGURE;

EXEC sp_xtp_bind_db_resource_pool 'xtp_demo', 'mem_xtp_pool';

ALTER DATABASE xtp_demo SET OFFLINE WITH ROLLBACK IMMEDIATE;

ALTER DATABASE xtp_demo SET ONLINE;

(16)

DEMO

(17)
(18)

Table Structure

• New option on WITH (

• MEMORY_OPTIMIZED = ON

• DURABILITY = SCHEMA_AND_DATA | SCHEMA_ONLY )

• Maximum 8 indexes per table • Choice of two index types:

(19)

Table Structure

• Compiled to .C structure

• Cannot ALTER TABLE – only DROP/CREATE • Data is stored in FILESTREAM files (not MDF)

• Logging still done to LDF (SCHEMA_AND_DATA only) • Statistics are not automatically updated – require:

(20)

Table Declaration

• IDENTITY( 1, 1 ) only – use SEQUENCE if not suitable • DEFAULT constraints ok

• No Foreign Key constraints • No Check constraints

• No UNIQUE constraints – only PRIMARY KEY allowed

(21)
(22)

DEMO

(23)
(24)
(25)

Range Index (B

w

Tree ≈ B

+

Tree)

8KiB

1 row tracks a page in level below

Root

Leaf

Leaf row per table row {index-col}{pointer}

B

w

Tree

B

+

Tree

8KiB Root Leaf

Leaf row per unique value {index-col}{memory-pointer}

(26)

DEMO

(27)

Index recommendations

• Use HASH when

• Mostly unique values

• Query uses expressions “Equality” i.e. = or != • Set BUCKET_COUNT appropriately

• Seriously think if you are considering composite index

• Use RANGE when

• Expressions are not Equality e.g. < > between • Composite Index

• Low Cardinality

(28)

Multi-Version Concurrency Control (MVCC)

• Compare And Swap replaces Latching

• Update is actually INSERT and Tombstone • Row Versions [kept in memory]

• Garbage collection task cleans up versions no longer required (stale data rows)

• Versions no longer required determined by active transactions – may be inter-connection dependencies

• Your in-memory table can double, triple, x 100 etc. in size depending on access patterns (data mods + query durations)

(29)

Versions in the Row Chain

Newest

Oldest

TS_START TS_END Connection

(30)

Versions in the Row Chain

Newest

Oldest

TS_START TS_END Connection

2 10 55 7 NULL 60 50 NULL 80

(31)

Versions in the Row Chain

Current

TS_START TS_END Connection

2 NULL 55 7 NULL 60 50 NULL 80

(32)

Natively Compiled Procedures

• Compiled via C code

• Table statistics [which are not auto-updated] used when proc is created

(33)

DEMO

(34)

Querying

(35)

SNAPSHOT Isolation

• Your connection has a Snapshot of the Data that you just read – Snapshot is persistent and isolated from other connections using Versioning (MVCC).

• Default SQL Server isolation is READ COMMITTED

• Inside a transaction you must specify WITH ( SNAPSHOT ) to override the default isolation level

• Cannot use SET TRANSACTION ISOLATION SNAPSHOT with transactions and in-memory tables

(36)

DEMO

(37)

Querying (interop)

• Not supported:

• Linked Tables

• Cross database joins (except table vars and temp tables) • Reference from indexed view

• MERGE (memory optimised table as target) • TRUNCATE TABLE

• CLR using context connection

• A load of table hints, see: http://msdn.microsoft.com/en-us/library/dn133177.aspx

(38)

HADR - DEMO

(39)

Backup / Restore

• Meta-data only for Non-Durable tables (no data!) • Backup is self-contained • Full backup • Differentials • Logs • Restore in Standby • Remember

(40)

Availability Groups

• Yep – they work too

• Differs from Log restore

• Data and Indexes already in memory

• Readable secondary replica’s work

(41)

Planning

(42)

Migration - DEMO

• Table: Memory Optimiser Advisor

(43)

Migrating Tables

• Throw it all in memory?

• Probably not a good idea!

• Partition through View – mix memory and storage optimised

References

Related documents