{"id":2123,"date":"2013-08-13T09:00:00","date_gmt":"2013-08-13T16:00:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/dataplatforminsider\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/"},"modified":"2024-01-22T22:49:12","modified_gmt":"2024-01-23T06:49:12","slug":"sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/","title":{"rendered":"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach"},"content":{"rendered":"<p>As we emphasized in the previous blogs, with other in-memory technologies in the market today you have to migrate the entire database to memory or it&#8217;s a separate database product that deals with in-memory, which means learning new APIs and dealing with application compatibility issues. Integrating in-memory technology right into the SQL Server engine might sound trivial at a first glance, but this architectural approach carries significant customer benefits which we will elaborate in this post.<\/p>\n<p>First, there is no special installation requirements needed for In-Memory OLTP, as a matter of fact, when you install SQL Server 2014, you don\u2019t even see an option referring to In-Memory OLTP as it is installed transparently with the SQL Engine. Also there is no special hardware requirement to start the development and test on In-Memory OLTP.<\/p>\n<p><strong><em>To summarize the steps to leverage In-Memory OLTP<\/em><\/strong><\/p>\n<p>a)\u00a0\u00a0\u00a0\u00a0 Use the AMR tool to identify the hot tables and stored procedures<\/p>\n<p>b)\u00a0\u00a0\u00a0 Migrate the hot tables to memory_optimized tables and access those tables through inter-op (term defined below)<\/p>\n<p>c)\u00a0\u00a0\u00a0\u00a0 Migrate the hot stored procedures to natively compiled<\/p>\n<p>d)\u00a0\u00a0\u00a0 Iterative from a) since the performance signature has changed<\/p>\n<p>Inter-op\u2019ed access is an important concept in in-memory OLTP. As pointed out by the <a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/07\/22\/architectural-overview-of-sql-server-2014s-in-memory-oltp-technology\">architecture blog<\/a>, the in-memory OLTP storage engine can inter-operate with the traditional SQL Server relational engine (that is Query Optimizer and Query Processor), this allows an existing DB workload to treat the in-memory OLTP database as if they were traditional SQL tables in select, insert, delete and update, as well as join operations. Another key concept is the entire database doesn\u2019t need to be migrated to reside in memory, instead, selected hot tables (from data access and contention point of view) can be migrated to In-memory OLTP and this requires only the additional memory allocation for those tables, for example, at 128GB while the whole database can have a 2 TB footprint on disk.\u00a0 This means you can optimize in-memory to fit your existing hardware, improving TPS without increasing hardware costs.<\/p>\n<p><strong><em>The AMR tool<\/em><\/strong> includes a lightweight performance gathering component that you can setup to collect the performance signature of either a live production system or a test system. It queries DMVs such as <em>sys.dm_db_index_operational_stats<\/em> and <em>sys.dm_exec_query_stats<\/em> to detect the system hot spots over a period of time and aggregate the information using data collector and MDW, and finally present the user with a set of reports to highlight the top candidates of tables and stored procedures for migration into In-Memory OLTP. We will provide more details on how to use the AMR tool in a following blog.<\/p>\n<p><strong><em>Table migration<\/em><\/strong><\/p>\n<p>Once you have determined the table(s) for migration, there are two steps needed before you can declare a table as memory_optimized<\/p>\n<p style=\"padding-left:30px;\">a)\u00a0\u00a0\u00a0\u00a0 Required: declare a filegroup to contain the checkpoint files for in-memory OLTP \u2013 for example<\/p>\n<p style=\"padding-left:30px;\"><em>ALTER DATABASE TicketReservations ADD FILEGROUP [TicketReservations_mod_fg] <\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CONTAINS MEMORY_OPTIMIZED_DATA;<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>ALTER DATABASE TicketReservations<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ADD FILE (NAME = [TicketReservations_fs_dir], <\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 FILENAME = &#8216;C:\\mounthead\\Data\\TicketReservations_fs_dir&#8217;) <\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 to FILEGROUP [TicketReservations_mod_fg];<\/em><\/p>\n<p style=\"padding-left:30px;\">b)\u00a0\u00a0\u00a0 Optional: configure the in-memory OLTP memory usage limit (coming in CTP2) to provide performance stability for the traditional disk-based workloads<\/p>\n<p>There are two ways to migrate a table to be memory_optimized<\/p>\n<p style=\"padding-left:30px;\">a)\u00a0\u00a0\u00a0\u00a0 Use Transact-SQL to rename the original table and then recreate the table as memory_optimized, then \u201c<em>insert into table_in_mem select * from table_on_disk<\/em>\u201d to migrate the data. If there are incompatible column data types (for example LOBs), some workaround is required and the most common method is to split the incompatible columns into a separate table and join them through inter-op . The existing indexes might need to be migrated as well. Please refer to <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/dn247639(v=sql.120).aspx\">this section of the BOL<\/a> for unsupported data types and some workarounds. Hash index works well for point lookup, but if you need range scans or ordered scans, you should consider range index coming in CTP2. One migration example is below<\/p>\n<p style=\"padding-left:30px;\"><em>&#8211;Original disk-based table:<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>CREATE TABLE TicketReservationDetail (<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 iteration int not null,<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 lineId\u00a0\u00a0 int not null, <\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 col3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 nvarchar(1000) not null,<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 ThreadID\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int not null,<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 constraint sql_ts_th primary key clustered (iteration, lineId))<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>&#8211;In-memory OLTP table:<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>CREATE TABLE TicketReservationDetail (<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 iteration int not null,<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 lineId\u00a0\u00a0 int not null, <\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 col3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 nvarchar(1000) not null,<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 ThreadID\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int not null,<\/em><\/p>\n<p style=\"padding-left:30px;\"><em>\u00a0 constraint sql_ts_th primary key <\/em><\/p>\n<p style=\"padding-left:30px;\"><span style=\"color:#ff0000;\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 nonclustered hash (iteration, lineId) with (bucket_count = 100000)<\/em><\/span><\/p>\n<p style=\"padding-left:30px;\"><em>) <span style=\"color:#ff0000;\">with (memory_optimized = on)\u00a0<\/span><\/em><\/p>\n<p style=\"padding-left:30px;\">b)\u00a0\u00a0\u00a0 Coming in CTP2 \u2013 there will be a Memory Optimization Advisor wizard in SSMS to migrate the table. The migration will advise on incompatible data types and proceed with actual migration if the column types and etc are compatible with In-memory OLTP. The wizard will also create the FG if it\u2019s not already in place. More details to come with CTP2.<\/p>\n<p><strong><em>Stored Procedure Migration<\/em><\/strong><\/p>\n<p>Even though the table migration alone with query inter-op access is a good stopping point, and solves common data access the contention problems at the storage engine level, in-memory OLTP provides native compilation, which optimizes the relational engine layer as well. The AMR tool provides insight into the top candidate of stored procedures (SPs) to migrate. There is no wizard available yet to migrate the SPs, so this will be a more manual process. Please note that natively compiled SPs can only operate on memory optimized tables but if the T-SQL used in the current procedure is fully compatible with in-memory OLTP, the change is trivial, and also note the ease of using atomic block \u2013 for example<\/p>\n<p><em>&#8211;Original SP<\/em><\/p>\n<p><em>CREAT PROC InsertReservationDetails(@Iteration int, @LineCount int, @CharDate NVARCHAR(23), @ThreadID int)<\/em><\/p>\n<p><em>AS<\/em><\/p>\n<p><em>BEGIN<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DECLARE @loop int = 0;<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BEGIN TRAN<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BEGIN TRY<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 while (@loop &lt; @LineCount)<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BEGIN<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 INSERT INTO dbo.TicketReservationDetail VALUES(@Iteration, @loop, @CharDate, @ThreadID);<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SET @loop += 1;<\/em><em>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 END<\/em><\/p>\n<p><em>END TRY<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BEGIN CATCH<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8212; Actions<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 END CATCH<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 COMMIT<\/em><\/p>\n<p><em>END<\/em><\/p>\n<p><em>&#8211;Natively Compiled SP (the many declarative setting in the header is to aggressively push optimization at the compilation time to reduce runtime costs)<\/em><\/p>\n<p><em>CREATE PROC InsertReservationDetails(@Iteration int, @LineCount int, @CharDate NVARCHAR(23), @ThreadID int)<\/em><\/p>\n<p><span style=\"color:#ff0000;\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 with native_compilation, schemabinding, execute as owner <\/em><\/span><\/p>\n<p><em>AS<\/em><\/p>\n<p><span style=\"color:#ff0000;\"><em>BEGIN ATOMIC with (transaction isolation level = snapshot, language = N&#8217;us_english&#8217;)<\/em><\/span><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DECLARE @loop int = 0;<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BEGIN TRY<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 while (@loop &lt; @LineCount)<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BEGIN<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 INSERT INTO dbo.TicketReservationDetail VALUES(@Iteration, @loop, @CharDate, @ThreadID);<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SET @loop += 1;<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 END<\/em><\/p>\n<p><em>END TRY<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BEGIN CATCH<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8212; Actions<\/em><\/p>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 END CATCH<\/em><\/p>\n<p><em>END<\/em><\/p>\n<p>After each major step(s) of migration of tables and associated SPs, we recommend that you rerun the AMR tool and migrate additional tables and SPs iteratively. There is no fixed rule on how much of the database to migrate into in-memory OLTP, since it depends on how concentrated the workload is and how much ROI you want to achieve.<\/p>\n<p><strong><em>Integrated Tools<\/em><\/strong><\/p>\n<p>In addition &#8211; from the DBA\u2019s perspective, existing tools such as SSMS will continue to work with full support for memory optimized tables and natively compiled SPs. In-memory objects\u2019 backup is fully integrated into SQL\u2019s backup and HADR will be fully integrated into AlwaysOn by CTP2. There are also added DMVs such as <em>sys.dm_db_xtp_index_stats<\/em> and <em>sys.dm_db_xtp_checkpoint_files\u00a0<\/em>to monitor memory consumption and storage activities, as well as stock reports like the following.\u00a0<\/p>\n<p>\u00a0<\/p>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png\" original-url=\"http:\/\/blogs.technet.com\/cfs-file.ashx\/__key\/communityserver-blogs-components-weblogfiles\/00-00-00-60-54\/3264.Memory-Usage-Details-for-Memory-Optimized-Tables.png\"><img decoding=\"async\" style=\"display:block;margin-left:auto;margin-right:auto;\" src=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png\" original-url=\"http:\/\/blogs.technet.com\/resized-image.ashx\/__size\/550x0\/__key\/communityserver-blogs-components-weblogfiles\/00-00-00-60-54\/3264.Memory-Usage-Details-for-Memory-Optimized-Tables.png\" alt=\" \" border=\"0\" srcset=\"\"><\/a><\/p>\n<p>\u00a0<\/p>\n<p>For more information, <a href=\"http:\/\/technet.microsoft.com\/en-US\/evalcenter\/dn205290?WT.mc_id=Blog_SQL_InMem_SQL2014\">download SQL Server CTP1<\/a>\u00a0and get started today, or\u00a0see the\u00a0<a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/06\/26\/sql-server-2014-in-memory-technologies-blog-series-introduction\">series introduction and index<\/a> to read more posts in this series.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As we emphasized in the previous blogs, with other in-memory technologies in the market today you have to migrate the entire database to memory or it&#8217;s a separate database product that deals with in-memory, which means learning new APIs and dealing with application compatibility issues.<\/p>\n","protected":false},"author":1457,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[],"product":[],"content-type":[2424],"topic":[],"coauthors":[2487],"class_list":["post-2123","post","type-post","status-publish","format-standard","hentry","content-type-best-practices","review-flag-1-1593580431-15","review-flag-2-1593580436-981","review-flag-lever-1593580264-545","review-flag-new-1593580247-437"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach - Microsoft SQL Server Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach - Microsoft SQL Server Blog\" \/>\n<meta property=\"og:description\" content=\"As we emphasized in the previous blogs, with other in-memory technologies in the market today you have to migrate the entire database to memory or it&#8217;s a separate database product that deals with in-memory, which means learning new APIs and dealing with application compatibility issues.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft SQL Server Blog\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/sqlserver\" \/>\n<meta property=\"article:published_time\" content=\"2013-08-13T16:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-23T06:49:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png\" \/>\n<meta name=\"author\" content=\"SQL Server Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SQLServer\" \/>\n<meta name=\"twitter:site\" content=\"@SQLServer\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"SQL Server Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/author\/sql-server-team\/\",\"@type\":\"Person\",\"@name\":\"SQL Server Team\"}],\"headline\":\"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach\",\"datePublished\":\"2013-08-13T16:00:00+00:00\",\"dateModified\":\"2024-01-23T06:49:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/\"},\"wordCount\":1235,\"commentCount\":10,\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/\",\"name\":\"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach - Microsoft SQL Server Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png\",\"datePublished\":\"2013-08-13T16:00:00+00:00\",\"dateModified\":\"2024-01-23T06:49:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#primaryimage\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#website\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/\",\"name\":\"Microsoft SQL Server Blog\",\"description\":\"Official News from Microsoft\u2019s Information Platform\",\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization\",\"name\":\"Microsoft SQL Server Blog\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft SQL Server Blog\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"http:\/\/www.facebook.com\/sqlserver\",\"https:\/\/x.com\/SQLServer\",\"https:\/\/www.youtube.com\/user\/MSCloudOS\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach - Microsoft SQL Server Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach - Microsoft SQL Server Blog","og_description":"As we emphasized in the previous blogs, with other in-memory technologies in the market today you have to migrate the entire database to memory or it&#8217;s a separate database product that deals with in-memory, which means learning new APIs and dealing with application compatibility issues.","og_url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/","og_site_name":"Microsoft SQL Server Blog","article_publisher":"http:\/\/www.facebook.com\/sqlserver","article_published_time":"2013-08-13T16:00:00+00:00","article_modified_time":"2024-01-23T06:49:12+00:00","og_image":[{"url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png","type":"","width":"","height":""}],"author":"SQL Server Team","twitter_card":"summary_large_image","twitter_creator":"@SQLServer","twitter_site":"@SQLServer","twitter_misc":{"Written by":"SQL Server Team","Est. reading time":"5 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/author\/sql-server-team\/","@type":"Person","@name":"SQL Server Team"}],"headline":"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach","datePublished":"2013-08-13T16:00:00+00:00","dateModified":"2024-01-23T06:49:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/"},"wordCount":1235,"commentCount":10,"publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#primaryimage"},"thumbnailUrl":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/","name":"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach - Microsoft SQL Server Blog","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#primaryimage"},"thumbnailUrl":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png","datePublished":"2013-08-13T16:00:00+00:00","dateModified":"2024-01-23T06:49:12+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#primaryimage","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2018\/03\/3264.Memory20Usage20Details20for20Memory20Optimized20Tables.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/2013\/08\/13\/sql-server-2014-in-memory-oltp-app-migration-scenario-leveraging-the-integrated-approach\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL Server 2014 In-Memory OLTP: App Migration Scenario Leveraging the Integrated Approach"}]},{"@type":"WebSite","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#website","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/","name":"Microsoft SQL Server Blog","description":"Official News from Microsoft\u2019s Information Platform","publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#organization","name":"Microsoft SQL Server Blog","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft SQL Server Blog"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/www.facebook.com\/sqlserver","https:\/\/x.com\/SQLServer","https:\/\/www.youtube.com\/user\/MSCloudOS"]}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/posts\/2123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/users\/1457"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/comments?post=2123"}],"version-history":[{"count":0,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/posts\/2123\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/media?parent=2123"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/post_tag?post=2123"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/product?post=2123"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/content-type?post=2123"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/topic?post=2123"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/sql-server\/blog\/wp-json\/wp\/v2\/coauthors?post=2123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}